МК
.pdfРис. 17. Зовнішній вигляд (а) та схема семисегментної світлодіодної |
|
|||||||||||
|
|
|
|
|
матриці (б). |
|
|
|
|
|||
|
5 |
|
4 |
3 |
|
2 |
|
1 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 18. Нумерація комірок дисплея. |
|
|
||||||||
Програма 21 дозволяє за рахунок зміни коду на вхідному пристрої (адреса |
||||||||||||
2016) вмикати різні сегменти п'ятого індикатора дисплея. |
|
|
||||||||||
Організація |
мультиплексного |
режиму |
роботи |
дисплея. |
За |
мультиплексного режиму роботи інформація на кожен індикатор дисплея виводиться мікро-ЕОМ послідовно. Цифра чи символ на індикаторі висвітлюється деякий проміжок часу, що задається підпрограмою затримки. За великої частоти сканування індикаторів на цифровому дисплеї з’являється стійке зображення.
Схема алгоритму програми, що забезпечує мультиплексний режим роботи дисплея, показана на рис. 20 (програма 22, табл. 29). Код цифр для виводу на кожне вічко дисплея зберігається в послідовних комірках пам'яті з адресами 0900-0905. При цьому мається на увазі, що код цифри для виводу на 0
індикатора дисплея записаний за адресою 0900. Початкова адреса підпрограми тимчасової затримки 0430.
111
Рис. 19. Схема під’єднання дисплея до мікро-ЕОМ.
112
DSO
Встановити тривалість тимчасової затримки
Вказати на адресу вічка з кодом для п’ятої цифри. Завантажити в покажчик цифри число
00100000
Зчитати код чергової цифри із ОЗП
Записати код чергової цифри в регістр
Увімкнути цифру
Викликати підпрограму тимчасової затримки
Вимкнути цифру
Вказати на наступну цифру
Ні |
Так |
|
Усе повідомлення виведено ?
Рис. 20. Схема алгоритму програми мультиплексного режиму індикації в мікро-ЕОМ
Під’єднання клавіатури до мікро-ЕОМ. Клавіатура є одним із широко розповсюджених пристроїв введення даних і керуючих впливів у мікро-ЕОМ.
За допомогою клавіатури можна вводити програму в ОЗП, ініціювати різні режими роботи мікро-ЕОМ (пуск програми із заданої адреси, зупинка програми, виконання програми за машинними циклами, виведення змісту регістрів МП на дисплей тощо).
113
Таблиця 29
Програма 22
Адреса |
Машиний код |
Мітка |
Мнемокод |
|
Коментар |
|
|
|||||
0800 |
010004 |
DSO |
LXI В 0400 |
завантажити в регістри В, |
||||||||
С тривалість затримки |
||||||||||||
|
|
|
|
|
||||||||
0803 |
|
AF |
|
XRА А |
очистити акумулятор |
|
||||||
0804 |
210500 |
CNTI |
LXI Н 0905 |
вказати |
на |
адресу |
коду |
|||||
цифри 5 |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|||
0807 |
16 20 |
|
MVI D 20 |
завантажити |
|
покажчик |
||||||
|
цифри в регістр D |
|
|
|||||||||
|
|
|
|
|
|
|
||||||
0809 |
|
7Е |
CNT2 |
MOV А М |
одержати |
з |
ОЗП |
код |
||||
|
чергової цифри |
|
|
|
||||||||
|
|
|
|
|
|
|
|
|||||
080A |
D3 38 |
|
OUT DSP |
записати |
його |
в |
регістр |
|||||
|
сегментів дисплея |
|
|
|||||||||
|
|
|
|
|
|
|
||||||
080С |
|
7А |
|
MOV A D |
завантажити в акумулятор |
|||||||
|
|
покажчик цифри |
|
|
||||||||
|
|
|
|
|
|
|
||||||
080D |
D3 28 |
|
OUT SCAN |
увімкнути потрібну цифру |
||||||||
080F |
|
1 F |
|
RAR |
вказати |
|
на |
наступну |
||||
|
|
цифру |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||
0810 |
|
51 |
|
MOV D A |
зберегти покажчик цифри |
|||||||
|
|
в регістрі D |
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||||
0811 |
CD |
3004 |
|
CALL DELB |
викликати |
|
підпрограму |
|||||
|
тимчасової затримки |
|
||||||||||
0814 |
|
AF |
|
XRA А |
очистити акумулятор |
|
||||||
0815 |
D3 28 |
|
OUT SCAN |
вимкнути цифру |
|
|
||||||
0817 |
|
2D |
|
DCR L |
зменшити |
|
на |
1 |
|
вміст |
||
|
|
регістра L |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|||
0818 |
|
В2 |
|
ORA D |
чи все |
|
повідомлення |
|||||
|
|
виведене ? |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|||
0819 |
С2 |
0908 |
|
JNZ CNT2 |
якщо ні, продовжувати |
|||||||
08ІС |
СЗ |
0408 |
|
JMP CNTI |
якщо |
так, |
то |
почати |
||||
|
спочатку |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
У всіх випадках в організації введення інформації з клавіатури в мікро-
ЕОМ перед розроблювачем ставиться низка задач, до основних з належать:
1)визначення факту натискання клавіші на клавіатурі;
2)знаходження номера натиснутої клавіші;
3)здійснення передачі керування на відповідну підпрограму.
114
Перші дві задачі є специфічними в організації введення інформації з клавіатури і саме на них звернемо увагу в даному розділі. Остання, як правило,
розв’язується програмними методами.
Найзручніше організовувати клавіатуру у вигляді матриці розміром n x m,
де n і m – відповідно кількість рядків і стовпців. За такого способу організації до мікро-ЕОМ можна під’єднати m x n клавіш. Сполучення клавіатури з мікро-
ЕОМ роблять за допомогою пристроїв уведення-виведення даних. Для ілюстрації методу сполучення клавіатури з мікро-ЕОМ розглянемо клавіатуру
3x3, показану на рис. 21, де Сх ДША – схема дешифрації адреси; Увв – пристрій введення; Увив – пристрій виведення, ряди якого під’єднані до трьох молодших розрядів пристрою виведення Увив (символьне позначення адреси KB DOT), а
стовпці – до трьох молодших розрядів пристрою введення Увв (символьне позначення адреси KB DIN).
Рис. 21. Схема підключення клавіатури до мікро ЕОМ
115
У разі програмного способу дешифрації натиснутої клавіші визначення факту натискання на клавішу може здійснюватись за допомогою такої послідовності операцій: 1. Записати нулі в розряди вихідного пристрою;
2.Зчитати зміст розрядів вхідного пристрою.
3.Повторити знову, якщо у всіх розрядах вхідного пристрою записані
одиниці.
Програма 23 (табл. 30), написана відповідно до наведеного алгоритму,
дозволяє визначити факт натискання на одну з клавіш, але не вказує номер натиснутої клавіші.
|
|
|
|
|
|
|
Таблиця 30 |
||
|
|
|
Програма 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Адреса |
Машинний код |
Мітка |
|
Мнемокод |
Коментар |
|
|
||
0800 |
ЗЕ F8 |
WAITK |
|
MVI А |
записати 0 у молодші три |
|
|||
|
11111ООО |
розряди акумулятора |
|
|
|||||
|
|
|
|
|
|
||||
|
|
|
|
|
записати |
0 у |
вихідний |
|
|
0802 |
D3 KB DOT |
|
|
OUT KB DОТ |
пристрій |
(адреса |
KB |
|
|
|
|
|
|
|
DOT) |
|
|
|
|
|
|
|
|
|
одержати |
число |
з |
|
|
0804 |
DB KB DIN |
|
|
IN KBD IN |
вхідного |
|
пристрою |
|
|
|
|
|
|
|
(адреса KBD IN) |
|
|
||
0806 |
Е6 07 |
|
|
ANI 00000111 |
очистити |
старші п'ять |
|
||
|
|
розрядів акумулятора |
|
|
|||||
|
|
|
|
|
|
|
|||
0808 |
FE07 |
|
|
СРІ |
є чи в молодших трьох |
|
|||
|
|
ООООО111 |
розрядах акумулятора 0 |
|
|||||
|
|
|
|
|
|||||
080А |
СА0008 |
|
|
JZ WAITK |
якщо ні, |
то |
йти |
на |
|
|
|
WAITK |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
080D |
C3OD08 |
DONE |
|
JMP DONE |
кінець |
|
|
|
|
Визначити номер натиснутої клавіші можна за допомогою алгоритму,
показаного на рис. 22. Алгоритм ґрунтується на послідовному записі нуля в кожний з рядів матриці клавіатури. За наявності нуля в кожному ряді мікро-
ЕОМ визначає факт натискання на клавіші, що знаходяться в стовпцях клавіатури, що належать аналізованому ряду. Якщо яка-небудь клавіша натиснута, то визначається її номер за номером розряду, в якому записаний нуль.
116
|
ПОЧАТОК |
|
||
|
Встановити лічильник клавіш |
|
||
|
Встановити лічильник рядів. Записати |
|
||
|
маску сканування в акумулятор |
|
||
|
Записати маску сканування в регістр |
|
||
|
сканування клавіатури |
|
||
|
Чи замкнута будь- |
Ні |
||
|
яка клавіша із ряду? |
|
||
|
Так |
|
|
|
|
Змінити маску сканування |
Зсунути вміст розрядів вхідних |
||
|
циклічним зсувом вмісту |
даних із клавіатури вправо |
||
|
розрядів вліво |
на один розряд |
||
|
Номер клавіші = номер |
|
|
|
|
клавіші +стовпця |
Ні |
|
|
|
Лічильник = лічильник - 1 |
С=0 ? |
|
|
Ні |
|
Так |
|
|
Лічильник =0 ? |
Номер клавіші = |
|||
|
||||
|
|
номер клавіші + 1 |
||
|
Так |
|
|
|
|
Кінець |
|
|
|
Рис. 22. Схема алгоритму визначення натиснутої клавіші за сканування |
||||
|
клавіатури мікро-ЕОМ |
|
Програма 24 (табл. 31) реалізує описаний алгоритм. Номер натиснутої клавіші визначається за номером ряду клавіатури, в якому виявлена натиснута клавіша, і номером розряду вхідного пристрою, в якому записаний нуль.
Часто операційна система мікро-ЕОМ будується таким чином, що інформація, яка вводиться з клавіатури, відображається на дисплеї. З
докладнішими прикладами побудови таких програм можна ознайомитися за літературою, наведеною в бібліографічному списку.
Робота на навчальній мікро-ЕОМ
117
У навчальній мікро-ЕОМ дисплей і клавіатура під’єднані до магістралей так, як показано на рис. 19 Регістр сканування РгСк (адреса 28)
використовується як для сканування дисплея, так і для сканування клавіатури.
Таблиця 31
Програма 24
Адреса |
Машинний код |
Мітка |
Мнемокод |
Коментар |
||
0800 |
0600 |
|
МVI В 00 |
обнулити лічильник клавіш |
||
0802 |
0Е FE |
|
МVІ 3 |
початкова |
установка маски |
|
|
1111111О |
сканування рядів |
|
|||
|
|
|
|
|||
0804 |
16 03 |
|
MVI 03 |
встановити лічильник |
||
|
рядів |
|
|
|||
|
|
|
|
|
|
|
0806 |
79 |
FROW |
MOV A C |
записати маску |
сканування |
|
в акумулятор |
|
|||||
|
|
|
|
|
||
|
|
|
OUT KB |
записати маску |
сканування |
|
0807 |
D3 KB DОТ |
|
у вихідний пристрій (адреса |
|||
|
DOT |
|||||
|
|
|
KB DОТ) |
|
|
|
|
|
|
|
|
|
|
0809 |
07 |
|
RLC |
змінити маску сканування |
||
080А |
4F |
|
MOV С А |
зберегти маску в регістрі С |
||
080В |
DBKBDIN |
|
IN KB D IN |
одержати число з вхідного |
||
|
пристрою (адреса KB D IN) |
|||||
080D |
Е6 07 |
|
AN I |
маскувати |
п'ять старших |
|
|
ООООО111 |
його розрядів |
|
|||
|
|
|
|
|||
080 F |
FE07 |
|
СРІ |
чи є в |
трьох |
молодших |
|
ООООО111 |
розрядах 0 |
|
|||
|
|
|
|
|||
0811 |
C2 IF O8 |
|
JNZ FCDL |
якщо так, то йти на FCOL |
||
0814 |
78 |
|
MOV А В |
змінити зміст |
|
|
0815 |
С6 03 |
|
ADI 03 |
лічильники номера клавіш |
||
0817 |
47 |
|
MOV В А |
|
|
|
0818 |
15 |
|
DCR D |
зменшити вміст лічильника |
||
|
рядків |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
якщо не останній ряд, то |
||
0819 |
С2 0608 |
|
JNZ FROW |
повторити |
для |
наступного |
|
|
|
|
ряду |
|
|
081С |
С3 2708 |
|
JMP DONE |
йти на закінчення |
||
08IF |
IF |
|
RAR |
визначення номера |
||
0820 |
D2 2708 |
|
JNC DON E |
розряду, в якому |
|
|
0823 |
04 |
|
INR B |
записаний 0 і визначення |
||
0824 |
СЗ IF 08 |
|
JMP FCOL |
номера натиснутої клавіші |
||
0827 |
СЗ 2708 |
DONE |
JMP DONE |
кінець |
|
|
118
Адреса вхідного пристрою читання клавіатури РгЧК -18 (KB D IN).
Програми 21, 22 можуть бути виконані без будь-яких змін на навчальній мікро-
ЕОМ без під’єднання додаткового дисплея.
У ПЗП мікро-ЕОМ записані програми, що дозволяють визначити код натиснутої клавіші і виводити на дисплей повідомлення. Так, підпрограма KPU (адреса 0185) визначає, чи натиснута клавіша на клавіатурі, і за будь-якої натиснутої клавіші встановлює розряд ознак МП Z у 0, а якщо ні, то Z = 1.
Вхідних параметрів підпрограма не має. Підпрограма КІ N D (адреса ОІ4В)
виконує сканування клавіатури, визначає факт натискання клавіші, її код за таблицею і повертає його. Одночасно підпрограма KIND дешифрує повідомлення, що видається, в семисегментний код за таблицею і виводить його на дисплей. Вхідним параметром цієї підпрограми є повідомлення,
виведене на дисплей, розміщене в ОЗП за адресами OBFO-08FS, вихідним параметром – код натиснутої клавіші в акумуляторі. Для виведення повідомлення на дисплей підпрограма KIND використовує підпрограми SDS (адреса ОІС8) сканування дисплея і DCD (адреса ОІЕ9) декодування повідомлень для дисплея. Вхідний параметр SDS – семисегментні коди виведеного повідомлення, розміщені за адресами ОВЕ FA - OB FF. Вони ж є вихідним параметром підпрограми DCD, а вхідними її параметрами – коди виведеного повідомлення, розміщені за адресами OBFO-OBF5. Дешифрування в семисегментний код здійснюється за допомогою спеціальної табл. 32
додаванням відносної адреси символу до початкової адреси таблиці.
Табл. 32 побудована так, що для дешифрування шістнадцятирічних цифр жодних додаткових перетворень не потрібно, тому що значенням цифри є її відносна адреса. Для перезапису повідомлення в область OBF 0 - OBF 5
застосовується підпрограма, що викликається командою RST3. Вхідними параметрами її є адреса першого байта повідомлення, розміщена в парі регістрів D, Е, і повідомлення, записане з цієї адреси. Підпрограма BLM ДО
(адреса 0297) для очищення дисплея, вхідних і вихідних параметрів не має.
119
|
|
|
|
|
|
|
|
Таблиця 32 |
|
|
|
|
Дешифрувальна таблиця |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
Символ |
Код |
Відносна |
Символ |
Код |
Відносна |
Символ |
Код |
Відносна |
|
адреса |
адреса |
адреса |
|
||||||
|
|
|
|
|
|
|
|||
0,0 |
3F |
00 |
А |
77 |
0А |
Р |
73 |
14 |
|
1 |
06 |
01 |
В(мале) |
7С |
0В |
П,Л (мале) |
54 |
15 |
|
2 |
5В |
02 |
С |
39 |
ОС |
|
|
|
|
3,3 |
4F |
03 |
D(мале) |
5Е |
0D |
О (мале) |
5С |
16 |
|
4 |
66 |
04 |
Е |
79 |
0Е |
(нижня |
08 |
17 |
|
|
|
|
|
|
|
риска) |
|
|
|
5.S |
6D |
05 |
F |
71 |
0F |
|
|
|
|
6.Б |
7D |
06 |
ПРОБІЛ |
00 |
10 |
П,Л |
37 |
18 |
|
7 |
07 |
07 |
Н |
76 |
11 |
(середня |
40 |
19 |
|
8 |
7F |
08 |
L |
38 |
12 |
риска) |
|
|
|
9 |
6F |
09 |
Y |
6E |
13 |
Усі сегменти |
FF |
ІА |
|
|
|
|
|
|
|
R (мале) |
50 |
IB |
|
|
|
|
|
|
|
І (ліва) |
30 |
IС |
|
Програма 25 (таб. 33) виконує декодування і виведення на дисплей повідомлення користувача, записаного за адресою 0900-0905, з використанням підпрограм RS ТЗ, DCD, SDS. Підпрограма SDS виводить повідомлення на дисплей тільки один раз, тобто для одержання зображення її потрібно викликати багаторазово.
|
|
|
|
|
|
Таблиця 33 |
|
|
|
|
Програма 25 |
|
|
|
|
|
|
|
|
|
|
|
|
Адреса |
Машинний код |
Мітка |
|
Мнемокод |
Коментар |
|
|
0800 |
11 00 09 |
|
|
LXI D 0900 |
завантажити |
адресу |
|
|
|
початку повідомлення |
|
||||
|
|
|
|
|
|
||
0803 |
DF |
|
|
RST3 |
переписати |
повідомлення |
|
|
|
по адресах ОВ 0 -0BF5 |
|
||||
|
|
|
|
|
|
||
0804 |
CD E9 01 |
|
|
CALL DCD |
викликати |
підпрограму |
|
|
|
декодування |
|
|
|||
|
|
|
|
|
|
|
|
0807 |
CD C8 01 |
CNT: |
|
CALL SDS |
вивести повідомлення на |
|
|
|
дисплей |
|
|
||||
|
|
|
|
|
|
|
|
080А |
33 0708 |
|
|
JMP CNT |
повторювати виведення |
|
Програма 26 (табл. 34) показує приклад використання підпрограми KPU.
При натисканні на будь-яку клавішу у вихідний регістр записується число з вхідного пристрою.
120