Реклама:

ШИНА

СИГНАЛ

БИТ

ИНВЕРСИЯ

Управление

-STROBE

инверсный

 

-AUTO FD

инверсный

 

-INIT

прямой

 

-SLCT IN

инверсный

Состояние

-ERROR

прямой

 

SLCT

прямой

 

PE

прямой

 

-ACK

прямой

 

-BUSY

инверсный

Таблица 3.1. Управляющие сигналы Centronica.

Для того чтобы при программировании каждый раз не задумываться об особенностях того или иного бита, целесообразно один раз написать функции записи в регистр управления и чтения из регистра состояния, учитывающие инверсии битов и их расположение в байте. Вариант реализации таких функций приведен ниже.

void Cent_Control_drv (unsigned char control) // Запись а регистр управления Centronics {

outportb (Cent_Base+2, (control * 0x0В) л OxOE ); }

unsigned char Cent_Status_drv (void)

// Чтение из регистра управления Centronics

{ 1

return ( ( inportb (Cent_Base+1) » 3 ) * 0x10 ); }

Что касается регистра данных, то запись в него производится командой вида:

outportb (Cent_Base, data);

3.2.2. Программирование на верхнем уровне

Программное прерывание 17Н предоставляет некоторые возможности по работе с параллельным портом принтера. Однако сразу же следует отметить, что этих возможностей недостаточно для полноценного программирования подключенных к этому порту внешних устройств. Тем не менее некоторые функции этого прерывания могут оказаться полезными.

Имеется три функции прерывания 17Н, выбираемые значением регистра АН:

Функция №0 — печать символа.

Вход: АН = 0, AL — символ, DX — номер порта (0, 1 или 2).

Выход: АН — статус порта (см. функцию №2). Функция №1 — инициализация порта.

Вход: АН = 1, DX — номер порта (0, 1 или 2).

Выход: АН — статус порта (см. функцию №2). Функция №2 — определение статуса порта.

Вход: АН = 2, DX — номер порта (0, 1 или 2).

Выход: АН — статус порта:

Значения " 1" в битах: 0 — тайм-аут,

3 — ошибка,

4 — принтер выбран,

5 — конец бумаги,

6 — подтверждение,

7 — принтер не занят.

Легко видеть, что устанавливаемые всеми функциями биты статуса соответствуют сигналам шины состояния интерфейса Centronics. Поэтому функцию №2 можно использовать для чтения данных с этой шины. Однако, как и в других случаях, использование прерывания существенно замедляет работу программы, поэтому рекомендуется непосредственно считывать данные по соответствующему адресу.

Действительно полезной оказывается функция №1 — инициализация порта. Дело в том, что эту процедуру необходимо выполнять после окончания работы с портами, иначе возможны конфликты с принтером. Поэтому рекомендуется вызывать функцию №1 прерывания 17Н при выходе из программы.

3.3. Примеры программирования

В данном параграфе приведены примеры драйверов устройств, показанных на рис. 3.2, 3.5 и 3.6.

3.3.1. Драйверы устройства "набор лампочек и кнопочек"

Для показанного на рис. 3.2 устройства необходимо реализовать следующие процедуры:

♦ инициализация,

♦ запись в порт светодиодов,

♦ чтение состояния переключателей.

И*** драйверы устройства "набор лампочек и кнопочек"


⇐ Предыдущая страница| |Следующая страница ⇒