Навчальне видання
ПРОГРАМУВАННЯ ПОРТІВ КЛАВІАТУРИ МІКРОПРОЦЕСОРА Intel 8086(80286)
Методичні вказівки
до лабораторної роботи N 10
з курсу “Електронно-обчислювальні машини і мікропроцесорні системи” для студентів базового напрямку 6.08.04
"Комп'ютерні науки"
Укладачі Панчак Роман Теодорович
Теслюк Василь Миколайович
Ткаченко Роман Олексійович
Цмоць Іван Григорович
Редактор Грабовська О.О.
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Державний університет “Львівська політехніка”
ПРОГРАМУВАННЯ ПОРТІВ КЛАВІАТУРИ МІКРОПРОЦЕСОРА Intel 8086(80286)
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи № 10
з курсу “Електронно-обчислювальні машини і мікропроцесорні системи” для студентів базового напрямку 6.08.04 “Комп”ютерні науки”
ЗАТВЕРДЖЕНО
на засіданні кафедри САПР
Протокол N 14 від 03.04.1997 р.
ЛЬВІВ 1998
ПРОГРАМУВАННЯ ПОРТІВ КЛАВІАТУРИ МІКРО-ПРОЦЕСОРА Intel 8086(80286). Методичні вказівки до лабораторної роботи №10 з курсу " Електронно-обчислювальні машини і мікропроцесорні системи” для студентів базового напрямку 6.08.04 “Комп`ютерні науки" /Укл. Р.Т.Панчак, В.М. Теслюк, Р.О.Ткаченко, І.Г.Цмоць. - Львів: ДУЛП, 1998р. - 12 с.
Укладачі Р.Т. Панчак, ст. викл.,
В.М. Теслюк, канд.техн.наук, асис.,
Р.О.Ткаченко, канд.техн.наук, доц.,
І.Г.Цмоць, канд.техн.наук, ст.викл.
Відповідальний за випуск С.П. Ткаченко, канд.техн.наук, доц.
Рецензенти М.Б.Близнюк, канд.техн.наук, доц.,
Ю.В.Стех, канд.техн.наук, доц.,
5. ЗМІСТ ЗВІТУ
5.1 Титульний аркуш.
5.2 Мета роботи.
5.3 Теоритичнi вiдомостi.
5.4 Завдання.
5.5 Асемблерна програма в COM-форматi.
5.6 Вихiднi результати.
5.7 Висновок.
6. ЛІТЕРАТУРА
6.1 Абель П..Язык Ассемблера для IBM PC и программирования. / Пер. с англ. Ю.В.Сальникова. - М.:Высш.шк.,1992.- 447с.
6.2 Шагурин И.И., Бродин В.Б., Г.П.Мозговой. 80386. Описание и система команд. - М.: Малим, 1992. - 160с.
6.3. Морс С.П., Алберт Д. Д. Архитектура микропроцессора 80286/ Пер. с англ. - М.: Радио и связь, 1990.
EMBED PBrush
1. МЕТА РОБОТИ
Вивчити основні шляхи програмування портів клавіатури на ЕОМ з мікропроцесором Intel 8086(80286).
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Одним з найважливіших пристроїв персонального комп’ютера є клавіатура, яка призначена для інтерфейсу між користувачем та комп’ютером. На даний час існує три основні типи клавіатур. Це - клавіатура для комп’ютерів ІВМ РС/ХТ, яка містить 84 клавіші та 101-клавішна клавіатура для ІВМ РС/АТ. Деякі клавіатури містять перемикач режиму роботи (ХТ/АТ). Як контролер виступає процесор Intel 8042, який призначений для обміну між клавіатурою та CPU. Спрощена схема клавіатури показана на рис. 1.
Усі горизонтальні лінії матриці підключені через резистор до джерела живлення +5В. Контролер клавіатури містить два порти - вхідний і вихідний. Вхідний порт підключений до горизонтальних ліній матриці (Х0-Х4), а вихідний - до вертикальних (Y0-Y4)
Принцип роботи даного пристрою полягає ось в чому: rонтролер почергово на вертикальних лініях встановлює значення логічного нуля. Потім він почергово опитує горизонтальні лінії. У випадку, коли натиснутих клавіш не має, рівень напруги на всіх горизонтальних лініях буде відповідати логічній 1 (всі ці лінії підключені ло джерела живлення +5V через резистори). У випадку, коли натиснута клавіша - на відповідній горизотальній лінії буде логічний нуль. На наступному кроці визначається ASCII- код натиснутої клавіші.
Для роботи з клавіатурою використовують порти з адресами 60Н та 61Н. Порт 60Н при читанні містить сканкод останньої натисненої клавіші.
IN AL, 60H
При використанні порта 60Н на запис програма додатково отримує такі можливості:
-встановлення затримки перед переходом клавіатури в режимі автоповтору;
-встановлення періоду генерації скан-коду в режимі автоповтору;
-керування світлодіодами для клавіш -Scroll Lock, Num Lock, Caps Lock.
Для встановлення характеристик автоповтору в порт 60Н необхідно записати код команди 0F3Н, потім байт, що визначає характеристики режиму:
Функція 0Аh ;в регістр DX помістити зміщення адреси буфе-
... ;ра, а регістр DS має вказувати аналогічна
mov dx,offset bufer ; функція до 01H сегмент даних.
mov ah,0ah
int 21h ;після цієї команди, якщо припустимо, що ... ;користувач ввів стрічку `Help` то буфер, який ret ;до того містив стрічку `123456789` прийме
bufer: db 8 ;такий вигляд:
db `1234456789` ;bufer: db 8
;db 4 --тобто довжина введеного слова `Help`
; db `Help`--в 16-му коді це дорівнює 27h,48h,65h,6ch
;db4 0dh--код клавіші Enter
;db`789`--те що залишилося (ці символи не затерлися ;введеною стрічкою)
Далі наведемо таблицю ASCII кодів.
3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1 Як працює клавіатура на фізичному рівні?
3.2 Які порти використовуються для роботи з клавіатурою?
3.3 Які переривання BIOS та DOS використовуються для роботи з клавіатурою?
3.4 Для чого призначений буфер клавіатури?
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
4.1 Отримати завдання у викладача.
4.2 Написати, набрати на ЕОМ, асемблювати та злiнкувати програму, в СОМ-форматі.
4.3 Створити виконуючу асемблерну програму в COM-форматi.
4.4 Провести покрокове виконання програми в COM-форматi пiд вiдладником BD.COM
Період автоповтору визначає кількість посилок скан-коду, генерованих процесором клавіатури за одну секунду. Можна використовувати не лише ті значення, які наведені в таблиці, але й проміжні (наприклад, 9 або 16Н).
При керуванні світлодіодама використовують команду OEDH. Потім в порт 60Н необхідно записати байт, що має наступний формат:
Використання портів при роботі з клавіатурою є дуже громіздкою роботою для програміста, тому зручніше використати вже готові процедури і функції BIOS(Basic Input/Output System- Базова Система Вводу/Виводу), які розміщені в постійному запам’ятовуючому пристрої комп’ютера.
Для вводу з клавіатури використовують переривання BIOS INT 16H та переривання DOS INT 21H.
MOV AH, номер функції
INT 16h
Функція 00h - означає чекати до того часу, поки користувач не натисне клавішу. В результаті, у регістрі AL, отримаємо код ASCII символа, а якщо в AL нуль, то в AH - розширений код ASCII.
Функція 01h - перевіряє готовність символа на ввід та виводить його, якщо він готовий. Контроль організований по значенню прапорця нуля, якщо клавішу натиснули, то ZF=0. В іншому випадку -ZF=1, тобто клавішу не натискали і черга порожня (ця функція не забирає символ з черги, а тільки перевіряє його наявність )
Функція 02h - читає статус Shift-клавіш. У результаті, в регістрі Al міститься статус клавіатури.
Коли користувач натискає на клавішу, то автоматично викликається апаратне переривання BIOS. Далі клавіша розпізнається і її код записується в так звану чергу (буфер клавіатури). Буфер клавіатури - спеціальна ділянка пам’яті відведена під збереження кодів натиснених клавіш. Саме з буфера клавіатури (по черзі) зчитуються ASCII-коди клавіш, коли ми викликаємо функцію BIOS INT 16h (АН=00h). Прочитаний символ з буфера стирається.
якщо буфер клавіатури на момент виклику INT 16h (АН=00h) порожній, то ця функція зупиняє роботу програми і чекає до того часу, поки натиснуть на будь-яку іншу клавішу. (На відміну від INT 16h АН=01h, остання функція тільки вкаже, що клавіші готової нема. ZF=1). Наведемо приклад фрагмента програми, яка чекає на ввід клавіші `А`:
...
tsukl
mov ah,00h ; ввести символ
int 16h ; з клавіатури
cmp al,`A` ; це велика буква`А`?
jnz tsukl ; якщо ні, то повторити цикл,
... ; тобто перейти на мітку tsukl
Приклад фрагмента програми, яка чекає на натиснення будь-якої коавіші:
...
tsukl
mov ah,01h ; перевірити чи готова
int 16h ; будь-яка клавіша...
jz tsukl ; якщо ні-повторити,
mov ah,0 ; якщо так-зчитати її ASCII-код
int 16h ; в регістр AL
...
Окрім 16Н-го переривання BIOS користувач для роботи з клавіатурою може використати 21Н-е переривання операційної системи MS-DOS.
...
mov ah, номер функції
int 21h
...
Функції:
01h - ввести символ із стандартного вводу в регістр AL; 18h - аналогічна функція до 01Н, але введений символ буде відображений на дисплеї;
07h - аналогічна функція до 01Н, але не перевіряється Ctrl-Break, Backspace і т.д. (так званий нефільтруючий ввід);
0Bh - отримати статус стандартного вводу і AL=0, якщо символа нема, та AL=0ffh, якщо є;
0Ch - очистити буфер клавіатури і викликати функцію вводу, вказану в регістрі AL при вході. (це може бути 041h, 07h, 08h або 0Bh);
0Ah - буферний ввід.
Для цієї функції адреса буфера вводу міститься в регістрах DS:DX. Дана функція повертає у вказаному буфері введену користувачем стрічку (максимальна довжина стрічки має не перевищувати 254 символи).
При вході буфер, в який буде введено стрічку, має мати такий вигляд:
+---------------------
| max| ? | ? ? ? ? ?
+---------------------
де max- байт, який вказує на максимальну довжину стрічку, яку може ввести користувач. max має значення від 1 до 254. Знаки питання символізують собою місце в пам`яті, яке зарезервоване для введеної користувачем стрічки. Під час виклику функції 0Ah їхні значення ніякої ролі не грають. При виході - буфер буде заповнений так:
+--------------------
|max| len| H I 0dH
+--------------------
де len - довжина введеної користувачем стрічки (не враховуючи коду клавіші Enter - 0dh). H,I- коди ASCII відповідно `H`, `I`, тобто це та стрічка, яку ввів користувач. Символи вводяться з пристрою стандартного вводу до того часу, поки користувач не натисне Enter. Більше символів, ніж було описано при виклику в байті max функція ввести не дозволить. Під час вводу можна користуватися клавішою Backspace. Наведемо приклад виклику Dos-функції:
Функція 01h
...
mov ah,1 ; записати в AL
int 21h ; символ, введений з клавіатури
...
цей символ буде відображено на екрані при вводі з клавіатури, тобто, щоб користувач побачив символ на екрані програмісту не треба буде використовувати спеціальних функцій для друку, на відміну від функції BIOS, де необхідно організувати користувачу вивід символа на екран.
Функція 08h
...
mov ah,8 ; те ж, що і функції 01h
Int 21h ; але символ на екрані не відобразиться
...