Аппаратное обеспечение IBM PC© Александр Фролов, Григорий ФроловТом 2, книга 1, М.: Диалог-МИФИ, 1992. 7.2. Работа параллельного принтерного портаBIOS может работать с тремя параллельными принтерными портами. В процессе тестирования и инициализации системы BIOS находит работоспособные принтерные порты и записывает их базовые адреса в таблицу. Таблица адресов располагается в области данных BIOS по адресу 0000:0408h. Возможны следующие значения базовых адресов:
Принтерные порты могут вырабатывать запросы на прерывание:
Каждый принтерный порт (принтерный адаптер) обслуживают несколько портов ввода/вывода. Рассмотрим их назначение. Порт 378h.Этот порт предназначен для записи выводимого на принтер байта данных. Возможно также чтение только что записанного байта. Порт 37Ah.Порт управления принтером, доступен для чтения
и записи: 7 6 5 4 3 2 1 0 T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ LT+-+T+T+T+T+T+T- L=T=- ¦ ¦ ¦ ¦ L= строб данных, принимает значение 1 при ¦ ¦ ¦ ¦ ¦ выводе байта, подключен к 1 контакту ¦ ¦ ¦ ¦ ¦ разъема, STROBE; ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L=== автоматический перевод строки после ¦ ¦ ¦ ¦ символа "возврат каретки" CR, контакт 14, ¦ ¦ ¦ ¦ AUTO LineFeed; ¦ ¦ ¦ ¦ ¦ ¦ ¦ L===== сброс принтера, активный уровень - 0, ¦ ¦ ¦ контакт 16, INIT; ¦ ¦ ¦ ¦ ¦ L======= выбор принтера для работы, контакт 17, ¦ ¦ SLCT IN; ¦ ¦ ¦ L========= разрешение прерывания от принтера, ¦ IRQ Enable; ¦ L============= равно 0. Если прерывания от принтера разрешены, они вырабатываются, когда сигнал готовности принтера ACK (контакт разъема 10) принимает уровень логического 0. Порт 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. Теперь принтер готов принят следующий символ распечатываемых данных. |