Литмир - Электронная Библиотека

Физический и электрический интерфейс. Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов. IEEE 1284 предусматривает два уровня интерфейсной совместимости: первый уровень — для уст ройств, не требующих высоких скоростей обмена, но использующих возможность смены направления передачи данных; второй уровень — устройства, работающие в расширенных режимах, с высокими скоростями и длинными кабелями. Требования к передатчикам приведены в таблице 3, для приемников — в таблице 4.

Таблица 3. Требования стандарта IEEE 1284 к передатчикам

Требование ∙ Значение

Диапазон уровней сигналов без нагрузки… -0.5…+5.5 В

Уровень "1" при токе нагрузки 14 мА, не менее… +2.4 В

Уровень "0" при токе нагрузки 14 мА, не более… + 0.4 В

Выходной импеданс, измеренный на разъеме… 50±5 Ом

Скорость нарастания/спада импульса (должна находиться в указанных пределах)… 0.05-0.4 В/нс

Таблица 3. Требования стандарта IEEE 1284 к приемникам

Требование ∙ Значение

Допустимые пиковые значения сигналов, выдерживаемые без ошибок в работе, В… -2.0 — +7.0

Порог срабатывания "1", не выше, В… 2.0

Порог срабатывания "0", не ниже, В… 0.8

Гистерезис приемника (пределы), В… 0.2–1.2

Входной ток (втекающий и вытекающий), не более, мкА… 20

Входная емкость, не более, пФ… 50

Примечание: Входные линии соединяются с шиной питания резистором 1.2 кОм.

Стандарт IEEE 1284 определяет три типа используемых разъемов: A (DB-25S), В (Centronics-36), С (новый малогабаритный 36-контактный разъем). Интерфейсные кабели могут иметь от 18 до 25 проводников (в зависимости от числа проводников GND). Не предъявляется жестких требований к экранировке и прочим параметрам, однако, такие кабели могут работать только на низких скоростях при длине не более 2 метров. Стандарт IEEE 1284 для улучшенных кабелей определяет следующие параметры:

— Все сигнальные проводники должны быть перевиты с отдельными обратными (общими) проводами;

— Каждая пара должна иметь импеданс 62±6 Ом в диапазоне частот 4-16 МГц;

— Уровень перекрестных помех не должен превышать 10 %;

— Кабель должен иметь экран, покрывающий не менее 85 процентов внешней поверхности. На концах кабеля экран должен быть окольцован и соединен с контактом разъема GND.

Кабели, удовлетворяющие этим требованиям, маркируются как "IEEE Std 1284–1994 Compliant". Они могут иметь длину до 10 метров.

Работа с параллельным портом на низком уровне (т. е. на уровне прямого обращения к контроллеру порта) применяется при решении различного круга задач по обмену информацией с нестандартными устройствами, для написания драйверов принтеров и ряда других задач. Прямая работа с контроллером позволяет реализовать любой протокол обмена с устройством и использовать линии порта по своему усмотрению.

Контроллер порта расположен в адресном пространстве устройств ввода-вывода и обращение к нему производится посредством команд IN и OUT ассемблера. Или при помощи специальных команд компиляторов программ, написанных на языках высокого уровня. Информацию о портах LPT1 — LPT3 можно получить, прочитав переменные BIOS, приведенные в табл. 5.

BIOS ищет порты по адресам Base: 3BCh, 378h, 278h. Порт LPT4 BIOS найти не может:

— 378h — параллельный адаптер LPT1;

— 278h — параллельный адаптер LPT2;

— 3BCh — параллельный адаптер LPT3;

Стандартный порт имеет три 8-битных регистра, расположенных по соседним адресам, начиная с базового (Base) адреса. Перечень данных регистров приведен в табл. 6.

Примечание. W-R — доступные операции (W — запись, R — чтение, W/R — запись/чтение).

Регистр данных (DR). Записанные в этот регистр данные выводятся на выходные линии интерфейса D0-D7. Результат чтения этого регистра зависит от схемотехники адаптера, и соответствуют либо записанным ранее данным, либо сигналам на линиях D0-D7, что не всегда одно и тоже. При стандартном включении справедлив первый вариант — читаемые данные равны ранее записанным.

Регистр состояния (SR). Представляет собой 5-ти битный порт ввода, на который заведены сигналы состояния от внешнего устройства. Допускает только чтение. Назначение битов данного регистра приведены в табл. 7.

Регистр управления (CR). Регистр управления представляет собой 4-х битный порт вывода, допускающий чтение и запись. Биты 0, 1, 3 инвертируются, т. е. "1" в данных битах регистра управления соответствует "0" на соответствующих линиях порта. Назначение битов регистра управления приведены в табл. 8. Бит 5 используется только двунаправленными портами.

ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА

Для разработки прикладных программ необходимо выбрать язык программирования. Если требуется несложная, быстрая и компактная программа, которая не содержит сложных вычислительных операций, то для ее написания лучше выбирать язык низкого уровня (язык ассемблера). Язык ассемблера относится к группе машинно-ориентированных языков, т. е. каждому семейству микропроцессоров соответствует свой язык.

Язык высокого уровня следует выбирать, если необходимо производить сложные вычисления, или в случае, если высокое быстродействие программы не требуется. Объектные коды, полученные в результате трансляции программ, написанных на языке высокого уровня, обычно занимают в памяти ЭВМ намного больше места и исполняются медленнее в сравнении с программами на ассемблере. Часто применяется подход, когда критичные к быстродействию части программы пишутся на ассемблере, а вычислительные процедуры — на языке высокого уровня, например, на Паскале или Си.

Рассмотрим работу с регистрами интерфейса CENTRONICS на языке PASCAL или ассемблере:

ПАСКАЛЬ:

Port[$378]:=х

АССЕМБЛЕР 8086:

mov a1,х

mov dx,378h

out dx,a1

X — число типа "byte" (0..255). Например, при посылке 170 (dec) = 10101010 (bin) на линии D0-D7 единичный сигнал будет присутствовать на выводах Dl, D3, D5, D7 (обозначение выводов начинается с D0). Число 170 останется на выводах разъёма до тех пор, пока Вы не перешлёте туда же другое число (это может сделать и другая программа) или не выключите компьютер. Заметьте, что адрес порта в команде задан в шестнадцатиричном (hex) виде, а посылка — в десятичном (dec). Если вместо Паскаль-команды

Port[$378]:=170;

Вы примените

d:=Port[$378];

где d — переменная, то переменная примет значение последнего посланного в порт байта или, при переходе в режим приёма, значение байта, поданного на порт внешним устройством.

Пример чтения статус-регистра на языке Pascal:

d:=Port[$379];

В переменной d после выполнения программы будет отображено состояние порта. Допустим, переменная вернула значение 126 (dec). В двоичном (bin) виде оно выглядит как 01111110. Младшие (правые) три бита (нулевой, первый и второй) не используются, и почти равны 1, 1 и 0. Третий бит — 1, значит на ERROR высокий уровень. Та же ситуация на SELECT, PAPER END, ACK и BUSY (не забывайте, что сигнал BUSY является инвертированным).

Приведем пример фрагмента программы, которая считывает байт с линий данных D0-D7:

162
{"b":"870464","o":1}