Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет 1.doc
Скачиваний:
2
Добавлен:
11.11.2018
Размер:
126.46 Кб
Скачать

Результат работы программы

Блок-схема алгоритма:

Вывод: данная программа позволяет изучить принципы представления символов, вводимых с клавиатуры. В ходе выполнения данного задания были получены представления о скэн-коде и 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.

Контрольные вопросы

  1. Каким образом осуществляют ввод данных с клавиатуры в 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.