Предыдущий раздел УПРАВЛЕНИЕ УСТРОЙСТВАМИ С ПРЕРЫВАНИЯМИ Следующий раздел

21.4.1. Логическая схема ввода с клавиатуры

На рис.76 приведена логическая схема, обеспечивающая посимвольный обмен с клавиатурой. В реализации этого обмена участвуют контроллер клавиатуры, а также разработанный в предыдущем разделе драйвер экрана.

Для того чтобы выполнить ввод с клавиатуры, прикладная программа вызывает интерфейсную логическую процедуру драйвера клавиатуры «Ввод символа». Если в буфере драйвера имеется хотя бы один символ (N>0), то этот символ в качестве выходного параметра передается в прикладную программу. При отсутствии символа в прикладную программу возвращается соответствующее значение признака результата r.         

 

 

Рис. 76. Логическая схема ввода с клавиатуры

 

Исходной причиной появления кода символа в буфере драйвера является нажатие соответствующей клавиши на клавиатуре. Взаимосвязь между этими двумя событиями обеспечивают контроллер клавиатуры и обработчик прерываний. Как показано на рис.76, логическая структура контроллера клавиатуры представляет собой совокупность двух процессов – «Прием» и «Выдача». Процесс «Прием» инициируется при нажатии, а также при отпускании любой клавиши и помещает генерируемый клавишей SCAN-код во внутренний 4-позиционный буфер контроллера. В результате появления кода в буфере SCAN-кодов инициируется процесс «Выдача», находившийся в состоянии «Вход 1». Данный процесс выбирает код из буфера, помещает его в порт 60h и выдает в ЦП сигнал прерывания.

Если прерывание разрешено, инициируется модуль «Обработчик прерываний клавиатуры», который считывает SCAN-код из порта 60h и сообщает контроллеру о завершении этой операции установкой бита 7 в порте 61h. Это приводит к инициированию процесса «Выдача», находившегося в состоянии «Вход 2». Данный процесс возвращается в состояние «Вход 1». Далее опять выбирается SCAN-код из буфера, и описанные выше действия повторяются.

После установки бита 7 в порте 61h обработчик прерываний выполняет обработку принятого SCAN-кода. Обработка кода, вызванного нажатием алфавитно-цифровой клавиши, сводится к преобразованию SCAN-кода в код ASCII, размещению полученного кода в буфере драйвера и к выводу эха символа.

Необходимость вывода «эха» обусловлена тем, что клавиатура и экран не связаны между собой на уровне контроллеров. Для того чтобы видеть на экране вводимый символ, необходимо выполнить связывание на уровне драйверов. Как видно из рис.76, для этого достаточно, чтобы при нажатии отображаемого символа обработчик прерываний клавиатуры вызвал логическую процедуру «Вывод символа».

Логическая процедура «Инициализация» имеет единственный входной параметр u: u=0 – выполнить замену системного обработчика прерываний клавиатуры на свой обработчик; u=1 – выполнить замену своего обработчика прерываний клавиатуры на системный обработчик.

 


Предыдущий раздел В начало Следующий раздел