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


Программирование параллельного порта (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");

}

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

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

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




- Начало -  - Назад -  - Вперед -