Контроллер клавиатуры представляет собой модель внешнего устройства, принимающего ASCII-коды от клавиатуры ПЭВМ.
Символы помещаются последовательно в буфер символов, размер которого установлен равным 50 символам, и отображаются в окне обозревателя.
В состав контроллера клавиатуры входят три программно-доступных регистра:
- DR (адрес 0) — регистр данных;
- CR (адрес 1) — регистр управления, определяет режимы работы контроллера и содержит следующие флаги (устанавливаются и сбрасываются программно):
- Е — флаг разрешения приема кодов в буфер, при Е = 0 контроллер игнорирует нажатие на клавиатуре, прием кодов в буфер не производится. На считывание кодов из буфера флаг Е влияния не оказывает;
- I — флаг разрешения прерывания, разрешает формирование запроса на прерывание от клавиатуры в момент установки флага готовности Rdy
- S — флаг режима посимвольного ввода. При S = 0 флаг готовности Rdy формируется только после нажатия кнопки Завершить ввод в окне обозревателя клавиатуры, при S = 1 – после каждого нажатия клавиши;
- SR (адрес 2) — регистр состояния, содержит два флага, устанавливаемые контроллером «аппаратно»:
- Err — флаг ошибки устанавливается при вводе в буфер 50-го символа, сбрасывается программно;
- Rdy — флаг готовности, устанавливается в зависимости от значения флага S, сбрасывается «аппаратно» после выполнения команды ввода из
регистра DR – считывание символа из буфера.
Контроллер клавиатуры выполняет четыре команды при выводе соответствующих кодов по адресу 1:
| Десятичное число | Команда |
| 101 |
очистить буфер (эквивалентно нажатию кнопки Очистить буфер) |
| 102 |
сбросить флаг Err в регистре SR |
| 103 |
установить в «1» флаг S в регистре CR |
| 104 |
сбросить в «0» флаг S в регистре CR |
Пример программирования контроллера клавиатуры в режиме посимвольного ввода:
| Метка | Команда | Примечание |
| | RD #10 | ; установить флаг Е
в регистре CR |
| | OUT 1 | ; - включить клавиатуру; |
| | OUT 11 | ; заодно включаем и
дисплей |
| | RD #103 | ; передаём в контроллер код команды |
| | OUT 1 |
; Установить S в «1» (режим посимвольного вода); |
| M1: |
IN 2 | ; проверка нажатия – флага готовности Rdy |
| | JZ M1 |
; ожидание Rdy = 1; |
| | IN 0 |
; считывание введённого символа из буфера в аккумулятор; |
| | OUT 10 |
; передача ASCII-кода (например) на символьный дисплей; |
| | JMP M1 |
; возврат к ожиданию следующего нажатия. |
Внимание! Контроллер клавиатуры с установленным битом Е
будет реагировать на нажатие клавиш только когда окно обозревателя Контроллер клавиатуры активно.
© Жмакин Анатолий Петрович (Курский государственный
университет). anatoly.zhmakin@gmail.com