Режим 2 — двунаправленный канал
При подаче сигнала SR РУС устанавливается в состояние, при котором все каналы настраиваются на работу в режиме 0 для ввода информации. Режим работы каналов можно изменять как в начале, так и в процессе выполнения программы, что позволяет обслуживать различные периферийные устройства в определенном порядке одной микросхемой. При изменении режима работы любого канала все входные и выходные регистры каналов и триггеры состояния сбрасываются.
Таким образом настройка внутренней организации ППА, т.е. специализация его для конкретного ПУ производится под воздействием управляющего слова «Режим работы». Любой из перечисленных режимов может быть выбран в ходе выполнения системной программы и остановлен загрузкой управляющего слова по команде OUT. Такая возможность позволяет простыми программными средствами осуществлять реконфигурацию периферии МП.
Режимы работы портов ввода вывода
Управляющее слово режимов работы
В дополнение к основным режимам работы микросхема обеспечивает возможность программной независимой установки в 1 и сброса в 0 любого из разрядов регистра канала ВС. Формат управляющего слова установки/сброса разрядов регистра канала ВС показан на рисунке ниже.
Если микросхема запрограммирована для работы в режиме 1 или 2, то через выводы ВС0 и ВСЗ канала ВС выдаются сигналы, которые могут использоваться как сигналы запросов прерывания для микропроцессора. Запретить или разрешить формирование этих сигналов в микросхеме можно установкой или сбросом соответствующих разрядов в регистре канала ВС. Эта особенность микросхемы позволяет программисту запрещать или разрешать обслуживание любого внешнего устройства ввода/вывода без анализа запроса прерывания в схеме прерывания системы.
Основные особенности режимов работы состоят в следующем:
1. В режиме 0 все 4 порта работают независимо и пользователь может выбрать каждый из них в качестве портов ВВ. При этом выводимые данные записываются в регистр-защелку, а вводимые – нет.
2. В режиме 1 три разряда порта С действуют как сигналы состояния и управления для порта А, и три – аналогично для В. Это по существу режим работы с «рукопожатием» (квитированием). Если порт данных (В или А) является портом ввода, то сигналы состояния и управления определяются так, как показано далее.
STB (строб) – 0 с периферийного устройства означает, что оно загружает данные в регистр-защелку.
IBF (входной буфер заполнен) – 1 указывает, что данные были загружены в регистр-защелку ввода, но процессор еще не прочитал их.
INTR (запрос прерывания) -1 указывает, что данные были загружены в регистр-защелку ввода, но еще не прочитаны процессором, и что прерывание для порта разрешено. Этот сигнал может быть использован дляпрерывания работы процессора.
Режим 1. Осуществление ввода информации
Управляющее слово порта С при вводе в режиме 1
Рассмотрим реализацию процедуры асинхронного обмена между МП и ПУ с помощью БИС КР580ВВ55, работающего в режиме 1. Предположим, что обмен данными осуществляется через канал А. Для ввода информации порт должен работать в режиме 1 (ввод).
Внешнее устройство, будучи готово ко вводу информации в МП, формирует сигнал STBA# (стробирование), по срезу которого осуществляется запись слова данных в порт А. При этом БИС КР580ВВ55 формирует сигнал IBFA (подтверждение приема). При высоком уровне сигнала IBFA внешнему устройству запрещается формировать сигнал STBA# и записывать в порт новое слово данных. По фронту сигнала STBA#, если сигнал IBFA равен 1 и установлен в 1 внутренний триггер INTEA, формируется сигнал запроса на прерывание INTRA (готовность), посылаемый на МП. Получив этот сигнал МП переходит на соответствующую программу обслуживания прерывания, в процессе которой осуществляет считывание слова данных из порта А. Во время считывания на БИС КР580ВВ55 подается сигнал RD#, по срезу которого слово данных передается из порта А на ШД МП. По фронту сигнала RD# сбрасывается сигнал IBFA, что свидетельствует об окончании ввода данных в МП и разрешает внешнему устройству формировать новый сигнал STBA#. Отметим, что установка (сброс) триггеров INTEA и INTEB в режиме 1 (ввод) осуществляется командой установки/сброса разрядов С4 и С2.
Режим 1. Осуществление вывода информации
ACK# (подтверждение) – 0 (с периферийного устройства) указывает, что были получены самые последние выводившиеся данные и устройство готово для получения следующих. Т.о., ACK служит в качестве сигнала готовности ПУ.
OBF# (буфер вывода заполнен) – 0 указывает, что процессор записал данные в порт, но ПУ еще не получил их.
INTR (запрос прерывания) – 1 указывает, что ПУ получило самые последние данные и готово для получения следующих. Кроме того, разрешено прерывание для порта. Этот сигнал может быть использован для прерывания работы процессора.
В режиме 1 (вывод) осуществляется запись слова данных из МП в регистры А или В. Во время записи слова, например в порт А МП подает на БИС КР580ВВ55 сигнал WR#, по срезу которого снимается сигнал запроса на прерывание INTRA. По фронту сигнала WR# БИС подает на внешнее устройство сигнал готовности порта к обмену OBFA#, подтверждая, что данные для выдачи записаны в порте А. После получения этого сигнала внешнее устройство принимает данные из порта А и формирует сигнал ACKA#, снимается сигнал OBFA#. Если прерывания от внешнего устройства разрешены, т.е. предварительно программным способом установлен INTEA(C6), то после приема информации внешним устройством (по фронту сигнала ACKA#) БИС формирует для МП сигнал запроса на прерывание OBFA#, МП выполняет соответствующую подпрограмму обслуживания. Программная установка и сброс INTEA и INTEB осуществляется командой установки/сброса разрядов С6 и С2.
Используя режим 1 работы каналов можно реализовать простой программно-управляемый обмен между МП и внешними устройствами. Для организации этой процедуры порт С должен служить регистром состояния внешнего устройства, порты А и В – для передачи данных. Опрос и модификация содержимого порта С может осуществляться с помощью соответствующих команд МП и аппаратным способом со стороны внешнего устройства.
Задание 1
Перевести все порты в режим 0. Назначить порт А портом ввода, порт В – портом вывода, разряды 0-3 порта С – для ввода, разряды 4-7 порта С – для вывода.
MVI A, 10010001b ; P7 – присвоить режимы и направления
OUT RUS ; P6-0, P5-0 – перевести порт А в режим 0
; Р4-1 – назначить РА для ввода
; Р3-0 С4-7 для вывода
; Р2-0 перевести РВ в режим 0
; Р1-0 назначить РВ портом вывода
; Р0-1 назначить РС0-3 для вывода
Задание 2
Перевести порт А в режим 1 (режим работы с рукопожатием), а порт В – в режим 0. Назначить порт А портом вывода, порт В – портом ввода, разряды 0-3 порта С назначить для ввода, а разряды 4-7 порта С для вывода.
MVI A, 10100011b
OUT RUS
В данном случае, когда Р6=0 и Р5=1 порт А работает в режиме 1. Р4=0 назначает порт А портом вывода, а Р1=1 назначает порт В портом ввода. Направление для порта С принимаются только по значению разрядов 0-2 и разрядов 4-5, т.к. разряды 3, 6 и 7 используются для сигналов сигналов «рукопожатия» порта А.
Задание 3
Перевести порты А и В в режим работы 1 (работа с «рукопожатием»), назначить порт А портом ввода, порт В – портом вывода, а разряды 6 и 7 порта С назначить для вывода.
MVI A, 10110100b
OUT RUS
Здесь разряд 4=1 назначает порт А портом ввода; разряд 2=1 переводит порт в режим 1; разряд 1=1 назначает порт В портом ввода. Направление передачи для порта С применяют только для разрядов 6 и 7, т.к. все разряды с 0 по 5 используются для сигналов квитирования.
Задание 4
Ожидать сигнал IBF для порта А и затем прочитать данные из порта А. Записать их в ячейку памяти INDAT. Предполагается, что порт А является портом ввода в режиме 1.
WAITR: IN PORTC ; входные данные доступны?
ANI 00100000b ;
JZ WAITR ; нет, ждать
IN PORTA ; да, прочитать данные
STA INDAT ; сохранить данные в память
Если порт А является портом ввода в режиме работы 1, то сигнал IBF порта А находится в разряде 5 порта С.
Задание 5
Ожидать сигнала «подтверждение» для порта В, а затем послать данные из ячейки памяти OUTDAT в порт В. Предполагается, что порт В я вляется портом ввода в режиме 1.
WAITR: IN PORTC ; ПУ готово?
ANI 00000100b ;
JNZ WAITR ; нет, ждать
LDA OUTDAT ; да, взять данные из памяти
OUT PORTB ; послать данные в порт вывода
Если порт В является портом вывода в режиме работы 1, то сигнал «подтверждение» ACK# для порта В (периферийное устройство готово) находится в разряде 2 порта С.
Задание 6
Установить разряд 5 порта С в 1 без изменения остальных разрядов.
MVI A, 00001011b
OUT RUS
Здесь разряд 7 равный 0, служит для выполнения операции установки или сброса разряда, разряды 3, 2, 1 равный 1012 служат для выбора разряда 5 порта С, а разряд 0=1 – для установки разряда.
Задание 7
Очистить разряд 0 порта С без изменения остальных разрядов
SUB A ; очистить разряд 0 порта С
OUT RUS
Здесь разряды 3, 2, 1 равный 0002 служат для выбора разряда 0 порта С, а разряд 0=1 – очистки разряда