- •Лабораторная работа Изучение принципов работы клавиатуры.
- •1.3. Лабораторное задание
- •1.4. Содержание отчета
- •1. Программа вывода скэн-кода нажатой клавиши.
- •Результат работы программы
- •2. Программа управления светодиодами клавиатуры.
- •Контрольные вопросы
- •Каким образом осуществляют ввод данных с клавиатуры в ibm рс и уэвм?
- •Контрольные вопросы.
- •Тестовые вопросы.
Результат работы программы
Блок-схема алгоритма:
Вывод: данная программа позволяет изучить принципы представления символов, вводимых с клавиатуры. В ходе выполнения данного задания были получены представления о скэн-коде и ASCII коде символов.
2. Программа управления светодиодами клавиатуры.
mac_l MACRO s ;MACRO для записи управляющего байта в порт 60h
mov al, 0edh
out 60h, al
mov al, s
out 60h, al
endm
c_seg segment
assume cs:c_seg, ds:c_seg
org 100h
start:
mac_l 00000111b ;Включаем все светодиоды
replay: mov ah, 0 ;Ожидаем нажатия клавиши
int 16h
cmp al, 27 ;Если была нажата клавиша <Esc>,
je exit ;выходим из программы.
cmp flag, 1 ;Иначе меняем состояние светодиодов
jne no_f
mov flag, 0 ;Обнуляем флаг
mac_l 00000111b
jmp replay ;Переход на метку replay
no_f: mov flag, 1 ;Присваиваем флагу значение 1
mac_l 0
jmp replay ;Переход на метку replay
exit:
mac_l 0 ;Гасим светодиоды
mov ax, 4c00h ;Функция выхода из программы
int 21h
flag db 0
c_seg ends
end start
Блок-схема алгоритма
Вывод: данное задание позволяет научиться работать со светодиодами, расположенными на клавиатуре. Это клавиши NUM, CAPS, SCROLL. Управление светодиодами осуществляется посредством управляющего байта через порт по адресу 60h.
Контрольные вопросы
-
Каким образом осуществляют ввод данных с клавиатуры в ibm рс и уэвм?
Микропроцессор воспринимает каждое нажатие клавиши и выдает скан-код в порт микросхемы программируемого периферийного интерфейса (8255, 8042 или их аналоги).
Нажатие клавиши возбуждает прерывание, которое передает управление обработчику прерываний от клавиатуры. Когда клавиатура выдает скан-код, то вызывается прерывание клавиатуры INT 9h, ЦП анализирует полученный микросхемой 8255 скан-код. Введенный скан-код помещается в буфер клавиатуры, расположенный в ОЗУ (хранит до 15 символов).
Перед тем, как передать код сканирования микросхема 8048 выдает логическую "1" на своей линии КВ DATA в течение 0.2 мс, затем через 0.1 мс выдается каждый бит 8-битовой последовательности.
ASCII символ и код сканирования для одного нажатия клавиши считываются из буфера прерыванием INT 16h, которое заставляет BIOS выполнить подпрограмму ввода/ вывода с клавиатуры. Программа ввода с клавиатуры читает буфер клавиатуры и помещает коды ASCII и коды сканирования в регистр ЦП (8088). Затем подпрограмма считывает статус данных, чтобы определить, не нажаты ли специальные клавиши (Shift, Ctrl, Alt) и посылает АSCII код символа на экран (через прерывание INT 10h в видеобуфер).
2. Каким образом осуществляют вывод на светодиодные индикаторы?
Вывод на светодиодные индикаторы осуществляется путем записи в порт 60h команды 0edh, а затем байта, где первые 3 бита отвечали за индикацию нажатия клавиш: NumLock, CapsLock, ScrollLock.
3. Как узнать, что нажата какая-либо комбинация клавиш?
Нужно вызвать функцию 0h прерывание int 16h. Если в al возвратился 0, то нажата комбинация клавиш или в ah-расширенный ASCII-код . Если функция символьного в/в DOS возвращает 00h, нужно вызвать ее еще раз для получения расширенного кода ASCII.
4. Что такое порт ввода/вывода?
Порт ввода/вывода представляет собой интерфейс для обмена между устройствами ЭВМ.
5. Что собой представляют аппаратное и программное прерывания клавиатуры?
Клавиатура подключена к линии прерывания IRQ1. Этой линии соответствует прерывание INT 09h.
Клавиатурное прерывание обслуживается модулями BIOS. Драйверы клавиатуры и резидентные программы могут организовывать дополнительную обработку прерывания INT 09h. Для этого может быть использована цепочка обработчиков прерывания. Стандартный обработчик клавиатурного прерывания, входящий в состав BIOS, выполняет следующие действия:
• читает из порта 60h скан-код нажатой клавиши;
• записывает вычисленное по скан-коду значение ASCII-кода нажатой клавиши в специальный буфер клавиатуры, расположенный в области данных BIOS;
• устанавливает в 1 бит 7 порта 61h, разрешая дальнейшую работу клавиатуры;
• возвращает этот бит в исходное состояние;
• записывает в порт 20h значение 20h для правильного завершения обработки аппаратного прерывания.
Обработчик прерывания INT 09h не просто записывает значение ASCII-кода в буфер клавиатуры. Дополнительно отслеживаются нажатия таких комбинаций клавиш, как Ctrl-Alt-Del, обрабатываются специальные клавиши PrtSc и SysReq. При вычислении кода ASCII нажатой клавиши учитывается состояние клавиш Shift и CapsLock.
Можно программно вызывать прерывания клавиатуры. Программное обеспечение доступно аппаратным средствам клавиатуры через BIOS. Прерывание int 16h позволяет читать символ, удалять символ из буфера клавиатуры, изменять статус клавиатуры. Фактически, любой доступ к клавиатуре осуществляется через int 16h.
Можно написать свой обработчик клавиатуры, заменить старый на новый. Это осуществляется с помощью функций 35h, 25h.