Организация ввода*вывода данных через параллельный порт

April 28, 2012 by admin Комментировать »

Общеизвестно, что параллельный порт используется для подключения устройств печати, хотя этим его применение  не исчерпывается  — интерфейс параллельного порта является очень удобным для создания различных аппаратно программных модулей управления элек

тронными исполнительными устройствами и устройств обработки данных как в промышлен

ности, так и лабораторных исследованиях.

Известно, что современные операционные системы Windows 2000/XP/2003  не позволя ют пользовательским  программам  напрямую работать с регистрами  параллельного порта (как, впрочем, и с другими портами в адресном пространстве ввода вывода), поскольку дос туп к портам ввода вывода могут получить только процессы, выполняющиеся в режиме ядра, например, драйверы устройств и некоторые системные сервисы.

В более ранних операционных системах линейки Windows 95/98/Millenium такой проблемы

не было, поскольку все ресурсы системы были доступны пользовательскому процессу, и управ лять вводом  выводом  через порт можно было непосредственно  инструкциями  ассемблера  in и out. Реализовать ввод вывод данных в параллельный порт в Windows можно, используя функ ции Win API CreateFile, ReadFile и WriteFile, хотя это будет несколько  сложнее и потре бует разработки  более сложного аппаратного интерфейса управляемого устройства.

Для управления  параллельным  портом посредством  функций WINAPI необходимо внача ле  открыть устройство функцией CreateFile, задав в качестве первого параметра «LPTn», где n — номер одного из параллельных портов, присутствующих в системе. Обычно n равно 1,

т.  е.  используется   «LPT1». После получения дескриптора  устройства с  помощью  функции

CreateFile можно выполнять операции чтения записи в устройство. Пример доступа к па

раллельному порту посредством  функций WINAPI показан  далее:

#include  <windows.h>

#include  <stdio.h>

. . .

HANDLE   hLPT;

char  *buf  = "Any string"; DWORD   bytes;

. . .

hLPT = CreateFile("LPT1",

GENERIC_READ  | GENERIC_WRITE,

0, NULL, OPEN_EXISTING,

0, NULL);

if (hLPT == INVALID_HANDLE_VALUE)

{

printf("Could not  open file (error %d)\n",   GetLastError());

return 0;

}

bool  fSuccess  =  WriteFile(hLPT, buf, strlen(buf),

&bytes,

NULL);

. . .

Таким образом можно вывести данные на принтер в программе, но управлять записью данных непосредственно в регистр устройства, разработанного  пользователем, не получится. Указанный выше фрагмент кода работает с устройством посредством драйвера операцион ной системы.

Для ввода вывода  данных в  параллельный порт  в  операционных  системах Windows

2000/XP/2003/Vista мы будем использовать  драйвер PortTalk, позволяющий  осуществлять доступ к физическим портам ввода вывода напрямую. Принцип работы драйвера мы не бу дем рассматривать подробно, скажу лишь, что его основная функция – очистить бит защиты, который устанавливается для всех приложений  Windows, работающих в пользовательском режиме.  Данный бит запрещает приложению,  работающему в пользовательском режиме, обращаться напрямую к защищенным ресурсам системы, к которым относятся регистры вво да вывода физических устройств и системные области памяти. Если бит сбросить, то ваше приложение  сможет получить доступ к этим ресурсам, причем программировать порты ввода вывода можно будет с помощью языка ассемблера точно так же, как  это имеет место в Win dows 98/Me.  Перейдем к практическим аспектам работы с параллельным портом.

Источник:  Магда Ю. С. Компьютер  в домашней лаборатории.  – М.: ДМК Пресс, 2008. – 200 с.: ил.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты