Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Вывод байта на принтер через параллельный адаптер

Для того, чтобы вывести символ на принтер, программа вначале должна убедится, что уровень сигнала на линии BUSY (бит 7 порта 379h) равен 0, а уровень сигнала на линии ACK (бит 6 порта 379h) - единице. После этого следует установить код выходного символа на линиях DATA (порт 378h).

Затем не ранее, чем через 0,5 мкс линию STROBE (бит 0 порта 37Ah) необходимо перевести в состояние логического 0. При этом выходной символ запишется во внутренний буфер принтера. Уровень логического нуля необходимо удерживать в течение как минимум 0,5 мкс. Это время нужно для того, чтобы символ записался в буфер принтера. После истечения интервала времени линию STROBE нужно опять перевести в состояние логической единицы.

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

Когда принтер полность обработает выведенный символ, линия ACK перейдет в состояние 0. Приблизительно через 5 мкс после этого линия BUSY также перейдет в состояние 0.

Еще через 5 мкс линия ACK примет состояние 1. Теперь принтер готов принят следующий байт данных.

Функции bios для работы с принтером

В BIOS есть ряд функций, предназначенных для работы с принтером, подключенным через параллельный адаптер. Это функции 00h,01h,02hпрерывания INT 17h.

Печать символа

Функция 00h предназначена для печати одного символа:

Регистры на входе:

AH = 00h;

AL = код ASCII символа, который нужно напечатать;

DX = номер параллельного адаптера: 0 – LPT1, 1 – LPT2, 2 – LPT3

Регистры на выходе:

AH = слово состояния принтера

Эта функция выводит на принтер один символ, заданный в регистре AL. В регистре DX необходимо записать номер используемого параллельного адаптера. Для адаптера LPT1 это 0, для LPT2 - 1 и так далее.

После выполнения прерывания регистр AH будет содержать слово состояния, имеющее следующий формат:

Поле

Описание

0

Истекло время ожидания при выполнении операции печати, возможно, что принтер неисправен

1-2

Не используются

3

Ошибка ввода/вывода

4

1 - принтер выбран для работы;

0 - принтер находится в состоянии offline

5

Конец бумаги

6

Подтверждение

7

1 - принтер готов к работе;

0 - принтер занят

Вызвав функцию 00hпрерывания INT 17h, программа должна проверить биты слова состояния и убедиться в том, что вывод байта произошел без ошибок. Пользователь часто забывает перевести принтер в состояниеonline, вставить бумагу, либо вообще включить принтер. В этом случае целесообразно напомнить пользователю о необходимости выполнения этих действий и затем повторить попытку печати.

Если принтер неисправен, программа должна предоставить пользователю возможность отменить печать.

Обратите внимание на бит 1 байта состояния. Если принтер находится в состоянии offline, функция 00hпрерывания INT 17h ожидает некоторое время готовности принтера, после чего, если принтер так и не перешел в состояние готовности, устанавливает бит 1 в байте состояния. Область данных BIOS по адресу 0000h:0478h содержит четыре байта, которые используются в качестве счетчика времени при ожидании готовности принтера.

Соседние файлы в папке несколько программ