Клавиатура ПЭВМ и ее взаимодействие с процессором
Особенности работы клавиатуры персональной ЭВМ РС–АТ состоит в следующем:
a) После нажатия клавиши ее код фиксируется в буфере клавиатуры и подается сигнал компьютеру, о том, что в клавиатуре произошло некоторое событие. Этот сигнал выдается в виде прерывания 09h (IRQ1® Int 09h);
b) Клавиатура фиксирует отдельно события: когда клавиша нажимается и когда ее отпускают. Коды нажатого и отжатого состояния клавиши отличаются ХТ клавиатуре единицей в старшем разряде (отжата), в клавиатуре АТ при отжатии клавиши сначала посылается байт F0h, а затем код клавиши;
c) Если клавиша не отпускается в течение времени более 0.5 с, то клавиатура генерирует повторные коды нажатой клавиши.
Для управления клавиатурой (рисунок 9.2) в ХТ и АТ использовался контроллер на основе однокристальной микро-ЭВМ Intel 8048, в более поздних моделях – контроллер 8042, выполняющий, по сути, те же функции, что и 8048.
Рисунок 10.2 – Схема подключения клавиатуры и мышки |
Основная задача БИС 8048 – отслеживать за клавишами и выдавать сообщение ROM – BIOS при нажатии и отпускании клавиши. В контроллере имеется буфер символов (порты клавиатуры 060H – 063H), в котором может храниться до 20 кодов клавиш, не обработанных ЦП.
Каждый раз, когда нажимается или отпускается одна из клавиш, схема клавиатуры генерирует однобайтовое число, называемое скен – кодом, которое однозначно идентифицирует перемещение клавиши. Клавиатура выдает различные скен – коды при нажатии и отпускании клавиши. При нажатии байт скен – кода содержит число в диапазоне от 1 до 83 (в стандартной клавиатуре ХТ). При отпускании генерируется скен – код на 128 (80H) больше, чем скен – код при нажатии клавиши. Например, при нажатии клавиши Z скен – код 44, а при отпускании 172 = 44 + 128.
Нажатие или отжатие клавиши сообщается ROM – BIOS посредством прерывания INT9, которое вызывает прикладную программу обработки прерываний. При этом читается состояние порта 96 (60H), через который осуществляется связь клавиатуры с BIOS.
Передача кодов с клавиатуры производится в последовательном старт-стопном коде (линии: данные и синхронизация, "Сброс", +5, земля). Прикладная программа получает скен-код и переводит его в 2-х байтный код. Младший байт этого кода содержит ASCII-код клавиши, а старший – скен-код клавиши. Специальные клавиши F1 – F10, Ins, Del и др., а также клавиши дополнительной цифровой клавиатуры имеют в младшем байте 0, а в старшем байте скен – код.
Затем прикладная программа BIOS помещает оттранслированный код в очередь (буфер), находящуюся в младших адресах памяти с 0000:041Е. Работа по переводу скен – кодов усложняется тем, что клавиатура IBM имеет несколько операций по изменению регистров, меняющих значение нажатых клавиш: Shift – c = C, Ctrl – C «break». Также меняется значение клавиши при нажатии клавиши Alt. Кроме этих регистровых клавиш есть еще CapsLock и NumLock.
Информация о состоянии клавиш регистров и клавиш переключателей хранится ROM – BIOS в младших адресах памяти: ячейки 417H и 418H. Когда нажимается одна из этих клавиш, BIOS устанавливает в байтах состояния определенный разряд. Как только BIOS получает код отжатия клавиши, она переключает соответствующий разряд в исходное состояние.
Всякий раз, когда BIOS получает скен – код для нажатия обычной клавиши, то первым делом проверяется состояние регистров, а затем транслируется скен – код в соответствующий 2-й байтный код. В процессе трансляции скен – кодов BIOS постоянно проверяет их на определенные комбинации клавиш: Ctrl+Alt+Del – перезагрузка; Shift – PrintScreen; Int5 – печать экрана; Ctrl – NumLock – приостановка работы, пока не будет нажата любая клавиша; Ctrl – Break Int27 – прерывание. Прямой ввод кодов ASCII может быть осуществлен с дополнительной цифровой клавиатуры при нажатой клавише Alt. (Нажать Alt и вводить цифры кода. При отпускании Alt на экране отображается соответствующий символ ASCII – кода).
После того как действие клавиши оттранслировано, оно записывается в пару байтов в буфере BIOS. Младший из них является главным, а старший – вспомогательным. Когда главный байт содержит ASCII-символ, то это означает, что была нажата одна из клавиш стандартных символов клавиатуры. Для этих ASCII-символов вспомогательный байт содержит скен– код для нажатой клавиши. В простейшем случае этот байт не используется. Он может быть использован, когда необходимо различать клавиши с одинаковыми символами, но различными скен-кодами. При вводе символов со вспомогательной клавиатуры, скен-код во вспомогательном байте равен нулю.
Когда главный байт равен нулю, то это означает, что была нажата какая-то из специальных клавиш: функциональные, управление курсором, либо комбинации с клавишами Ctrl, Alt, Shift. Каждому нажатию специальной клавиши, или комбинации клавиш соответствует определенное значение вспомогательного байта.
Схема взаимодействия клавиатуры с ЭВМ изображена на рис.10.3.
Нажатие или отпускание любой клавиши вызывает сигнал аппаратного прерывания Int09h, которое заставляет процессор перейти на программу обработки прерываний (ПОП). Адрес ПОП находится в ячейке памяти 94=36=24h. Контроллер клавиатуры распознает номер нажатой (отпускаемой) клавиши и помещает ее скен-код в регистр, имеющий адрес 60h.
Программа INT 09 помимо порта 60h работает еще с двумя областями ОЗУ: кольцевым буфером ввода, емкостью 15 слов (адреса от 40:1Еh до 40:3Dh). Каждая ячейка буфера хранит два байта: ASCII клавиши и слово состояния клавиатуры (флаги) – состояние управляющих клавиш. Программа INT 09, получив управление, считывает из порта 60h скен- код и анализирует его значение. Если скен – код принадлежит одной из управляющих клавиш и, к тому же, представляет собой код нажатия, то соответствующий флаг клавиатуры устанавливается в 1.
При нажатии любой другой клавиши программа INT 09 считывает из порта 60h ее скен – код и по таблице трансляции скен – кодов в коды ASCII формирует двухбайтовый код. Старший байт содержит скен – код, а младший – код ASCII. Поскольку нажатой клавише соответствует два скен – кода (строчные и прописные буквы), то соответственно образуется и два ASCII – кода (а и А, r и R и т.д.).
Для управления светодиодами, расположенными на клавиатуре, необходимо в порт 60h записать код команды 0EDh, а вслед за ней в этот же порт следует занести байт управления: Бит 0 = "1" – включение светодиода Scroll Lock; 0 – выключение; Бит 1 = "1" – включение Num Lock, 0 – выключение; Бит 2= "1" – включение Caps Lock, 0 –выключение.
Дата добавления: 2016-02-09; просмотров: 3410;