- •Лабораторная работа Изучение принципов работы клавиатуры.
- •1.3. Лабораторное задание
- •1.4. Содержание отчета
- •1. Программа вывода скэн-кода нажатой клавиши.
- •Результат работы программы
- •2. Программа управления светодиодами клавиатуры.
- •Контрольные вопросы
- •Каким образом осуществляют ввод данных с клавиатуры в ibm рс и уэвм?
- •Контрольные вопросы.
- •Тестовые вопросы.
Лабораторная работа Изучение принципов работы клавиатуры.
1.1.Цель: разобраться в процессе обмена данными между клавиатурой и ПК.
1.2. Структурная схема клавиатуры.
1.3. Лабораторное задание
1.3.1 Написать для IBM РС на ассемблере программу вывода скан-кода и рядом – символа нажатой клавиши.
1.3.2. Написать программу, управляющую светодиодами на лицевой панели клавиатуры.
1.4. Содержание отчета
1.4.1. В отчете указывают цель работы, задание. Делают выводы о проделанной работе.
1.4.2. Включают тексты программ с подробными комментариями, блок-схемы программ.
1.4.3. Отвечают на приведенные ниже контрольные вопросы.
1.4.4. Пишут самостоятельно 5 вопросов, которые с вашей точки зрения, охватывают тему "Клавиатура". Составляют 5 тестовых утверждений по теме. Для каждого тестового утверждения готовят четыре близких по смыслу ответа и только один из них должен быть правильный.
Формат 11-ти битовой кодовой посылки данных.
Посылка имеет стартстопный формат, каждый бит данных сопровождается синхросигналом по линии CLK. В кодовой посылке 1 бит является стартовым, затем следует 8 битов данных, которые замыкают биты паритета (нечет) и стоповый.
1. Программа вывода скэн-кода нажатой клавиши.
d_seg segment
msg db 'ASCII:',10,13,'$'
msg1 db 'Scan-code:',10,13,'$'
b dw 10
d_seg ends
c_seg segment
assume cs: c_seg, ds: d_seg
start:
mov ax, d_seg
mov dx, ax
xor ax,ax ; обнуление ax
xor cx,cx ; обнуление cx
mov ah, 6 ; прокрутка окна вверх
mov dh, 24 ; строка нижнего правого угла
mov dl, 79 ; столбец нижнего правого угла
mov bh, 7 ; видеоатрибут
int 10h
mov ah, 2 ; установить позицию курсора
mov bh, 0 ; видеостраница
mov dh, 0 ; строка
mov dl, 0h ; столбец
int 10h
mov ah, 9
lea dx, msg ; вывод сообщения
int 21h
mov ah, 9
lea dx, msg1 ; вывод сообщения
int 21h
beg:
mov ah, 0 ; ожидание нажатия клавиши
int 16h
cmp al, 27 ; нажат esc?
je m1 ; если да – на метку
mov cx, ax ; сохраняем код в cx
mov ah, 2 ; установка курсора
mov bh, 0 ; на 0 странице
mov dh, 0 ; в 0 строке
mov dl, 14 ; в 14 колонке
int 10h
mov ah, 2h ; вывод символа
mov dl, cl ; по полученному ASCII
int 21h
mov ah, 2 ; установка курсора
mov bh, 0 ; на 0 странице
mov dh, 1; во 2 строке
mov dl, 14 ; в 14 колонке
int 10h
mov ax, 0 ; обнуляем старшую часть ax
mov al, ch ; в младшую заносим ASCII-код
mov cx, 0 ; обнуляем счётчик
a:
mov dx, 0
div b ; деление скэн-кода на 10
push dx ; остаток – в стек
inc cx ; считаем количество выводимых символов
cmp ax, 0
jne a
viv:
pop dx ; выводим поочерёдно в обратном порядке
add dl, '0' ; и получаем скэн-код
mov ah, 2
int 21h
loop viv
jmp beg
m1: mov ah, 4ch ; выход
int 21h
c_seg ends
end start