Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Аппаратное обеспечение IBM PC

© Александр Фролов, Григорий Фролов
Том 2, книга 1, М.: Диалог-МИФИ, 1992.

[Назад] [Содеожание] [Дальше]

7.2. Работа параллельного принтерного порта

BIOS может работать с тремя параллельными принтерными портами. В процессе тестирования и инициализации системы BIOS находит работоспособные принтерные порты и записывает их базовые адреса в таблицу. Таблица адресов располагается в области данных BIOS по адресу 0000:0408h. Возможны следующие значения базовых адресов:

  • 378h - принтерный порт LPT1;
  • 278h - принтерный порт LPT2;
  • 3BCh - принтерный порт на плате адаптера монохромного дисплея.

Принтерные порты могут вырабатывать запросы на прерывание:

  • LPT1 - IRQ7, INT 0Fh;
  • LPT2 - IRQ5, INT 0Dh.

Каждый принтерный порт (принтерный адаптер) обслуживают несколько портов ввода/вывода. Рассмотрим их назначение.

Порт 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. Теперь принтер готов принят следующий символ распечатываемых данных.

[Назад] [Содеожание] [Дальше]