Лабораторная работа № 1.
Клавиатура IBM PC.
Цель работы: изучение принципов построения, технических характеристик и параметров клавиатуры ПЭВМ.
Задача:
1. Составить программу, выполняющую следующие процедуры: а) выполнение команды установки задержки и периода автоповтора;
б) чтение Scan и ASCII-кода нажимаемой клавиши;
2. Снять осциллограммы сигналов на контактах CLK и DATA, для трех значений задержки и периода автоповтора.
3. Определить Scan и ASCII - коды пяти клавиш (произвольных) программным способом и снять осциллограммы Scan-кодов клавиш по сигналу DATA.
Основные принципы работы клавиатуры.
Рис. 1. Упрощенная схема клавиатуры.
Микроконтроллер клавиатуры опрашивает состояние клавиатуры: факт нажатия и номер нажатой клавиши - скан-код (Scan Code).
Данные кодируются 1 байтом, 7 бит в котором – скан-код, а восьмой бит – признак нажатия или отжатия. Передача кода производится последовательно, начиная с младшего бита.
Формат передачи данных бывает 2-х типов:
· 9-битный (1 – стартовый и 8 – данные );
· 11-битный (добавляется бит паритета – контроль четности, а также стоповый бит).
Подключается клавиатура к компьютеру посредством кабеля с разъемом: DIN (5 pin, Male) - вариант AT или Mini DIN (6 pin, Male) - вариант PS/2.
Разъем Mini DIN имеет следующие линии интерфейса: CLOCK (сихронизация), DATA (данные), RESET (сброс), GND (земля), UCC (питание).
Когда скан-код поступает в контроллер клавиатуры, то инициализируется аппаратное прерывание (IRQ1), процессор прекращает свою работу и выполняет процедуру, анализирующую скан-код, входящей в состав ROM BIOS. При поступлении скан-кода от клавиш <Alt>, <Ctrl> или <Shift>, <CapsLock> изменение статуса записывается в RAM. Во всех остальных случаях скан-код трансформируется в код символа специальной программой по специальным таблицам: ДКОИ, КОИ-7, ASCII. Введенный код помещается в буфер клавиатуры, организованый по принципу FIFO (первый вошел - первый вышел). Контроллер на материнской плате может не только принимать, но и передавать данные, чтобы сообщить клавиатуре различные параметры, например, частоту повтора нажатой клавиши и задержку.
Каждая клавиша генерирует два типа скан-кодов: код нажатия, когда клавиша нажимается, и код освобождения, когда клавиша отпускается. Для PC класса AT используется одна и та же цепочка битов для кодов нажатия и кодов освобождения, но коды освобождения состоят из двух байтов, первый из которых всегда равен 0F0H. Для PC XT-генерации код освобождения на 128 больше кода нажатия (седьмой бит равен 1).
Для работы с клавиатурой типа PC/XT используются порты с адресами 60h и 61h.
Выполнение работы:
1. Написаны программы, позволяющие устанавливать задержки и период автоповтора, а также определять скан-код и ASCII-код нажатой клавиши.
2.
Таблица кодов нажатых клавиш.
Скан - кодов |
ASCII – кодов |
|
P |
112 |
|
L |
108 |
|
K |
107 |
|
M |
109 |
Вывод: В ходе проведения лабораторной работы был рассмотрен принцип построение клавиатуры. Написаны программы для работы с параметрами клавиатуры и определения значений кодов нажатых клавиш. А также сняты осциллограммы сигналов работы клавиатуры при различных режимах ее работы.
Листинг программной части:
1. выполнение команды установки задержки и периода автоповтора.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
void main() {
int i,dalay,reload;
char *string;
printf("Устновка задержки и периода автоповтора.");
printf("\nУстновка задержки:\n"
"-- 0 - 250 mc\n"
"-- 1 - 500 mc\n"
"-- 2 - 750 mc\n"
"-- 3 - 1000 mc");
printf("\nУстновка периода автоповтора:\n"
"-- 0 - 30\n"
"-- 1 - 26.7\n"
"-- 2 - 24\n"
"-- 3 - 20\n"
"-- 4 - 15\n"
"-- 5 - 10\n"
"-- 6 - 9.2\n"
"-- 7 - 7.5\n"
"-- 8 - 5\n"
"-- 9 - 2\n");
cin >> dalay;
cin >> reload;
if (dalay==0) { if(reload==0) {outp(0x60,0xf3);outp(0x60,0x00);}
if(reload==1) {outp(0x60,0xf3);outp(0x60,1);}
if(reload==2) {outp(0x60,0xf3);outp(0x60,2);}
if(reload==3) {outp(0x60,0xf3);outp(0x60,4);}
if(reload==4) {outp(0x60,0xf3);outp(0x60,8);}
if(reload==5) {outp(0x60,0xf3);outp(0x60,0x0f);}
if(reload==6) {outp(0x60,0xf3);outp(0x60,0x0d);}
if(reload==7) {outp(0x60,0xf3);outp(0x60,0x10);}
if(reload==8) {outp(0x60,0xf3);outp(0x60,0x14);}
if(reload==9) {outp(0x60,0xf3);outp(0x60,0x1f);}};
if (dalay==1) { if(reload==0) {outp(0x60,0xf3);outp(0x60,0x20);}
if(reload==1) {outp(0x60,0xf3);outp(0x60,0x21);}
if(reload==2) {outp(0x60,0xf3);outp(0x60,0x22);}
if(reload==3) {outp(0x60,0xf3);outp(0x60,0x24);}
if(reload==4) {outp(0x60,0xf3);outp(0x60,0x28);}
if(reload==5) {outp(0x60,0xf3);outp(0x60,0x2f);}
if(reload==6) {outp(0x60,0xf3);outp(0x60,0x2d);}
if(reload==7) {outp(0x60,0xf3);outp(0x60,0x30);}
if(reload==8) {outp(0x60,0xf3);outp(0x60,0x34);}
if(reload==9) {outp(0x60,0xf3);outp(0x60,0x3f);}};
if (dalay==2) { if(reload==0) {outp(0x60,0xf3);outp(0x60,0x40
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.