Программное управление портами ввода-вывода

Системы ЧПУ с управлением через 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-порта

 

Пример генерирования импульсов на выходе УСО

+5В
Программа генерирования положительной импульсной последовательности  положительной полярности для управления, например, шаговым приводом.

Для этого на выходе регистра формируется значение 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!