Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для лаб Арх_комп(Схемтех).doc
Скачиваний:
6
Добавлен:
08.05.2019
Размер:
1.76 Mб
Скачать

Індивідуальні завдання на лабораторну роботу

  1. Закодувати програми, які розглянуті в теоретичному розділі.

  2. Скласти програму виведення стилізованого тексту на семисегментні індикатори.

Порядок виконання лабораторної роботи

  1. Занести в пам’ять мікро лабораторії програму рис. 10.2, 10.5, 10.7—10.9 і виконати їх.

  2. Занести в пам’ять індивідуальну програму, відлагодити і виконати її.

  3. Зробити висновки з роботи.

Контрольні питання

  1. Відмінність режиму захоплення від режиму переривання.

  2. Чому, не дивлячись на зупинення програми, не згасає індикація?

  3. Чим пояснити, що індикатори можуть світитись яскраво або тьмяно?

  4. Чому не можна перепрограмувати кнопку «Сброс»?

  5. Чому для індикаторів відводиться вісім вічок пам’яті, а для програми SEGGG для вихідних даних тільки чотири?

  6. Як вивести символи на індикатори без підпрограми 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 в підпрограмі.