Компьютерные сети. Лабораторные работы
29ec6025

Программирование параллельного порта (LPT).


DOS может работать с тремя параллельными принтерами, именуемыми LPT1, LPT2, LPT3. Каждый принтер имеет по три порта: порт вывода (базовый порт), порт состояния и порт управления. Адреса портов строго не фиксированы. В области данных BIOS по адресам 0040:0008, 0040:000A, 0040:000C содержатся адреса базовых портов для LPT1, LPT2, LPT3 соответственно. Адрес порта состояния - на 1 больше базового, порта управления - еще на 1 больше.

Для обращения к регистрам LPT удобно использовать следующий алгоритм :

/*============== Получение статуса портов ==============*/

# include < dos.h >

main () {

union REGS rr ;

int dataport , statusport , ctrlport ; /* Номера портов */

unsigned char stat ; /* Байт статуса */

int i ; /* Определение адресов портов принтера */

dataport =peek(0x40,8);

statusport =dataport+1;

ctrlport =statusport+1;

clrscr ();



/* Проверка состояний */

printf (" Порты LPT1 = %03X, %03X, %03X\n", dataport,statusport,ctrlport );

stat= inportb ( dataport );

printf ("\ n Регистр выходных данных - ");

for ( i =7; i >=0; i --) if ((stat>> i )&1) printf ("1"); else printf ("0");

stat= inportb ( statusport );

printf ("\ n Регистр статуса - ");

for ( i =7; i >=0; i --) if ((stat>> i )&1) printf ("1"); else printf ("0");

stat= inportb ( ctrlport );

printf ("\ n Регистр управления - ");

for ( i =7; i >=0; i --) if ((stat>> i )&1) printf ("1"); else printf ("0");

}

Регистр выходных данных - это тот адрес порта, через который проходит каждый байт данных, посылаемый в принтер.

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

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


Значения битов регистров статуса и управления:

Регистр управления:

бит 0 0 = нормальная установка, 1 = вызывает вывод байта данных
1 0 = нормальная установка, 1 = автоматический перевод строки после возврата каретки
2 0 = инициализировать порт принтера, 1 = нормальная установка
3 0 = отмена выбора принтера, 1 = нормальная установка
4 0 = прерывание принтера запрещено, 1 = разрешено
5-7 не используются
Регистр статуса:

бит 0-2 не используются
3 0 = ошибка принтера, 1 = нет ошибки
4 0 = принтер off-line, 1 = принтер on-line
5 0 = бумага вставлена, 1 = нет бумаги
6 0 = принтер подтверждает прием символа, 1 = нормальная установка
7 0 = принтер занят, 1 = принтер свободен

Содержание раздела