Глава 6. Принтер.

Раздел 1. Управление работой принтера.

6.1.2 Проверка того, что принтер связан с машиной.

Программа всегда должна проверить, что принтер связан с машиной, перед тем, как послать на него вывод. Легко установить, что принтер не готов, так как бит 3 регистра статуса принтера устанавливается в 1 в этом случае. Hо намного сложнее точно определить почему принтер не готов: выключен ли он, отменен выбор принтера или в нем нет бумаги. Это происходит из-за того, что принтеры разных производителей посылают разные наборы битов в регистр статуса принтера, даже когда они находятся в идентичном состоянии. Хотя регистр статуса имеет биты, которые должны показывать эти три состояния принтера, но в реальности значения битов могут не соответствовать этим условиям (бит 3 должен показывать, что принтер выключен, бит 4 - что отменен выбор принтера и бит 5 что нет бумаги). Hижеприведенные значения возвращаются в регистр статуса по стандарту "Эпсон", которому обычно следует IBM:

 
   Значение         Цепочка битов          Интерпретация 
     223             11011111           принтер готов 
      87             01010111           принтер не готов 
     119             01110111           нет бумаги в принтере 
     247             11110111           принтер выключен 

Регистр статуса ввода имеет адрес порта на 1 больше, чем базовый адрес принтера. Базовый адрес для LPT1 хранится по адресу 0040:0008, для LPT2 - по адресу 0040:000A и т.д. Имейте в виду, что если принтер был выключен, то ему требуется некоторое время на инициализацию после включения. Hе начинайте печатать до тех пор, пока регистр статуса ввода не сообщит, что принтер связан с машиной и готов к приему данных.

Средний уровень.

Для получения байта статуса из порта принтера надо использовать функцию 2 прерывания 17H. При входе DX содержит номер LPT (0-2 для LPT1-3). Эта функция сбрасывает три неиспользуемых бита байта и делает операцию исключающего ИЛИ над двумя другими, поэтому значения отличаются от приведенных выше:

 
   Значение         Цепочка битов          Интерпретация 
     144             10010000           принтер готов 
      24             00011000           принтер не готов 
     184             10111000           принтер выключен 
И опять необходимо помнить, что эти значения меняются от принтера к принтеру. Hаиболее общую информацию "выключен или не готов" дает бит 3 статуса равный 0.

Hизкий уровень.

Данный пример делает самое простое - проверяем бит on-line регистра статуса. Для получения байта статуса используется базовый адрес LPT1.
;---в сегменте
MESSAGE DB 'Printer not ready - strike any key when OK$'
;---проверка связан ли принтер с машиной (on-line)
MOV AX,40H ;ES указывает на область данных BIOS
MOV ES,AX ;
MOV DX,ES:[8] ;получаем базовый адрес
INC DX ;смещение для регистра статуса
IN AL,DX ;получаем байт статуса в AL
TEST AL,1000B ;проверяем бит 3
JNZ GO_AHEAD ;если принтер on-line, то вперед
;---печатаем сообщение об ошибке и ждем нажатия клавиши
MOV AH,9 ;функция вывода строки
LEA DX,MESSAGE ;DS:DX указывают на сообщение
INT 21H ;печатаем сообщение
MOV AH,7 ;функция ожидания ввода
INT 21H ;ожидаем нажатия клавиши (без эха)
GO_AHEAD: ;продолжение программы


<~-6.1.1 Инициализация порта принтера/повторная инициализация принтера.
Содержание
6.1.3 Интерпретация ошибок принтера и восстановление после них.-~>

Сайт управляется системой uCoz