Загальновідомо, що паралельний порт використовується для підключення пристроїв друку, хоча цим його застосування не вичерпується – інтерфейс паралельного порту є дуже зручним для створення різних апаратно програмних модулів управління елек

тронним виконавчими пристроями і пристроїв обробки даних як в промисло

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

Відомо, що сучасні операційні системи 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 с.: Іл.