Клавиатура. Клавиатурный буфер.
Клавиатура – это отдельное символьное устройство с микропроцессорным управлением. При включении питания клавиатура устанавливается в исходное состояние. Затем выполняется автотест, который проверяет схемы и память клавиатуры.
После прохождения теста клавиатура начинает работу. Работой клавиатуры управляет специальная электрическая схема – контроллер клавиатуры. В его функции входит распознавание нажатой клавиши и помещение закрепленного за ней кода во входной регистр (порт).
В ходе работы клавиатура непрерывно проверяет, есть ли изменения в состоянии клавиши. При каждом нажатии клавиши по интерфейсу посылается однобайтовый код, который равен позиционному номеру клавиши. Этот код называется позиционным или скэн кодом.
При освобождении клавиши к ее номеру добавляется 80h и полученный позиционный код также посылается по интерфейсу, т.о. каждой клавише соответствуют 2 позиционных кода: код нажатия и код освобождения.
Если клавиша остается нажатой дольше некоторого времени, её скэн код начинает посылаться по интерфейсу через 0,1 секунду до освобождения клавиши.
Нажатие, а также отпускание одной клавиши вызывает сигнал аппаратного прерывания, заставляющий процессор прервать выполняемую программу и перейти на программу обработки прерывания от клавиатуры. Процессор совместно с сигналом прерывания получает ещё и номер вектора прерывания 09h.
Программа int 09h получив управление в результате прерывания от клавиатуры считывает из порта 60h скэн-код клавиши и анализирует его значение.
Если скэн-код принадлежит одной из управляющих клавиш и к тому же представляет собой код нажатия, в байте статуса клавиатуры устанавливается бит, соответствующий нажатой клавише. При нажатии других клавиш программа int 009h по таблице трансляции скэн-кодов в коды ASCII формирует 2х байтовый код, старший байт которого содержит скэн-код, а младший – код ASCII, т.к. за каждой клавишей закреплено не менее 2х символов, то каждому скэн-коду соответствует не менее 2х кодов ASCII.
Чтобы выбрать соответствующий ASCII код используется байт статуса клавиатуры, в котором хранится информация о нажатии клавиш Alt, Shift, Ctrl и т.п. После подачи одного позиционного кода клавиатура ожидает от компьютера подтверждения его готовности принять следующий код. Если до получения сигнала подтверждения нажаты другие клавиши, клавиатура записывает их коды в буфер. Буфер построен как циклическая очередь, работающая по принципу FIFO. Он занимает непрерывную область адресов памяти, имеет 2 указателя, которые хранят позиции головы и хвоста строки символов, находящихся в буфере в текущий момент.
Указатель на голову установлен на первый введенный символ. Указатель на хвост указывает на позицию за последним введенным символом. Когда оба указателя равны, буфер пуст.
В буфере 16 символов – размер буфера 32 байта.
Расширенные коды присвоены клавишам или комбинациям клавиш, которые не имеют представляющего их символа ASCII – это функциональные клавиши или комбинации с клавишей Alt.
Расширенные коды имеют длину 2 байта, причем первый байт всегда = 0 позволяет программе определить, принадлежит ли данный код расширенному набору. 2й байт – это номер расширенного кода.
Дата добавления: 2015-07-30; просмотров: 2089;