1.1.
Параллельный интерфейс
Параллельные интерфейсы отличаются высокой скоростью обмена,
но коротким кабелем и низкой помехозащищенностью.
Через параллельный интерфейс, имеющий 25-штырьковый разъем,
к компьютеру обычно подсоединен
принтер.
Этот стандарт называется
Centronics,
а его отечественный аналог - ИРПР-М.
Pаспределение сигналов по контактам в IBM-компьютере
Контакт Сигнал Направление сигнала 1 strob* строб источник - приемник 2 date1 данные источник - приемник ... ... данные источник - приемник 9 date8 данные источник - приемник 10 acknlg* подтверждение приемник - источник 11 busy занят приемник - источник 12 ре конец бумаги приемник - источник 13 select out* готовность приемника приемник - источник 14 auto feed* авт. перевод бумаги источник - приемник 15 error* ошибка приемник - источник 16 init* сброс источник - приемник 17 select in* выбор источник - приемник 19-25 ground* земля
Знаком * показаны инвертированные сигналы
(напр. error),
т.е. сигнал активен, когда на линии низкое напряжение
(логический "ноль"). Уровни напряжения сигнала соответствуют
стандарту ТТЛ-схем: логическая "1" = 2.4-5.25 В,
логический "0" = 0-0.5 В.
Процесс установления связи двух устройств в стандарте Centronics
происходит так:
1. Компьютер (источник) проверяет нет ли сигнала busy
на контакте 11, выставляет данные на контактах 2-9 и
подает сигнал strob на контакт 1. 2. Принтер (приемник) по появлению сигнала строб выставляет
сигнал busy. После обработки информации он снимает busy и
подтверждает прием данных сигналом acknlg.
Рис. 1.
Эпюры напряжений при работе интерфейса Centronics
Остальные сигналы менее значимы и могут не использоваться.
В случае конца бумаги (pe) или ошибки (error) принтер все равно
поднимет сигнал на линии busy. Инициализация принтера может быть
произведена не только управляющим сигналом init, но и программно.
За один раз передается сразу 8-битный информации (байт), что
позволяет передать один из 255 символов таблицы ASCII, которая
обычно "прошита" в ПЗУ принтера. При автоматизации физического эксперимента параллельный интерфейс
может использоваться для ввода/вывода цифровой информации по 12
линиям от компьютера (данные - 8 бит + управление - 4 бита) и по
4 линиям к компьютеру (состояние 4 бита). Каждая выходная линия,
при соответствующем согласовании, может быть использована
для управления состоянием аппаратуры типа "включено-выключено":
запуск генератора, опускание пера, открытие шторки и т.д. Простейший цифро-аналоговый преобразователь (ЦАП),
показанный на рис.2, может использоваться для вывода
аналоговой информации, например на самописец, осциллограф,
динамик и др. Входные линии параллельного порта можно использовать
для ввода состояния клавиш, наличия высокого/низкого уровня сигнала
и т.д. в ваших приборах. Например, можно программно легко
реализовать простейший счетчик импульсов или частотомер.
Если использовать генератор, у которого частота импульсов
зависит от емкости (или сопротивления), то можно на его базе
изготовить R или C измеритель.
Рис. 2.
Простейший ЦАП на основе регистра (параллельного порта)
Обратите внимание на тот факт, что некоторые линии управления и
состояние - инвертированы.
Для программирования данного интерфейса служат три регистра
по 8 бит каждый с шестнадцатеричным адресами (в адресном
пространстве внешних устройств) для первого параллельного интерфейса:
378h - данные, 379h - состояние, 37Ah - управление. Т.е. параллельный
порт занимает в адресном пространстве три байта.
Назначение битов регистров
Состояние (379) Управление (37A) 7 busy (1- занят) 7-5 не используется 6 acknlg (0- подтверждение приема) 4 irq (0-прерывание запрещено) 5 pe (1- нет бумаги) 3 slct in (0-отмена выбора) 4 slct out (1- выбран) 2 init (0- инициализация) 3 error (0- ошибка) 1 auto feed (автоперевод строки) 2-0 не используется 0 strob (1- вывод байта) Работу с ними обеспечивает прерывание BIOS (basic input/output system) int 17h,
которое имеет 3 функции:
0 - символ вывода на печать, 1 - инициализация порта, 2- получение слова состояния.
При этом номер функции заносится в регистр процессора AH,
код передаваемого символа в AL, а номер порта (0-2) в DX.
После вызова прерывания int 17 в AX окажется слово состояния.
В Турбо Паскале в библиотеке DOS есть тип Registers и процедура
Intr(n,registers), которые могут использоваться для работы с
параллельным портом например так:
В системе MS-DOS устройствам параллельных портов
ввода-вывода присваивается логические имена LPT1 (PRN), LPT2 и т.д.
function StatPrint: byte; {возвращает слово состояние}
var Reg: Registers;
begin
Reg.Ah:=2; Reg.Dx:=0; Intr(17, Reg);
end;