Контроллер клавиатуры представляет собой модель внешнего устройства, принимающего 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