Подсистема ввода-вывода, содержащая один порт ввода

Простая подсистема ввода-вывода может иметь один порт ввода. Если данные поступают от низкоскоростных УВВ (например, от переключателей), то единственными нужными соединениями ЦП с УВВ являются линии шины данных (рис. 8.3). Шина адреса не нужна, так как имеется только один порт.

Центральный процессор оперирует, естественно, со словами только определенной длины. Если у периферийного устройства слово короче, чем у процессора, то оставшиеся линии шины данных можно не подсоединять к УВВ. Неиспользуемые разряды можно очистить с помощью операции маскирования. Если, например, УВВ передает 4-раз-рядные данные 8-разрядному процессору, то операция маскирования будет иметь вид:

AND #00001111В,

если используются четыре линии младших разрядов шины данных. Периферийное устройство с длиной слова, большей чем у ЦП, потребует для передачи данных несколько портов и несколько операций ввода.

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

При асинхронной передаче данных каждому передаваемому символу должен предшествовать специальный код. Предположим, например, что специальный код — слово, состоящее из всех единиц, т. е. слово 11111111 для 8-разрядных двоичных слов. Передача данных будет происходить следующим образом:

Шаг 1. Прочитать входные данные.

Шаг 2. Если входные данные отличны от специального кода, вернуться к шагу 1.

Шаг 3. Прочитать собственно данные.

Характеристики периферийного устройства определяют временною последовательность операции ввода. Если УВВ передает данные регулярно, то программа может «центрировать» момент приема данных, ожидая дополнительное время, равное половине длительности передачи данных. В этом случае ЦП получит данные в середине последовательности тактовых сигналов, а не в начале, когда данные могут еще изменяться и вероятность ошибки больше (рис. 8.4).

Пример. Предположим, что периферийное устройство передает данные асинхронно с максимальной скоростью 100 8-разрядных слов в секунду. Чтобы оповестить ЦП о доступности данных, используется слово, состоящее из восьми единиц. Процедура ввода данных такова: Шаг 1. Центральный процессор проверяет входные данные, пока не обнаружит слово 11111111.

Шаг 2. Центральный процессор ждет 15 мс, чтобы выйти на центр сигнала передаваемых данных.

Шаг 3. Центральный процессор читает собственно данные.

В этом простом случае ЦП может ввести отсчет времени по собственному генератору тактовых импульсов. Приведем пример типичной последовательности команд, реализующих программно-организованную временною задержку:

DELAY: Загрузить аккумулятор # NTIMES Декрементировать аккумулятор Если не нуль, переход на DELAY

Центральный процессор выполняет команду ЗАГРУЗИТЬ АККУМУЛЯТОР 1 раз, а команды ДЕКРЕМЕНТИРОВАТЬ АККУМУЛЯТОР и ЕСЛИ НЕ НУЛЬ, ТО ПЕРЕХОД столько раз, каково значение константы NTIMES. На рис. 8.5 изображена блок-схема и приведен расчет времени цикла-задержки для МП Intel 8080 и Motorola 6800. Во время задержки процессор: Полностью загружен.

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

Шаг 1. Центральный процессор считывает, эдодны^ данные до тех пор, пока не обнаружит слово, состоящее из вс^х единиц.

Шаг 2: Центральный процессор ожидает 15 мс, чтобы синхронизироваться со входом.

Шаг 3* Центральный процессор читает слово дашшк*

Шаг 4. Центральный процессор проверяет, завершена ли передача. Если нет, то ЦП ожидает 10 мс и возвращается к выполнению шага 3.

Остается вопрос, как определить момент окончания передачи. Первая возможность: общая длина всего сообщения известна заранее или ее значение содержится в передаваемых данных. Например, два первых символа потока данных могут указывать его длину. Другая возможность определить момент окончания передачи -г резервировать специальный символ, указывающий конец данных. Блок-схе^ы программной реализации этих двух возможностей показаны на рис. 8.6.

Подсистема ввода-вывода, имеющая один порт ввода, требует небольшого объема аппаратуры. Однако ЦП должен, сам искать данные и обеспечивать необходимую синхронизацию. Кроме того, использование дополнительных символов, отмечающих начало и конец потока данных, уменьшает скорость передачи собственно данных.