Порт 379h.
Порт состояния принтера, доступен только для чтения:
7 6 5 4 3 2 1 0 T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ LT+T+T+T+T+T+-+T- ¦ ¦ ¦ ¦ ¦ L===¦= установлены в 0; ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L======= сигнал ошибки, активный уровень - 0, ¦ ¦ ¦ ¦ контакт разъема - 15, ERROR; ¦ ¦ ¦ ¦ ¦ ¦ ¦ L========= принтер выбран, контакт 13, SLCT; ¦ ¦ ¦ ¦ ¦ L=========== конец бумаги, контакт 12, PE; ¦ ¦ ¦ L============= готовность принтера, активный уровень - 0, ¦ контакт разъема - 10, ACK; ¦ L=============== 0 - принтер занят, находится в состоянии offline или произошла ошибка, контакт 11, BUSY.
Обычно редко приходится работать с принтером на уровне портов ввода/вывода, так как достаточно использовать функции BIOS или MS-DOS, предназначенные для этого. Приведенная выше информация может пригодиться вам для разработки собственного драйвера принтера или для подключения к принтерному порту какого-либо другого устройства ввода/вывода, например, аналого-цифрового преобразователя.
Для тех, кто будет использовать принтерный порт для подключения аппаратуры, приведем таблицу назначения контактов разъемов принтерного порта (контакт PC) на компьютере и контактов разъема непосредственно на принтере (контакт принтера):
Контакт Контакт Назначение Вход/выход PC принтера
1 1 Строб (STROBE) Выход, инверсия
2 2 Данные, бит 0 Выход
3 3 Данные, бит 1 Выход
4 4 Данные, бит 2 Выход
5 5 Данные, бит 3 Выход
6 6 Данные, бит 4 Выход
7 7 Данные, бит 5 Выход
8 8 Данные, бит 6 Выход
9 9 Данные, бит 7 Выход
10 10 Подтверждение, ACK Вход, инверсия
11 11 Занятость, BUSY Вход
12 12 Конец бумаги, PE Вход
13 13 Выбор, SLCT Вход
14 14 Авт. перевод Выход, инверсия строки, Auto Line Feed
15 32 Ошибка, ERROR Вход, инверсия
16 31 Сброс принтера, Выход, инверсия INIT
17 36 Принтер выбран, Выход, инверсия SLCT IN
18-25 16,17, Земля - 19-30,33
Для сигналов, отмеченных в таблице словом "инверсия", используется уровень логического нуля в активном состоянии сигнала.
Используя принтерный порт для управления внешними устройствами, будьте осторожны и выполняйте все правила заземления устройств. Если ваш устройство не заземлено или заземлено неправильно, принтерный порт может выйти из строя.
Следует также учитывать, что нагрузка на выходную линию принтерного порта не должна превышать одного входа TTL.
Если по каким-либо причинам вы пожелаете работать с принтером через порты ввода/вывода, вам необходимо изучить временную диаграмму принтерного порта. Она представлена на следующем рисунке:
----------------------------------¬ ¦ ¦ BUSY --------- L-------- ------ ACK ---------------------------------------¬ ---- ¦ ¦ L--------- --------------¬ ¦ ¦ DATA ----- L-------------------------------- ------ STROBE ------¬ ------------------------------------ ¦ ¦ L---------
Для того, чтобы вывести символ на принтер, программа вначале должна убедится, что уровень сигнала на линии 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. Теперь принтер готов принят следующий символ распечатываемых данных.