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

Лабораторная работа Изучение принципов работы клавиатуры.

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