
та LPT4 — по адресу 0:040Е. Базовые адреса определяют номера портов
входных данных соответствующего канала.
Адрес порта статуса соответствующего канала ПЗУ на единицу боль-
ше, чем базовый адрес. Адрес порта управления — на единицу больше,
чем адрес порта статуса канала.
Таким образом, базовый адрес порта может быть определен путем
чтения переменной BIOS из ПЗУ, а адрес портов статуса и управления —
путем добавления соответствующего смещения.
Ниже приводится фрагмент программы (пример 11.4), записанный на
языке Ассемблера, иллюстрирующий варианты вычисления адресов пор-
тов параллельного канала на примере канала
LPT1
и обращения к ним в
режим записи и чтения.
Для управления работой канала биты регистра управления должны
быть установлены в соответствии с требованиями решаемой задачи. При
этом бит 0 используют для формирования стробирующего сигнала при
выводе данных, для чего он программно, кратковременно устанавливает-
ся в состояние
1;
установка бита
1 в
единицу означает автоматический пе-
ревод строки после возврата каретки; установка бита
2
в состояние 0 ини-
циализирует порт принтера; бит 3 в состояние 0 отменяет выбор принте-
ра; бит 4 управляет разрешением прерывания от приемника, состояние
О
— прерывание приемника запрещено, состояние
1
— разрешено. Биты
5..7 не используются.
ПРИМЕР 11.4.
SUB, АХ, АХ; вычитанием АХ—АХ обеспечивается запись в АХ ноля.
MOV ES, АХ; в регистр экстракодового сегмента записывается ноль.
MOV DX,ES: [408Н]; в регистр данных DX записывается адрес базового
порта
LPT1 ИЗ
ПЗУ по адресу 0:0408 системы BIOS, здесь
ES — префикс замены, указывающий, что второй операнд
находится в сегменте ES, а квадратные скобки указывают,
что значение берется по адресу из байта со смещением
408Н в сегменте ES.
INC DX; в регистре DX адрес порта статуса.
INC DX; в регистре DX адрес порта управления.
SUB DX,1; в регистре DX адрес порта статуса.
IN AL,DX; чтение из канала содержимого регистра статуса
и
передача
его в регистр AL.
INC DX; в регистре DX адрес порта управления.
OUT DX,AH; символ из АН посылается в регистр управления канала
LPT1.
398
Обычно параллельный порт используют для подключения принтера,
поэтому в описании разрядов регистра управления рассматриваются сиг-
налы управления принтером, однако эти сигналы можно использовать и
для управления другими периферийными устройствами.
Рассмотрим фрагмент программы на языке Ассемблера, позволяю-
щий обеспечить режим прерывания от периферийного устройства, под-
ключенного к порту LPT2. По условию.в этой программе в регистр управ-
ления надо записать код 00001000 или в шестнадцатеричной системе 8i
6
(пример 11.5).
ПРИМЕР 11.5.
SUB АХ,АХ; ноль в аккумулятор АХ.
MOV ES,AX; ноль в регистр экстракодового сегмента.
MOV DX,ES: [40АН];базовый адрес порта LPT2 в DX.
ADD DX,2H; в DX адрес регистра управления порта LPT2.
MOV AL,8H; код 00001000 в регистре AL.
OUT DX,AL; код 00001000 в регистре управления порта LPT2.
Если регистром управления разрешено прерывание от приемника, то
сигнал подтверждения приема символа (бит
б
регистра статуса) будет за-
пускать выполнение программы прерывания, которая вызывается через
вектор F|fi.
Для оценки состояния периферийного устройства (с целью принятия
соответствующих программных действий) в программах, обслуживаю-
щих обмен через параллельные каналы, предусматривают анализ регист-
растатуса, биты которого распределены следующим
образом:
биты
0...2
—
не
используются; бит
3—0
— «ошибка принтера»; бит
4—0
— принтер не
связан с машиной;
1
— принтер связан с машиной; бит 5—0 — бумага
вставлена,
1
— бумага не вставлена; бит 6—0 — подтверждение приема
символа (устанавливается под воздействием сигнала ASK линии связи);
бит 7—0 — принтер занят,
1
— принтер свободен (устанавливается под
воздействием сигнала BUSY линии связи).
Регистр статуса может быть использован для анализа состояния и
других периферийных устройств.
При работе программ обмена с параллельными каналами программа
организуется так, что она постоянно обращается к биту 7 регистра стату-
са, чтобы узнать, можно ли передавать очередной байт. Предварительно
этот байт записывается в выходном регистре канала и через регистр
управления (бит 0) формируется короткий стробирующий импульс. По-
сле того как байт послан, программа ожидает наличия сигнала готовности
принтера для передачи следующего байта. Подтверждающий сигнал вы-
ражается не только изменением бита
7
регистра статуса, но и бита
6
этого
421