- •Міністерство освіти і науки україни
- •2. Архітектура мікро-еом
- •Лабораторна робота №2
- •Теоретична частина двійкові числа
- •Шістнадцяткові числа
- •Лабораторна робота №3
- •Теоретична частина вісімкові числа
- •Лабораторна робота №4
- •Теоретична частина двйково-десяткові числа
- •Двійкова арифметика
- •Додатковий код
- •Лабораторна робота №5
- •Теоретична частина
- •Лабораторна робота №6
- •Теоретична частина угрупування біт
- •Буквено-цифровий код
- •Лабораторна робота №7
- •Теоретична частина
- •Лабораторна робота №8
- •Лабораторна робота №9
- •Теоретична частина
- •Лабораторна робота №10 Тема: шифратори, дешифратори й семисегментні індикатори.
- •Теоретична частина
- •Лабораторна робота №11
- •Теоретична частина
- •Лабораторна робота №12
- •Теоретична частина
- •Напівпровідникова пам'ять
- •Лабораторна робота №13
- •Теоретична частина
- •Лабораторна робота №14
- •Теоретична частина основи математичного забезпечення
- •Чого не "розуміє" мікро-еом
- •Мікро-еом як логічний пристрій
- •Мови програмування
- •Приклади програмування
- •Непряма адресація
- •Хід роботи завдання 1. Виконай вправи.
- •Завдання №2. Вивчити.
- •Завдання №3. Складіть програми мовою асемблера й машинною мовою мп кр580 і перевірте в мікролабораторії. Програми розміщайте у адреси 8000н.
- •Питання для самопідготовки
- •Лабораторна робота №15
- •Хід роботи.
- •Іі. Розробити програму.
- •Лабораторна робота №16
- •Теоретична частина
- •Хід роботи
- •Література
- •Питання для самоперевірки
- •Лабораторна робота №17.
- •Теоретична частина основи математичного забезпечення
- •Чого не "розуміє" мікро-еом
- •Мікро-еом як логічний пристрій
- •Процес розробки програмного забезпечення
- •Програма затримки
- •Іншим фактором, що повинен бути розглянутий при читанні із клавіатури, є виключення "дзвону".
- •Індикація
- •Хід роботи
- •Питання для самопідготовки:
- •Лабораторна робота №18
- •Теоретична частина програма монітора "мікролаб"
- •Програма рахунку
- •Організація програм
- •Переривання
- •Підпрограми й стек
- •Програма затримки
- •Хід роботи.
- •2. Розробити:
Процес розробки програмного забезпечення
При розробці складних програм необхідно дотримуватися наступної послідовності:
визначити завдання;
прийняти рішення - розділити на функціональні блоки;
скласти алгоритм програми;
написати програму;
випробувати й налагодити кожну команду;
випробувати й налагодити повну програму.
Перший крок очевидний. До того, як прийняти рішення, необхідно зрозуміти завдання. Потрібно скласти набір характеристик програми: визначити, що є вхідними параметрами, як їх потрібно обробити, що є виходом.
Після визначення цих характеристик можна приступитися до розробки програми. Спочатку треба продумати її, загальну конструкцію. Краще розділити програму на невеликі модулі, кожний з яких повинен мати чітко певні вхід і вихід. Пошук дефектів у програмі, розділеної на функціональні блоки, значно полегшується. Такий же метод застосовується при конструюванні апаратної частини.
Одним з методів визначення структури розроблювальної програми є структурне програмування, загальний принцип якого приводиться в даному розділі.
Після визначення завдання, вибору методу й поділу програми на модулі можна приступитися до складання алгоритмів. Звичайно складається загальний алгоритм, у якому кожний модуль програми зображується у вигляді квадрата. Складаються алгоритми й для кожного модуля.
Після цього можна писати програму. Старанність виконання попередніх кроків полегшує написання програми.
Після складання програми її необхідно перевірити. Модульність програми полегшує перевірку. Кожний модуль може бути перевірений окремо. Коли всі модулі перевірені, можна з'єднати їх разом і перевіряти всю програму.
Приклад розробки програмного забезпечення
Розглянемо опис програми контролера " вогні, що біжать,".
Індикатори вихідного порту /світлодіоди/ використовуються як імітатори " вогнів, що біжать,". Контролер повинен регулювати наступну послідовність чергування горіння світлодіодів:
1. Горять світлодіоди 1, 4, 7; інші погашені.
2. Час горіння встановлених світлодіодів.
3. Горять світлодіоди 2, 5, 8; інші погашені.
4. Час горіння встановлених світлодіодів.
5. Горять світлодіоди 3, 6; інші погашені.
6. Час горіння встановлених світлодіодів.
7. Повторення процесу /перехід до кроку 1/.
На мал.1, наведений алгоритм роботи контролера.
Вихідні індикатори / світлодіоди YDI...YD8/ підключаються до шини даних за допомогою програмувального інтерфейсу.
У табл.1 показані використовувані комбінації сигналів імітування " вогнів, що біжать," на світлодіодах. Одиниця у двійковому коді сигналу означає включений індикатор.
VD1 VD2 VD3 VD4 VD5 VD6 VD7 VD8 |
КОД |
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 |
92 16 49 16 24 16 |
Рис.1. Алгоритм програми послідовності горіння світлодіодів
Програма затримки
Для роботи основної програми необхідно розробити підпрограму, що викликає затримку. Найпростіший спосіб генерування затримки показаний на мал.2. Однак, максимальний час затримки, отримане таким способом, не перевищує 1785 мкс. Принцип одержання більше тривалої затримки буде описаний нижче.
ПРОГРАМА КОНТРОЛЕРА " ВОГНІ, ЩОБІЖАТЬ,"
Після складання алгоритмів і визначення характеристик -, можна писати програми. Основна програма послідовності досить проста /табл.2/ .
Таблиця 2
Мітки |
Команди |
Коментарі |
SEQ |
MOV А, 92 |
Установка горіння світлодіодів 1,4,7 Час горіння встановлених сигналів |
|
MVI D, I |
|
|
CALL DELAY |
|
|
MOV A, 49 |
Установка горіння світлодіодів 2,5,8 Час горіння встановлених сигналів |
|
MVI D, I |
|
|
CALL DELAY |
|
|
MOV A, 24 |
Установка горіння світлодіодів 3,6 Час горіння встановлених сигналів |
|
MVI D, I |
|
|
CALL DELAY |
|
Програма послідовності встановлює в регістр А число 92 - код вихідних індикаторів, при якому світлодіоди 1, 4, 7 - горять, а світлодіоди 2, 3, 5, 6, 8 - погашені.
Потім викликає підпрограму затримки. Для чого програма послідовності задає величину затримки в регістр D, після чого викликається сама підпрограма затримки. Далі ця послідовність повторюється для інших кодів вихідних сигналів світлодіодів .
Рис.2. Алгоритм програми затримки
РОЗРОБКА ПРОГРАМИ ЗАТРИМКИ
У табл.3 наведена програма затримки, алгоритм якої показаний на мал.2.
Таблиця 3 Проста програма затримки
Мітки |
Команди |
Коментарі |
Примітка |
DELAY |
DCR A |
рахунок, що зменшує |
4 такти |
|
JNZ DELAY |
Продовження рахунку, якщо вміст акумулятора 0 |
7/10 тактів |
|
RET |
Повернення |
10 тактів |
Щоб використовувати цю програму, в акумуляторі встановлюється потрібне значення затримки й викликається програма затримки. Уміст акумулятора зменшується доти, поки не досягає нуля, після чого керування вертається на програму виклику.
затримки. У цій програмі дві петлі: зовнішня й внутрішня. Внутрішня петля генерує затримку 0,786 з, зовнішня - безліч таких затримок. Така організація програми називається вкладенням.
Повна програма контролера " вогні, що біжать," наведена в табл.4.
Таблиця 4
Адреси |
Коди |
Мітки |
Команди |
Коментарі | |
8000 |
ЗЕ |
MOV A ,81 |
MOV A ,81 |
Програмування інтерфейсу | |
8001 |
81 |
|
|
| |
8002 |
D3 |
|
|
| |
8003 |
FB |
|
OUT FB |
| |
8004 |
ЗЕ |
SEQ |
MOV A, 92 |
Установка коду горіння 1,4,7 світлодіодів, | |
8005 |
92 |
|
|
| |
8006 |
D3 |
|
OUT F9 |
| |
8007 |
F9 |
|
|
| |
8008 |
16 |
|
MVI D, I |
Горіння даної послідовності | |
8009 |
01 |
|
|
| |
800А |
CD |
|
CALL DELAY | ||
800У |
22 |
|
|
| |
800С |
80 |
|
|
| |
800D |
ЗЕ |
|
MOV A , 4 9 |
Установка коду горіння 2,5,8 світлодіодів | |
800Е |
49 |
|
|
| |
800F |
D3 |
|
OUT F9 |
| |
8010 |
F9 |
|
|
| |
8011 |
16 |
|
MVI D, I |
Горіння даної послідовності- | |
8012 |
01 |
|
|
| |
8013 |
CD |
|
CALL DELAY | ||
8014 |
22 |
|
|
| |
8015 |
80 |
|
|
| |
8016 |
ЗЕ |
|
MOV A, 24 |
Установка коду горіння 3,6 світлодіодів | |
8017 |
24 |
|
|
| |
8018 |
D3 |
|
OUT F9 |
| |
8019 |
F9 |
|
|
| |
801А |
16 |
|
MVI D,I |
Горіння даної послідовності | |
801У |
01 |
|
|
| |
801С |
CD |
|
CALL DELAY |
| |
8010 |
22 |
|
|
| |
801Е |
80 |
|
|
| |
801F |
СЗ |
|
JMP SEQ |
Повернення в основну програму" вогні, що біжать," | |
8020 |
04 |
|
|
| |
8021 |
80 |
|
|
| |
8022 |
01 |
DELAY |
LXI B,0025 |
Початок внутрішньої петлі затримки | |
8023 |
00 |
|
|
| |
8024 |
25 |
|
|
| |
8025 |
0У |
LOOP |
OCX В |
Внутрішня петля, що генерує затримку 0,786 с | |
8026 |
78 |
|
MOV А, В |
| |
8027 |
В1 |
|
ORA С |
| |
8028 |
З2 |
|
JNZ LOOP |
| |
8029 |
25 |
|
|
| |
802А |
80 |
|
|
| |
802У |
15 |
|
OCR D |
Основна петля затримки | |
802С |
З2 |
|
JNZ DELAY |
| |
802D |
22 |
|
|
| |
802Е |
80 |
|
|
| |
802F |
З9 |
|
RET |
Повернення |
Продовження табл.1
Перевірка програми
1. Уведіть програму з табл.4 в ОЗУ акумулятора.
2. Упевніться, що вона правильно записана на згадку.
3. Виконуйте основну програму, що починається за адресою 8000.
4. Значення тимчасових затримок можна замінити на інші значення, для зменшення швидкості " вогнів, щобіжать," по адресах 8009, 8012,801А, 8023, 8024.
КЛАВІАТУРА Й ІНДИКАЦІЯ КЛАВІАТУРА
Клавіатура являє собою набір ключів /кнопок/, організованих у вигляді матриці 8x3. Кожний ряд з 8 кнопок допитується окремо/апаратне забезпечення описане в уроці 9/. Зчитувальні дані перетворяться в код, що відповідає натиснутій кнопці, за допомогою програми монітора KEYIN /адреса 0216Н/. Ця програма викликається за допомогою команди CALL KEYIN. Після повернення із програми KEYIN в акумуляторі буде втримуватися код натиснутої кнопки /табл.1/. Ця моніторна програма може використовуватися для читання клавіатури.
Таблиця 1 Коди кнопок мікролабораторії
Кнопка |
Код /Н/ |
Кнопка |
Код /Н/ |
0 |
00 |
D |
OD |
1 |
01 |
Е |
ОЕ |
2 |
02 |
F |
OF |
3 |
03 |
ПУСК |
10 |
4 |
04 |
ВОЗВР . |
11 |
5 |
05 |
УСТ . АД . |
12 |
6 |
06 |
АД.- |
13 |
7 |
07 |
АД.+ |
14 |
8 |
08 |
ЗП |
15 |
9 |
09 |
ВИВІД |
16 |
А |
ОА |
УВЕДЕННЯ |
17 |
В |
ОВ |
|
|
С |
ОС |
|
|
У табл.2 показаний лістинг програми, що викликає звуковий сигнал, якщо натиснуто кнопку 7. Клавіатура читається за допомогою вищеописаної програми KEYIN, що заносить код натиснутої клавіші в акумулятор.
Команда CPI 07 установлює нульовий прапор процесора, якщо вміст акумулятора дорівнює 07. Команда JNZ READ викликає повернення програми на початок, якщо нульовий прапор не встановлений. Якщо нульовий прапор установлений, то буде визиватися підпрограма BEEP. Потім процес повторюється. Таким чином, звуковий сигнал буде генеруватися при натисканні кнопки 7.
Уведіть лістинг програми в мікролабораторію й перевірте правильність уведення. Запустите програму.
Таблиця 2 Програма виклику звукового сигналу
Адреса |
Уміст |
Мітка |
Команда |
Коментарі | |
8000 |
CD |
READ |
CALL KEYIN |
Виклик програми, читання клавіатури |
|
8001 |
16 |
|
|
|
|
8002 |
02 |
|
|
|
|
8003 |
FE |
|
CPI 07 |
Порівняння коду ключа з 07 |
|
8004 |
07 |
|
|
|
|
8005 |
З2 |
|
JNZ READ |
Повернення, якщо кнопка 7 не натиснута |
|
8006 |
00 |
|
|
|
|
8007 |
80 |
|
|
|
|
8008 |
CD |
|
CALL BEEP |
Звуковий сигнал, якщо до |
|
8009 |
50 |
|
|
7 натиснута |
|
800А |
03 |
|
|
|
|
800У |
СЗ |
|
JMP READ |
Повторення програми |
|
800С |
00 |
|
|
|
|
800D |
80 |
|
|
|
|
Натисніть кнопку 7 - динамік гуде. Натисніть будь-яку іншу кнопку - звуковий сигнал відсутній. Складіть програму, що генерує звуковий сигнал, якщо натиснуті в певній послідовності три певні кнопки, наприклад 7, 3, 9 . Цю програму можна взяти за основу при створенні електронного замка. Складання програми почніть зі структурної схеми. Уведіть програму в мікролабораторію й перевірте її виконання.
СКАНУВАННЯ КЛАВІАТУРИ
На мал.1 наведена спрощена схема клавіатури. За один цикл зчитуються дані з одного ряду з восьми кнопок. Для простоти розглянемо тільки один ряд, тобто кнопки 0,1,2,7
Читання ряду ключів являє собою двушагову операцію: запис даних у скануючий порт для вибору кнопок, читання байта даних читаючим портом.
Щоб вибрати певний ряд кнопок, що відповідає біт скануючого порту /РС4, РС5 або РС6/ установлюється в лог.1, інші біти залишаються рівними лог.О. Таким чином, щоб вибрати ряд кнопок 0...7, потрібно послати в порт FA код 1010 1111 /9 F-H/, щоб вибрати 8...F - код 1010 1111 /AFH/ і щоб вибрати кнопки ПУСК. .. УВЕДЕННЯ, - код (1100 1111) /CFH/. Біти РС0...РС3, РС7 не використовуються при скануванні клавіатури й установлюються рівними лог.1
Рис.1. Спрощена схема клавіатури
Отже, щоб Зчитати дані з ряду 0...7, у порт FA виводиться байт 9F. Потім виробляється читання вхідним портом для збору інформації про стан колонок. При натисканні певної кнопки відповідний біт читаючого порту буде встановлюватися в 0 /табл.3/. /Звернути увагу, що коди кнопок, наведені в табл. 1 і 3, не збігаються/. Кнопка з інших рядів при читанні обраного ряду не впливає на результати читання. Табл.4 показує програму, що реалізує тільки що описаний процес читання,
Таблиця 3 Коди, що читаються із клавіатури
Кнопка |
Код, що читається /двійковий/ |
Код, що читається, / шістнядцятковий/ | |
Немає натиснутих кнопок |
1111 |
1111 |
FF |
0 |
1111 |
1110 |
FE |
1 |
1111 |
1101 |
FD |
2 |
1111 |
1011 |
FB |
3 |
1111 |
0111 |
F7 |
4 |
1110 |
1111 |
EF |
5 |
1101 |
1111 |
DF |
6 |
1011 |
1111 |
BF |
7 |
0111 |
1111 |
7F |
Таблиця 4 Програма визначення стану кнопок
Команда |
Коментарі |
MVI A, 9F |
Вибір ряду кнопок 0. . .7 |
OUT FA |
|
IN F8 |
Читання стану кнопок |
Програма KEYIN, описана вище, не тільки сканує клавіатуру, але й перетворить коди, що читаються з колонок /залежно від обраного ряду/, у коди, наведені в табл 1 .
У табл.5 наведена програма для перевірки стану кнопки 2, що використовує вищеописаний спосіб читання клавіатури. Якщо кнопка 2 натиснута, генерується звуковий сигнал.
Таблиця 5 Програма перевірки стану кнопки 2
Адреса |
Зміст |
Мітка |
Команда |
Коментарі |
8000 |
ЗЕ |
|
MVI А,9F |
Вибір ряду кнопок 0...7 |
8001 |
9F |
|
|
|
8002 |
D3 |
|
OUT FA |
|
8003 |
FA |
|
|
|
8004 |
DB |
READ |
IN F8 |
Читання стану колонок |
8005 |
F8 |
|
|
|
8006 |
FE |
|
CPI FB |
Порівняння акумулятора з |
|
|
|
|
с кодом /кнопка 2/ |
8007 |
FB |
|
JNZ READ |
Читати знову, якщо кнопка |
8008 |
З2 |
|
|
2 не натиснута |
8009 |
04 |
|
|
|
800А |
80 |
|
|
|
800У |
CD |
|
CALL BEEP |
Якщо натиснуто кнопку 2, |
800С |
50 |
|
|
з'являється звуковий сигнал |
800D |
03 |
|
|
|
800Е |
СЗ |
|
JMP READ |
Повторення програми |
800F |
04 |
|
|
|
8010 |
80 |
|
|
|
Наберіть програму на "Микролаб" і перевірте її роботу УСУНЕННЯ ДЗВОНУ