Программно-управляемый ввод-вывод.
Выше сказано, что при организации программно-управляемого ВВ все действия по ВВ выполняются командами прикладной программы.
До выполнения собственно передачи данных МП должен выдать в ПУ приказ о подготовке его к операциям ВВ. Приказ может быть одним битом или полным словом. После этого МП должен проверить готовность устройства и произвести ВВ, когда бит готовности установлен в 1. Поэтому программно-управляемый ВВ обычно включает в себя выполнение следующих действий:
в
ПУ передается приказ об инициировании
действий ВВ.МП считывает состояние устройства
Проверяет готовность устройства к обмену данными
Если устройство не готово к обмену то пункты 2 и 3 повторяются
Если устройство готово к обмену, то МП осуществляет собственно ввод или вывод. Обычно это действие сбрасывает бит готовности ПУ.
Р
егистровая
модель считывателя с перфоленты с
использованием ВВ с отображением на
память. Адрес FF20 соответствует регистру
состояния и управления, который
подключается к порту двунаправленного
ВВ, а адрес АА21 – регистру данных
считывателя, который подключается к
порту считывателя.
Ассемблерная программа одного байта информации в аккумулятор:
INBYT: MVI A,1 ; инициирование запуска
STA 0FF20h ; считывателя
WAIT: LDA 0FF20h ; считывание состояния
ORA A ; установка флажков
JP WAIT ; зацикливание до готовности
LDA 0FF21h ; ввод байта данных
Команда MVI загружает в А код 1, а команда STA передает его в регистр состояния и управления, после чего считыватель начинает движение перфокарты. Затем в А вводиться код из регистра состояния и управления, команда вводиться код из регистра состояния и управления, команда ORA A устанавливает флажки в соответствии с введенным кодом, а команда JP (переход, если S=0) зацикливает процесс проверки состояния. После восприятия сигнала готовности (S=1) МП вводит в А из регистра данных считанное с перфокарты слово. Длина фрагмента программы составляет 15 байт.
В изолированном ВВ программа несколько изменяется: адреса портов становятся однобайтными (взяты две последние цифры предыдущих адресов), а ввод-вывод производиться специальными командами:
INBYT: MVI A,1 ; инициирование запуска
OUT 20h ; считывателя
WAIT: IN 20h ; считывание состояния
ORA A ; установка флажков
JP WAIT ; зацикливание до готовности
IN 21h ; ввод байта данных
Длина этого фрагмента на 3 байта короче предыдущего.
Аналогичный вид имеет подпрограмма вывода, но в этой подпрограмме нужно учесть, что если выводимое слово сначала находиться в А, его необходимо временно запомнить в стеке, чтобы освободить А для операции проверки готовности. Пусть бит готовности устройства подключен к старшему биту порта READY, а вывод осуществляется в порт DPORT. Тогда подпрограмма вывода имеет вид:
WRITE: PUSH PSW ; освобождение А
WAIT: IN READY ; считывание состояния
ORA A ; установка флажков
JP WAIT ; зацикливание до готовности
POP PSW ; восстановление выводимого слова
OUT DPORT ; вывод байта данных
Выделять параллельный порт ввода для бита готовности одного ПУ нецелесообразно. Поэтому обычно в 8-битный порт ввода READY упаковывают биты готовности до 8 устройств. После ввода в А упакованного слова состояния нескольких ПУ возникает проблема проверки бита определенного устройства. Она решается с помощью операции поразрядной конъюнкции упакованного слова состояния и слова маски MASK, содержащего единицу в бите, соответствующем подключению нового устройства, и нули в остальных битах.
…
IN READY ; ввод упакованного состояния
ANI MASK ; выделение нужного бита
…
Чтобы несколько сократить непроизводительные потери времени на ожидание готовности ПУ к обмену данными, вводят периодическую проверку готовности устройств.
Б
лок-схема
периодического последовательного
опроса нескольких устройств, называемого
также полингом.
Частота опроса выбирается таким образом,
чтобы система обеспечивала работу ПУ
с их номинальным быстродействием.
Асинхронная система передачи удобна, надежна, поскольку в организации обмена участвуют оба устройства. Если одно из ПУ неисправно или не включено, то обмен данными не состоится, о чем легко уведомить систему.
