Клавиатура. Клавиатурный буфер.

Клавиатура – это отдельное символьное устройство с микропроцессорным управлением. При включении питания клавиатура устанавливается в исходное состояние. Затем выполняется автотест, который проверяет схемы и память клавиатуры.

После прохождения теста клавиатура начинает работу. Работой клавиатуры управляет специальная электрическая схема – контроллер клавиатуры. В его функции входит распознавание нажатой клавиши и помещение закрепленного за ней кода во входной регистр (порт).

В ходе работы клавиатура непрерывно проверяет, есть ли изменения в состоянии клавиши. При каждом нажатии клавиши по интерфейсу посылается однобайтовый код, который равен позиционному номеру клавиши. Этот код называется позиционным или скэн кодом.

При освобождении клавиши к ее номеру добавляется 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; просмотров: 1988;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.