На главную Назад
Добро пожаловать, уважаемый посетитель!

Чтобы подключить печатающее устройство фирмы IBM или любое другое,

которое подключается через параллельный интерфейса, вам нужен

адаптер параллельного печатающего устройства (принтера). Этот

адаптер встроен в адаптер монохромного дисплея и принтера. Если вы

используете адаптер цветного графического монитора, то нужен

отдельный адаптер принтера. С точки зрения интерфейса с печатающим

устройством, эти два адаптера идентичны, за исключением адресов

ввода-вывода. Порты принтера на монохромной плате имеют адреса от

3BCH до 3BEH, а отдельная плата принтера имеет адреса от 378H до

37AH.

 

Адаптер принтера имеет два выводных порта и один порт ввода.

Этот адаптер очень похож на микросхему 8255, используемую для

интерфейса клавиатуры. Фактически, сначала в конструкции платы

печатающего устройства использовалась микросхема 8255. Но фирма IBM

решила лучше делать адаптеры с раздельными компонентами.

Выводной 8-битовый порт данных по адресу 3BCH или 378H передает

данные принтеру. Адаптер посылает символьный код ASCII, помещаемый

вэтот порт, прямо в принтер. Второй порт вывода, расположенный

по адресам 3BEH или 37AH, имеет 5 выводных бит. В нем содержатся

управляющие сигналы для принтера; эти линии управляют его работой и

инициализацией. В частности, бит 0 инициирует передачу данных в

принтер. Простая запись данных в порт вывода данных не означает

пересылку символа на принтер. Для того, чтобы в него поступил

символ, нужно установить бит строба (бит 0 порта 3BEH или 37AH)

равным 1, а затем снова сбросить на 0. На Фиг. 8.15 показана

короткая программа, передающая печатающему устройству строку

символов. Подпрограмма с именем PRINT обеспечивает сам процесс

передачи данных в принтер.

Обратите внимание, что процедура PRINT читает код из вводного

порта (3BCH или 379H). Этот порт возвращает информацию состояния

печатающего устройства программе. В данном примере программа

проверяет состояние, чтобы выводить следующий символ именно тогда,

когда принтер готов его принять. Бит 7 состояния порта ввода

показывает занятость принтера. Если этот бит содержит 1, печатающее

устройство готово принимать следующий символ для печати. В

противном случае программа должна подождать. Остальные 4 вводных

бита этого порта отражают возможные ошибки на печатающем

устройстве, например, отсутствие бумаги. Наш пример не контролирует

эти ситуации. Техническое описание содержит структуры вводных и

выводных портов платы адаптера печатающего устройства.

Microsoft (R) Macro Assembler Version 5.001/1/80 04:05:39

Фиг. 8.15 Вывод на принтерPage1-1

 

PAGE ,132

TITLE Фиг. 8.15 Вывод на принтер

 

0000 STACK SEGMENT STACK

00000040[ DW 64 DUP (?)

????

]

0080 STACK ENDS

 

= 0378 BASE EQU 378H

 

0000 CODE SEGMENT

ASSUMECS:CODE

 

000094 A8 A3 2E 20 38 2E MSG DB 'Фиг. 8.15', 13, 10, '$'

31 35 0D 0A 24

000C MAIN PROC FAR

000C1E PUSH DS ; Адрес возврата

000D2B C0 SUB AX, AX

000F50 PUSH AX

 

00108D 1E 0000 R LEA BX, MSG

0014 PRINT_LOOP:

00142E: 8A 07 MOV AL, CS:[BX] ; Выбор символа из строки для вывода

00173C 24 CMP AL, '$'; Конец строки?

001974 06 JE MAIN_RETURN

001BE8 0022 R CALL PRINT ; Печать символа

001E43 INC BX

001FEB F3 JMP PRINT_LOOP ; Переход к следующему символу

0021 MAIN_RETURN:

0021CB RET

0022 MAIN ENDP

 

;-----Эта подпрограмма печатает символ в регистр AL

 

0022 PRINT PROC NEAR

0022BA 0378 MOV DX, BASE ; Порт вывода данных на принтер

0025EE OUT DX, AL ; Занесение символа в порт вывода на принтер

002642 INC DX ; Адрес порта состояния принтера

0027 WAIT_BUSY:

0027EC IN AL, DX ; Опрос состояния принтера

0028A8 80 TEST AL, 80H ; Проверка разряда занятости принтера

002A74 FB JZ WAIT_BUSY ; Цикл до освобождения принтера

002C42 INC DX

002DB0 0D MOV AL, 0DH ; Установка разряда готовности данных

002FEE OUT DX, AL

0030B0 0C MOV AL, 0CH ; Сброс разряда готовности данных

0032EE OUT DX, AL

0033C3 RET

0034 PRINT ENDP

0034 CODE ENDS

END MAIN

 

Фиг. 8.15 Вывод на принтер

Один из управляющих битов порта 3BEH (или 37AH) управляет

линией прерывания от печатающего устройства. Для того, чтобы

печатающее устройство могло посылать свой сигнал прерывания в

контроллер 8259, этот бит нужно установить равным 1. Однако адаптер

печатающего устройства выдает неверный сигнал прерывания, т.е.

выбранный для этой цели сигнал не вызывает правильного прерывания.

Поэтому не стоит и пытаться писать программу, которая бы

использовала возможности прерывания от адаптера печатающего

устройства (если вы не захотите физически изменить плату

печатающего устройства). Далее мы приведем пример, который обходит

эту проблему с помощью системного таймера.


 

Mail.ru