Контроллер клавиатуры
Контроллер клавиатуры (рис. 3.4.1.) представляет собой модель внешнего устройства, принимающего ASCII-коды от клавиатуры ЭВМ. Символы помещаются последовательно в буфер символов, размер которого установлен равным 50 символам, и отображаются в окне обозревателя (рис. 3.4.2).
В состав контроллера клавиатуры входят три программно-доступных регистра:
□ DR (адрес 0) — регистр данных;
□ CR (адрес 1)— регистр управления, определяет режимы работы контроллера и содержит следующие флаги:
• Е — флаг разрешения приема кодов в буфер;
• I — флаг разрешения прерывания;
• S — флаг режима посимвольного ввода.
□ SR (адрес 2) — регистр состояния, содержит два флага:
• Err — флаг ошибки;
• Rd — флаг готовности.
Рис. 3.4.1. Контроллер клавиатуры
Рис.3.4.2. Окно обозревателя контроллера клавиатуры
Регистр данных DR доступен только для чтения, через него считываются
ASCII-коды из буфера, причем порядок чтения кодов из буфера соответствует порядку их записи в буфер – каждое чтение по адресу 0 автоматически
перемещает указатель чтения буфера. В каждый момент времени DR содержит код символа по адресу указателя чтения буфера.
Флаги регистра управления CR устанавливаются и сбрасываются программно. В нем реализованы следующие флаги.
Флаг Е, будучи установленным, разрешает прием кодов в буфер. При Е = 0 контроллер игнорирует нажатие на клавиатуре, прием кодов в буфер не производится. На считывание кодов из буфера флаг Е влияния не оказывает.
Флаг I, будучи установленным, разрешает при определенных условиях формирование контроллером запроса на прерывание. При I = 0 запрос на прерывание не формируется.
Флаг S = 1 устанавливает т. н. режим посимвольного ввода, иначе контроллер работает в обычном режиме. Флаг S устанавливается и сбрасывается программно, кроме того, S сбрасывается при нажатии кнопки Очистить буфер в окне Контроллер клавиатуры.
Условия формирования запроса на прерывание определяются, с одной стороны, значением флага разрешения прерывания I, с другой — режимом работы контроллера. В режиме посимвольного ввода запрос на прерывание формируется после ввода каждого символа (разумеется, при I = 1), в обычном режиме запрос будет сформирован по окончании набора строки.
Завершить набор строки можно, щелкнув по кнопке Завершить ввод в окне Контроллер клавиатуры(см. рис. 8.10). При этом устанавливается флаг готовности Rd (от англ. ready) в регистре состояния SR. Флаг ошибки Err (от англ. error) в том же регистре устанавливается при попытке ввода в буфер 51-го символа. Ввод 51-го и всех последующих символов блокируется.
Сброс флага Rd осуществляется автоматически при чтении из регистра DR, флаг Err сбрасывается программно. Кроме того, оба эти флага сбрасываются при нажатии кнопки Очистить буферв окне Контроллер клавиатуры; одновременно со сбросом флагов производится очистка буфера — весь буфер заполняется кодами 00h, и указатели записи и чтения устанавливаются на начало буфера.
Для программного управления контроллером предусмотрен ряд командных слов. Все команды выполняются при записи по адресу регистра управления CR кодов с 1 в третьем разряде. Контроллер клавиатуры интерпретирует следующие командные слова:
• xxx101 — очистить буфер (действие команды эквивалентно нажатию кнопки Очистить буфер);
• xxx102 — сбросить флаг Err в регистре SR;
• ххх103 — установить флаг S в регистре CR;
• ххх 104 — сбросить флаг S в регистре CR.
Если по адресу 1 произвести запись числа ххх0nm, то произойдет изменение 4-го и 5-го разрядов регистра CR по следующему правилу:
n = 0 – записать 0;
n = 1 – записать 1; ( 3.4.1)
n = 2, …, 9 – сохранить разряд без изменения.
Дата добавления: 2015-04-07; просмотров: 1708;