- •Лабораторна робота № 1 Тема: структура учбової мікропроцесорної лабораторії, клавіатура керування, індикація
- •Коротка інформація
- •Порядок виконання лабораторної роботи
- •Лабораторна робота № 2 Тема: пам’ять учбової мікропроцесорної лабораторії, дослідження виконання програм в покроковому I автоматичному режимах
- •Коротка інформація
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 3 Тема: дослідження програмно-доступних регістрів мікропроцесора кр580ик80
- •Коротка інформація
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 4 Тема: вивчення команд пересилання даних.
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 5 Тема: вивчення арифметичних команд
- •Коротка інформація
- •Індивідуальні завдання
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 6 Тема: вивчення логічних команд
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 7 Тема: вивчення команд переходів
- •Коротка інформація
- •Індивідуальні завдання
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 8 Тема: вивчення команд введення / виведення, керування і рестарту
- •Коротка інформація
- •Індивідуальне завдання
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 9 Тема: вивчення зв’язків мікролабораторії із зовнішнім середовищем
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 10 Тема: керування клавіатурою і індикаторами мікро лабораторії
- •Коротка інформація
- •Індивідуальні завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 11 Тема: програмування тимчасових затримок
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 12 Тема: програмне керування пристроями введення / виведення
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 13 Тема: динамічне керування об’єктами введення / виведення
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 14 Тема: імітаційне моделювання передньої панелі вимірювального приладу з вбудованим мп
- •Коротка інформація
- •Індивідуальне завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 15 Тема: тестування пам’яті мікропроцесорної системи
- •Коротка інформація
- •Індивідуальні завдання на лабораторну роботу
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Лабораторна робота № 16 5 Тема: макет мікропроцесорної системи охоронної сигналізації на автомобілі
- •Коротка інформація Постановка задачі
- •Інженерна інтерпретація
- •Оцінка системи
- •Порядок виконання лабораторної роботи
- •Контрольні питання
- •Додаток. Система команд 8–розрядного однокристального мікропроцесора к580ик80а.
- •Література
Індивідуальні завдання на лабораторну роботу
Закодувати програми, які розглянуті в теоретичному розділі.
Скласти програму виведення стилізованого тексту на семисегментні індикатори.
Порядок виконання лабораторної роботи
Занести в пам’ять мікро лабораторії програму рис. 10.2, 10.5, 10.7—10.9 і виконати їх.
Занести в пам’ять індивідуальну програму, відлагодити і виконати її.
Зробити висновки з роботи.
Контрольні питання
Відмінність режиму захоплення від режиму переривання.
Чому, не дивлячись на зупинення програми, не згасає індикація?
Чим пояснити, що індикатори можуть світитись яскраво або тьмяно?
Чому не можна перепрограмувати кнопку «Сброс»?
Чому для індикаторів відводиться вісім вічок пам’яті, а для програми SEGGG для вихідних даних тільки чотири?
Як вивести символи на індикатори без підпрограми SEGGG?
Лабораторна робота № 11 Тема: програмування тимчасових затримок
Мета: вивчити принцип побудови алгоритмів тимчасових затримок і керування зовнішніми пристроями.
Коротка інформація
Робота з зовнішніми пристроями мікропроцесорних систем в багатьох випадках потребує формування спеціальних послідовностей імпульсних сигналів, зсунутих один відносно іншого на заданий часовий інтервал. Вміння формувати такі часові послідовності полегшує розробку апаратного забезпечення. Для побудови пристроїв, що формують тимчасову затримку, використовують ВІС таймера КР580ВИ53, але через те, що в складі мікролабораторії вона відсутня, розглянемо можливості реалізації вказаних вимог на існуючому обладнанні.
А
лгоритм
найпростішої програми затримки (без
видачі керуючих дій) показана на рис.
11.1.
Рис. 11.1. Алгоритм підпрограми затримки.
Для реалізації тимчасової затримки використовують один з внутрішніх регістрів МП, в який попередньо завантажується байт даного. Після кожного зменшення на одиницю вмісту цього регістру залишок перевіряється на рівність нулю і, якщо вміст регістру не дорівнює нулю, програма циклічно повторюється. Час виконання цих двох команд програми відомий, тому тривалість затримки буде визначатись кількістю циклічних повторень, тобто значенням даного, завантаженого в регістр. Змінюючи значення байту, що попередньо завантажується, можна змінювати тривалість часового інтервалу затримки. Підпрограма, що реалізує алгоритм затримки (див. рис. 11.1), має вид:
-
DELAY:
DCR
A
; зменшуючий рахунок
JNZ
DELAY
; продовжити, якщо не 0
RET
; повернення
В програмі використовується регістр акумулятора A, але можна використовувати будь-який регістр загального призначення МП. В цьому випадку байт попереднього встановлення лічильника повинен бути завантажений в цей регістр. Це можливо, оскільки виконання команд DCR r діє на тригер нуля Z, що входить в регістр прапорців.
Найдовша затримка спричиняється встановленням регістра в нуль. При першому проході по петлі циклу вміст регістру зменшується і стає рівним FF (255 в десятковому коді). Попереднє встановлення в нуль еквівалентне тому, що <r> = 256. Оцінимо час затримки. Для DCR r потрібно чотири такти, для JNZ – 17 у випадку виконання умови і 7 – у випадку її невиконання. Для RET потрібно 10 тактів. Отже, для кожного проходу по петлі потрібно 4 + 10 = 14 тактів, а для останнього 4 + 7 + 10 = 21 такт, оскільки JNZ не потребує переходу і додатково виконується команда RET. Отже, при тривалості такту Т = 0,5 мкс максимальна затримка ((256 - 1) 14 + 21) 0,5 = 1795 мкс.
Для отримання більш тривалої затримки доцільно використовувати команди, які діють на пари регістрів:
-
DELAY:
DCX
B
; зменшуючий рахунок
MOV
A, B
; пересилання вмісту B в A
ORA
C
; перевірка на «0»
JNZ
DELAY
; продовжити, якщо не «0»
RET
; повернення
Використання команд DCX rp дозволяє завдяки застосування пари регістрів B, C збільшити рахунок затримки до N = 2562 = 65536 = 216. Регістрові пари попередньо завантажуються вихідними даними. В підпрограмі перша команда зменшує вміст пари rp на одиницю (з врахуванням переносу між байтами). Оскільки команда не впливає на прапорці, для перевірки виконуються пересилання вмісту B в акумулятор і порівняння з другим регістром пари C за допомогою команди ORA C. Тригер Z буде зведений тільки в тому випадку, коли вміст B і C буде однаковий і дорівнюватиме нулю.
Час затримки t, отриманий при виконанні цієї програми, t = ((N -1) 24 + 31) 0,5 (мкс) і для максимального значення N час затримки tmax = ((65536 - 1) 24 + 31) 0,5 = 0,786 c. Таку затримку можна отримати, якщо попередньо занести «0» в регістри B і C.
Для отримання ще більшої затримки можна організувати додатковий лічильник, наприклад в регістрі D. Число, що записане в регістрі D, визначає, скільки разів виконується затримка 0,786 с. Максимальна затримка, отримана в такий спосіб, 256 0,786 = 201 с.
-
DELAY:
LXI
B, 0000
; початок зовнішньої петлі
LOOP:
DCX
B
; петля затримки 0,786 с
MOV
A, B
; пересилання В в А
ORA
C
; порівняння
JNZ
LOOP
; продовження внутрішньої петлі
DCR
D
; зовнішня петля затримки
JNZ
DELAY
; продовження зовнішньої петлі
RET
; повернення
Команда LXI B, 0000 заносить 0 в пару регістрів B і C. Потім виконується затримка 0,786 с. Регістр D використовується для рахунку основної затримки. В цій програмі дві петлі: внутрішня і зовнішня. Внутрішня генерує затримку 0,786 с, зовнішня – множину таких затримок. Така організація програми має назву вкладанням.
Розглянемо програму, що використовує тимчасову затримку і керує «спалахуванням» світлодіодів за певним законом. Нехай спочатку будуть включені світлодіоди 1, 4, 7, потім, через деякий час, замість них спалахнуть діоди 2, 5, 8. Через інтервал затримки спалахнуть діоди 3, 6 і програма повторюється. За допомогою такої програми досягається ефект «бігучих вогнів».
Вихідні світлодіоди підключені до порту B програмованого інтерфейсу (адреса F9). Визначимо комбінації керуючих байтів для включення вказаних діодів у потрібній послідовності. Рівень «1» відповідає включеному світлодіоду, «0» – виключеному (рис. 11.2).
VD1 |
VD2 |
VD3 |
VD4 |
VD5 |
VD6 |
VD7 |
BD8 |
Код |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
92 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
49 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
24 |
Рис. 11.2. Коди керування світлодіодами.
Програма розділяється на окремі фрагменти: – програмування інтерфейсу; три фрагменти включення світлодіодів в указаній послідовності; підпрограму часової затримки (рис. 11.3).
Адреса |
Код команди |
Мітка |
Мнемоніка команди |
Коментар |
|
8000 |
|
|
MVI |
A, 81 |
; Програмування |
8002 |
|
|
OUT |
FB |
; інтерфейсу |
8004 |
|
SEQ: |
MVI |
A, 92 |
; Виведення байту «92» |
8006 |
|
|
OUT |
F9 |
; для включення 1, 4, 7 |
8008 |
|
|
MVI |
D, 01 |
; світлодіодів |
800A |
|
|
CALL |
DELAY |
; Тимчасова затримка |
800D |
|
|
MVI |
A, 49 |
; Виведення байту «49» |
800F |
|
|
OUT |
F9 |
; для включення 2, 5, 8 |
8011 |
|
|
MVI |
D, 01 |
; світлодіодів |
8013 |
|
|
CALL |
DELAY |
; Тимчасова затримка |
8016 |
|
|
MVI |
A, 24 |
; Виведення байту «24» |
8018 |
|
|
OUT |
F9 |
; для включення 3, 6 |
801A |
|
|
MVI |
D, 01 |
; світлодіодів |
801C |
|
|
CALL |
DELAY |
; Тимчасова затримка |
801F |
|
|
JMP |
SEQ |
; Повернення в основну програму |
8022 |
|
DELAY: |
LXI |
B, 2500 |
; Підпрограма тимчасо- |
8025 |
|
LOOP: |
DCX |
B |
; вої затримки |
8026 |
|
|
MOV |
A, B |
; |
8027 |
|
|
ORA |
C |
; |
8028 |
|
|
JNZ |
LOOP |
; |
802B |
|
|
DCR |
D |
; |
802C |
|
|
JNZ |
DELAY |
; |
802F |
|
|
RET |
|
; Повернення |
Рис. 11.3. Програма "Бігучі вогні".
Час «горіння» світлодіодів в цій програмі зафіксовано і може бути змінено тільки встановленням нових значень констант. Для керування часом можна змінювати вміст регістру D або вміст пари регістрів B і C в підпрограмі.
