Программное управление портами ввода-вывода
Системы ЧПУ с управлением через LPT –порт
Координатно-сверлильный станок.
Предназначен для производства печатных плат
Чертежно-графический автомат, двухкоординатный регистрирующий прибор.
Предназначены для работы в составе автоматизированного рабочего места конструктора и используется для изучения СЧПУ
Рис. Схема чертежно-графического автомата
Контроля нет.
СЧПУ автомата сборки плат АСП-902.
Предназначена для управления технологическим процессом установки микросхем на подготовленную печатную плату и для пайки этих микросхем ножевыми паяльниками.
Рис. Схема автомата сборки печатных плат (АСП)
Интерфейс устройств ЧПУ на основе LPT-порта
Традиционный, он же стандартный параллельный, LPT-порт называется SPP (Standart Parallel Port) и является портом, через который программно реализуется управление принтером. Название и назначение сигналов разъёма порта (табл. 3.1) соответствует интерфейсу Centronic s . Нам для целей управления и разработки устройств сопряжения важны данные на контактах разъема и соответствующие им сигналы регистров. Адаптер LPT-порта SPP содержит три 8-битных регистра, расположенных по соседним адресам в пространстве ввода-вывода, начиная с базового адреса порта BASE (3BCh, 378h или 278h). Рассмотрим порт с базовым адресом 378h, содержащий следующие регистры:
|
|
Data Register (DR) — регистр данных, адрес = 378h. Данные, записанные в этот регистр, выводятся на выходные линии интерфейса. Данные, считанные из этого регистра, в зависимости от схемотехники адаптера соответствуют либо ранее записанным данным, либо сигналам на тех же линиях, что не всегда одно и то же. Если в регистр записан байт с единицами во всех разрядах, а на выходные линии интерфейса через микросхемы с выходом типа «открытый коллектор» подать какой-либо код (или соединить ключами какие-то линии со схемной землей), то этот код может быть считан из этого регистра данных. Таким образом, на многих старых моделях адаптеров можно реализовать порт ввода дискретных сигналов, однако выходным цепям передатчика (источника) информации придется «бороться» с выходным током логической единицы выходных буферов адаптера. Схемотехника ТТЛ такие решения не запрещает, но если внешнее устройство выполнено на микросхемах КМОП, их мощности может не хватить для «победы» в этом шинном противоборстве. Однако современные адаптеры часто имеют в выходной цепи согласующий резистор с сопротивлением до 50 Ом. Выходной ток короткого замыкания выхода на землю обычно не превышает 30 мА. Простой расчет показывает, что в случае короткого замыкания контакта разъема на землю при выводе «единицы» на этом резисторе падает напряжение 1,5 В, что входной схемой приемника будет воспринято как «единица». Так что такой способ ввода будет работать не на всех компьютерах. На некоторых старых адаптерах портов выходной буфер отключается перемычкой на плате. Тогда порт превращается в обыкновенный порт ввода. В наших задачах регистр данных используется исключительно для вывода данных.
|
|
Status Register (SR) - регистр состояния, адрес = 379h. Представляет собой 5-битный порт ввода сигналов состояния принтера (биты SR.4-SR.7). Бит SR.7 инвертируется: низкому уровню входного сигнала соответствует единичное значение бита в регистре, и наоборот.
Ниже показано назначение бит регистра состояния (в скобках даны номера контактов разъема порта для интерфейса Centronics.
SR.7 - Busy - инверсное отображение состояния линии Busy (11): при низком уровне на линии устанавливается единичное значения бита - разрешение на вывод очередного байта.
SR.6 - Ack (Acknowledge) - отображение состояния линии Ack# (10).
SR.5 - РЕ (Paper End) - отображение состояния линии Paper End (12). Единичное значение соответствует высокому уровню линии - сигналу о конце бумаги в принтере.
|
|
SR.4 - Select - отображение состояния линии Select (13). Единичное значение соответствует высокому уровню линии - сигналу о включении принтера.
SR.3 - Error - отображение состояния линии Error# (15). Нулевое значение соответствует низкому уровню линии - сигналу о любой ошибке принтера.
SR.2 - PIRQ - флаг прерывания по сигналу Ack# бит обнуляется, если сигнал Ack# вызвал аппаратное прерывание. Единичное значение устанавливается по аппаратному сбросу и после чтения регистра состояния.
SR[1:0] - зарезервированы.
Control Register (CR) - регистр управления, адрес = 37Ah. Как и регистр данных, этот 4-битный порт вывода допускает запись и чтение (биты 0-3), но его выходной буфер обычно имеет тип «открытый коллектор». Это позволяет корректно использовать линии данного регистра как входные при программировании их в высокий уровень. Биты 0, 1, 3 инвертируются.
Ниже показано назначение бит регистра управления.
CR[7:6] - зарезервированы.
CR.5 - Direction - бит управления направлением передачи. Запись единицы переводит порт данных в режим ввода. При чтении состояние бита не определено.
CR.4 - AcklNTEN (Ack Interrupt Enable) - единичное значение разрешает прерывание по спаду сигнала на линии Ack# (сигнализацию запроса следующего байта).
|
|
CR.3 - Select In - единичное значение бита соответствует низкому уровню на выходе Select In# (17) - сигналу, разрешающему работу принтера по интерфейсу Centronics.
CR.2 - Init - нулевое значение бита соответствует низкому уровню на выходе Init# (16) - сигнал аппаратного сброса принтера.
CR.1 - Auto LF - единичное значение бита соответствует низкому уровню на выходе Auto LF# (14) — сигналу на автоматический перевод строки (LF - Line Feed) по приему байта возврата каретки (CR).
CR.O - Strobe — единичное значение бита соответствует низкому уровню на выходе Strobe# (1) — сигналу стробирования выходных данных.
Запрос аппаратного прерывания (обычно IRQ7 или IRQ5) вырабатывается по отрицательному перепаду сигнала на выводе 10 разъема интерфейса (Ack#) при установке CR.4=1. Во избежание ложных прерываний контакт 10 соединен резистором с шиной +5 В. Прерывание вырабатывается, когда принтер подтверждает прием предыдущего байта. Как уже было сказано, BIOS это прерывание не использует и не обслуживает.
Перечислим шаги процедуры вывода байта по интерфейсу Centronics с указанием требуемого количества шинных операций процессора (сигналов шины ISA).
1. Вывод байта в регистр данных (1 цикл IOWR#).
2. Ввод из регистра состояния и проверка готовности устройства (бит SR.7 - сигнал Busy). Этот шаг зацикливается до получения готовности или до срабатывания программного тайм-аута (минимум 1 цикл IORD#).
3.При получении готовности выводом в регистр управления устанавливается строб данных, а следующим выводом строб снимается. Обычно, чтобы переключить только один бит (строб), регистр управления предварительно считывается, что к двум циклам IOWR# добавляет еще один цикл IORD#.
Видно, что для вывода одного байта требуется 4-5 операций ввода-вывода с регистрами порта (в лучшем случае, когда готовность обнаружена по первому чтению регистра состояния). Отсюда вытекает главный недостаток вывода через стандартный порт — невысокая скорость обмена при значительной загрузке процессора. Порт удается разогнать до скоростей 100-150 Кбайт/с при полной загрузке процессора, что недостаточно для печати на лазерный принтер. Другой недостаток - функциональный - сложность использования в качестве порта ввода.
Стандартный порт асимметричен - при наличии 12 линий (и бит), нормально работающих на вывод, на ввод работает только 5 линий состояния. Если необходима симметричная двунаправленная связь, на всех стандартных портах работоспособен режим полубайтного обмена, Nibble Mode. В этом режиме, называемым также Hewlett Packard Bitronics, по линиям состояния одновременно принимаются 4 бита данных, пятая линия используется для квитирования. Таким образом, каждый байт передается за два цикла, а каждый цикл требует по крайней мере 5 операций ввода-вывода.
Табл. Разъём стандартного LPT-порта.
Контакт DB-25S | Назначение | ||
Выход/вход O/I | Reg. Bit | Сигнал Centronics | |
1 (37Ah) | O/I | CR.0\ | Strobe # |
2 (378h ) | O/(I) | DR.0 | Data 0 |
3 | O/(I) | DR.1 | Data 1 |
4 | O/(I) | DR.3 | Data 2 |
5 | O/(I) | DR.3 | Data 3 |
6 | O/(I) | DR.4 | Data 4 |
7 | O/(I) | DR.5 | Data 5 |
8 | O/(I) | DR.6 | Data 6 |
9 | O/(I) | DR.7 | Data 7 |
10 (379h) | I | SR.6 | Ack # |
11 | I | SR.7\ | Busy |
12 | I | SR.5 | PaperEnd |
13 | I | SR.4 | Select |
14 (37Ah) | O/I | CR.1\ | Auto Lf # |
15 (379h) | I | SR.3 | Error # |
16 (37Ah) | O/I | CR.2 | Init # |
17 | O/I | CR.3\ | Select In # |
18-25 | - | - | GND |
Примечания:
1. I/O задает направление передачи (вход-выход) сигнала порта. O/I обозначает выходные линии, состояние которых считывается при чтении из портов вывода; О(I) — выходные линии, состояние которых может быть считано только при особых условиях (см. ниже).
2 Символом «\» отмечены инвертированные сигналы (лог.1 в регистре соответствует низкому уровню напряжения линии).
3 Вход Ack# соединен резистором (10 кОм) с питанием +5 В.
Работа с портом через отладчик Debug:
_ O 378 ff - вывод в регистр 378h значения 11111111b
_ I 378 - ввод данных с регистра 378h
ff -введенное значение на мониторе. Командами вывода О output и ввода I (input) можно проводить запись и чтение по другим адресам регистров порта.
Программное управление портами ввода-вывода
1.Работа с регистрами через отладчик
Наиболее просто обратиться к регистрам порта при записи и чтении можно через отладчик DOS: Debug . exe
Запись значения единичного значения в разряде DR0 по адресу 378h по команде отладчика O (OUT вывод):
O 378 01 < enter > – вывод по адресу 378h значения байта в шестнадцатеричной форме, 0000 0001
O 378 ff < enter > вывод числа ffh = 1111 1111b
Чтение регистра заданным адресом по команде I (input):
I 378 < enter > - на мониторе появится значение в регистре 378h, записанное предыдущей командой, равное: ff.
2.Программное обращение к регистрам порта.
Порт ввода-вывода – есть 8, 16, 32 - разрядный аппаратный регистр, имеющий определенный адрес в адресном пространстве ввода-вывода (размер 65535), не пересекающимся с адресным пространством оперативной памяти. Вся работа компьютера с устройствами на самом низком уровне выполняется с использованием портов ввода-вывода. Доступ к портам иллюстрируется концептуальной схемой управления оборудованием рис.4.
Рис.4. Схема обращения к портам ввода-вывода
Запись и чтение регистров ввода-вывода выполняется командами процессора:
Out адрес порта вывода , аккумулятор - запись(вывод) в порт
In аккумулятор, адрес порта ввода - чтение (ввод)в процессор
Пример:
out 78h, al - содержимое регистра al пишется в регистр с адресом 78h
in al , 61 h – читается содержимое порта с адресом 61h в регистр al. В языке Ассемблер после кода операции стоит приемник данных, затем источник данных. Направление передачи - справа налево.
Если адрес регистра превышает значение 255 (размер байта), то адрес регистра предварительно записывается в регистр dx. Адреса регистров LPT-порта превышают 255 и предварительно пишутся в регистр общего назначения процессора dx. Запись числа 5 в регистр 378h потребует адресации порта через регистр dx:
mov dx, 378h ;адрес регистра
mov al,5
out dx, al ;вывод в порт 00 0101
Рассмотрим использование параллельного порта для управления включением-выключением реле по схеме рис.5. Для управления используется бит 0 регистра 378h (DR.0), а для ввода состояния реле 7 бит регистра состояния SR (SR.7)
Рис.5. Схема включения реле
При установке бита DR.0 на выходе линии порта устанавливается высокий уровень, на выходе инвертора низкий уровень, свето- диоды излучают, фототранзистор оптопары проводит, реле К1 включается. Через замыкающий контакт подается сигнал на вход
5-го бита входного регистра SR.5. Данный бит опрашивается до получения логической единицы, свидетельствующей о включении реле К1.
Пример программы управления реле К1:
mov dx,378h ;адрес регистра
mov al,00000001b ;установлен бит DR.0
out dx,al ;записана 1 по адресу 378h, вклю-
mov dx,379h ;чается реле К1
@@1: in al, dx ;ввести содержимое регистра – в аl
test al,00100000b ;проверить 5 бит
jz @@1 ;если нуль, продолжать чтение
PrintXYBit 0,0,al ;вывести на монитор регистр al
KeyWait ;ожидание для просмотра вывода
jmp menu ;выход в меню
Пример генерирования импульсов на выходе схемы рис.6.
Контакт | Рег.бит |
3 | DR.1 |
Рис.6. Схема генерации импульсной последовательности от LPT-порта
Пример генерирования импульсов на выходе УСО
|
Для этого на выходе регистра формируется значение 1. а потом 0:
mov dx,378h ;адрес регистра данных
na: mov al, 00000010b ;установить бит DR.1 = 1
out dx, al :записана 1, транзистор включен
;на выходе напряжение = 0
mov сx,1000 ;счетчик =1000
m: loop m ;пауза в 1000 циклов cx = cx-1
mov al,0 ;DR.1=0, транзистор оптопары выключен
out dx,al ;на выходе–высокое напряжение,=12В mov сx,100
m1: loop m1 ;пауза в течение 100 циклов
KeyTest ;клавиатура нажата? буфер пуст?
jz na ;нет, продолжить генерирование
;импульсов
jmp menu ;да, выход в меню
Полученная импульсная последовательность показана на рис.7.
Рис.7. Программная генерация импульсной последовательности
Для ее прекращения в программном модуле предусмотрен выход из цикла путем нажатия любой клавиши. Макрокоманда KeyTest проверяет наличие символа в буфере клавиатуры.
Литература по теме:
1.В. Юров Assembler –СПб.: Питер, 2001.-624.: ил
2.М. Гук. Аппаратные интерфейсы ПК. Энциклопедия. 2-изд.
Питер, 2002
3.М. Гук. Аппаратные средства IBM PC. Энциклопедия. 2-изд.
Питер, 2001.
Дата добавления: 2022-01-22; просмотров: 17; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!