Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МК

.pdf
Скачиваний:
31
Добавлен:
16.02.2016
Размер:
3.47 Mб
Скачать

тимчасового збереження даних чи адрес. Число, записане до стека останнім,

витягається з нього першим.

Команда RET (C9) поміщає в програмний лічильник останнє записане на даний момент у стеці число. Після цього виконання програми здійснюватиметься з цієї адреси. Будь-яка підпрограма повинна завершуватися командою RET.

Автоматичне збереження і відновлення адреси основної програми під час виконання підпрограм дозволяє зробити підпрограми вкладеними, тобто здійснити виклик однієї підпрограми з іншої. Рівень вкладеності для мікро-

ЕОМ визначається лише розміром стека.

Існують також команди умовного виклику підпрограм і повернення з них.

Вони дозволяють викликати підпрограму і повернутися з неї за визначеним станом заданих розрядів регістра ознак (аналогічно командам умовних переходів). Усі команди умовного виклику підпрограми трибайтні, у другому і третьому байтах повідомляється початкова адреса підпрограми. Команди виклику підпрограм і повернення з них використовують стек і внутрішній регістр МП SP ( STACK POIN ТЕ R) для адресації до стек.

Крім команд виклику підпрограм і повернення з них зі стеком можна обмінюватися інформацією за допомогою команд PUS H <R> (записати в стек зміст позначеного регістра МП) і POP < R> (записати дані зі стека в позначений регістр МП). Ці команди є однобайтні, і в них міститься вказівка пари регістрів МП.

Для запису в стек вмісту пари регістрів чи програмного лічильника за адресою SP-1 записується вміст старшого регістра із зазначеної пари чи старший байт РСН програмного лічильника, а за адресою SP-2 у стек записується вміст молодшого регістра із зазначеної пари молодшого байта PCL

програмного лічильника.

Для запису зі стека даних у пари регістрів чи програмний лічильник у молодший регістр пари чи PCL записується число з адреси, зазначеної в

81

покажчику стека SP, а в старший регістр пари чи РСН – число, записане за адресою SP + 1. У результаті виконання команди вміст покажчика стека SP

збільшується на 2. Дані в пам'яті не змінюються, а лише відбувається їхнє читання і збільшення вмісту SP. Таким чином, під час запису дані адреси стека ростуть від великих до менших, а покажчик стека SP завжди містить останню адресу стека, в якому записане число.

Для розробки програм необхідно спочатку призначати область стека,

записуючи в SP адреси за допомогою команди LXI SP <А2> <А1> чи команди

SPHL.

Усі операції зі стеком повинні бути збалансовані, тобто кожна підпрограма повинна містити рівну кількість команд PUS H <R> і POP <R> і

завершується командою RET, якщо ж ні, то виконання команди RET наприкінці підпрограми призведе до запису в програмний лічильник випадкового числа зі стека. Адреса повернення в основну програму буде загублена і порушиться послідовність її виконання.

Як правило, на початку кожної програми зберігають у стеці вміст усіх задіяних для її виконання регістрів за допомогою команд PYSH <R>.

Наприкінці підпрограми відновлення вмісту регістрів здійснюється за допомогою команд POP <R> і в зворотній послідовності стосовно їхнього запису до стека.

Звичайно у вигляді підпрограм записуються багаторазово використовувані фрагменти програм, наприклад підпрограма видачі звукового сигналу, підпрограма обслуговування клавіатури і дисплея тощо.

Алгоритм роботи простої підпрограми тимчасової затримки показаний на рис. 11. Загальний час затримки обчислюється за формулою

TD = t1 + (t2 + t3 +t4) N1 + t5,

де N1 - число, спочатку записане в лічильнику. Як лічильник обраний регістр В, до якого записується число N1 з регістра С.

82

Команда NOP потрібна для збільшення часу виконання циклу, а отже, і

загальної затримки. Замість команди NOP може бути записана будь-яка послідовність команд, виконання яких не змінює вмісту регістрів мікропроцесора. Час запису числа N1 у регістр В і повернення з підпрограми t1+t5 фіксованій і у цикл не входить. Мінімальна затримка для приведеної підпрограми визначається за N1 = 0,1 і дорівнює

TDmin = t1 + t2 + t3 + t4 + t5 ,

Максимальна затримка має місце, коли N1 = 00 і обчислюється за формулою

Tdmax = t1 + (t2 + t3 + t4)256 + t5.

Підпрограма DLY (підпрограма 10, табл. 17) є підпрограмою тимчасової затримки, записаною відповідно до алгоритму, показаного на рис. 11.

Розглянемо приклад використання підпрограми тимчасової затримки для

організації звукових сигналів у мікро-ЕОМ (рис. 12)

 

 

 

 

 

 

 

 

 

Записати число N1 з регістра С у регістр В

 

 

t1

 

 

 

 

 

 

 

 

 

 

 

 

 

Немає операції

 

 

t2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зменшити вміст регістра В на 1

 

t3

 

 

 

 

 

 

 

 

 

Ні

 

 

 

 

 

 

 

 

 

В = 0 ?

 

 

t4

 

 

 

 

 

 

 

 

 

 

Так

 

 

 

 

 

 

 

 

 

 

 

t5

 

Вихід з підпрограми

 

 

 

 

 

 

 

 

Рис. 11. Алгоритм простої підпрограми тимчасової затримки.

83

Рис. 12. Схема формування звукових сигналів мікро-ЕОМ.

У мікро-ЕОМ звукові сигнали можуть формуватися найпростішою схемою (див. рис. 12), на вхід якої зі звуковою частотою записуються по черзі

"0" і "1". Вважатимемо, що пристрій формування звукових сигналів має адресу

80. Схема алгоритму роботи підпрограми генерації звукових коливань

(підпрограма 11, табл. 18) наведена на рис. 13.

CALL BPP

Записати у вихідний пристрій О

Викликати підпрограму DLY

Записати у вихідний пристрій 1

Викликати підпрограму DLY

Рис.

RETURN

13.

 

Алгоритм підпрограми видачі звукового сигналу.

Програма MAIN (програма 12) є програмою генерації сигналів із частотою, що задається числом із вхідного регістра (табл. 19).

84

 

 

 

 

 

 

 

Таблиця 17

 

 

 

 

Підпрограма 10.

 

 

 

 

 

 

 

 

 

Адреса

Машинний код

Мітка

 

Мнемокод

Коментар

 

0900

41

 

 

 

MOV B С

записати число з регістра С у

 

 

 

 

 

 

 

 

регістр В

 

0901

00

DLY

 

NOP

 

немає операції

 

0902

05

 

 

 

DCR В

 

зменшити число в регістрі В

 

 

 

 

 

 

 

 

на 1

 

0903

С2 0109

 

 

 

JNZ DLY

якщо число, записане в

 

 

 

 

 

 

 

 

регістрі В, не дорівнює нулю,

 

 

 

 

 

 

 

 

то переходити на DLY

 

0906

С9

 

 

 

RET

 

 

 

 

 

 

 

 

 

 

Таблиця 18

 

 

 

Підпрограма 11

 

 

 

 

 

Адреса

Машинний код

Мітка

Мнемокод

 

Коментар

 

ОАОО

AF

ВРР

 

XRA А

очистити акумулятор

 

ОАОІ

D3 80

 

 

OUT BP

записати 00 у вихідний пристрій

 

ОАОЗ

CD 0009

 

CALL DLV

викликати підпрограму

 

 

 

 

 

 

 

затримки

 

ОА06

2F

 

 

 

СМА

записати код ГГ в акумулятор

 

ОАС7

D3 80

 

 

ОUТ ВР

записати код ГГ у вихідний

 

 

 

 

 

 

 

пристрій

 

ОА09

CD 0009

 

CALL DLY

викликати підпрограму

 

 

 

 

 

 

 

затримки

 

ОАОС

39

 

 

 

RET

 

 

 

За рахунок зміни вхідних параметрів можна впливати на кінцевий результат виконання підпрограм. Розглянемо це на прикладі підпрограми регульованої тимчасової затримки (підпрограма 13, табл. 20).

 

 

 

 

Таблиця 19

 

 

 

Програма 12

 

 

 

 

 

 

Адреса

Машинний код

Мітка

Мнемокод

Коментар

 

0800

DB 20

MAIN

IN 20

записати число з вхідного

 

 

 

 

 

регістра в акумулятор

 

0802

4F

 

MOV З А

записати число в регістр ІЗ

 

0803

CD OOOA

 

CALL ВРР

викликати підпрограму ВРР

 

0806

СЗ 0008

 

JMP MAIN

продовжувати, перехід на мітку

 

 

 

 

 

MAIN

 

85

Програма складається з двох підпрограм: DEL В (адреса 0430) і DELA (адреса 0429). Підпрограма DEL В здійснює регульовану тимчасову затримку, і

вхідним параметром її є двобайтне число, записане в парі регістрів (В, С). Це число і визначає тривалість затримки в мілісекундах.

 

 

 

 

Таблиця 20

 

 

 

Підпрограма 13

 

 

 

 

 

 

Адреса

Машинний

Мітка

Мнемокод

Коментар

 

 

код

 

 

 

 

0429

С5

DEL A

PUSHB

зберегти вміст регістрів В і С у

 

 

 

 

 

стеці

 

042А

О1О1ОО

 

LXIY 0001

встановити тривалість

 

042D

С3 3104

 

JMP DEL1

1 мс

 

0430

С5

DELB

PUSH B

зберегти вміст регістрів В і С у

 

 

 

 

 

стеці

 

0431

F5

DELI

PUSH PS W

зберегти вміст PSW у стеці

 

0432

AF

 

XRA А

очистити акумулятор

 

0433

D5

 

PUSH D

зберегти вміст регістрів D і Е в

 

 

 

 

 

стеці

 

0434

16 67

DEL 2

MVI D TIME

завантажити лічильник

 

0436

15

DEL З

DCR D

1 мс затримки зменшити вміст

 

 

 

 

 

лічильника на 1

 

0437

С2 3604

 

JNZ DEL3

якщо не 0, продовжувати

 

043 А

 

DCX D

зменшити вміст лічильника

 

 

 

 

 

тривалості на 1

 

043В

В8

 

СМР В

 

 

043С

С2 3404

 

JNZ DEL 2

 

 

043F

В9

 

CMP C

 

 

0440

С2 3404

 

JNZ DEL 2

якщо не 0, продовжувати

 

0443

Dl

 

POP D

відновити вміст регістрів D, Е

 

0444

FI

 

POP PSW

те саме, PSW

 

0445

СІ

 

POP В

те саме, В, С

 

0446

С9

 

RET

 

 

Частковим випадком підпрограми DEL B є підпрограма DEL А, що здійснює фіксовану затримку в 1 мс і не має вхідних параметрів. Таким чином,

якщо необхідно мати в програмі фіксовану затримку в 1 мс, то можна звертатися за допомогою команди CALL до підпрограми DEL A. У разі необхідності одержання визначеної заданої тимчасової затримки в програмі

86

слід записати відповідне число в регістри В, С, а потім викликати підпрограму

DEL В.

Робота на навчальній ЕОМ

Навчальна мікро-ЕОМ містить схему видачі звукових сигналів. Адреса зовнішнього пристрою для запису даних у схему видачі звукових сигналів – 80.

Ряд підпрограм записаний у ПЗП мікро-ЕОМ. Зокрема, усі записані в ПЗП і наведені в описі лабораторної роботи програми мають адресу менше

0800.

Усі наведені в лабораторній роботі програми і порядок їхнього виконання можуть бути без будь-яких змін виконані на навчальній мікро-ЕОМ.

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

1. Вивчити тимчасові діаграми виконання мікро-ЕОМ команд CALL

<A2> <А1> і RET.

2.Ознайомитись з командами виклику і повернення з підпрограми за умовою для МП.

3.Визначити, за яких чисел, записаних у регістрі В, підпрограма 9

здійснюватиме мінімальний і максимальний час затримки. Визначити цей час,

якщо машинний такт t = 1 мкс.

4.Розробити підпрограму 5-й 10-й секундної тимчасової затримки.

5.Скласти програму, що послідовно вимикає світлодіоди вихідного пристрою на час відповідно 10 і 5с. Для розробки програми скористатися підпрограмами, розробленими в п.4 завдання (рис. 14).

6.Визначити для підпрограми 13, за яких чисел у регістрах В і С буде максимальний і мінімальний час затримки. Визначити цей час, якщо машинний такт t - 1 мкс.

7.Розібрати програму 14 (табл. 21), що визначає, який з восьми перемикачів вхідного пристрою (адреса 20) мікро-ЕОМ встановлено в положенні "0": а) скласти алгоритм роботи програми 14; б) записати

87

підпрограму, використовувану в програмі 14; в) встановити, в якому регістрі МП міститься інформація про номер перемикача вхідного пристрою,

встановленого в "0" ; г) визначити, як працюватиме програма 14, якщо на вхідному пристрої будуть встановлені в положення "0" не один, а кілька перемикачів.

Отримати час затримки із вхідного регістра

Завантажити регістри В, С

Увімкнути світлодіоди вихідного регістра

Викликати підпрограму DЕL В

Вимкнути світлодіоди вихідного регістра

Викликати підпрограму DЕL В

Рис. 14. Алгоритм програми генератора імпульсів, заданої з

вхідного регістра частоти мікро-ЕОМ.

 

 

 

 

 

 

Таблиця 21

 

 

 

 

 

Програма 14

 

 

 

 

 

 

 

Адреса

Машинний

Мітка

Мнемокод

Коментар

код

 

 

 

 

 

 

0800

31 BOOB

 

LXI SP

записати в покажчик стека S Р адресу

 

 

 

ОВВО

0900

0803

DB20

WAITC

IN

20

одержати число з вхідного пристрою

0805

FE FF

 

СРІ

FF

чи містить якийсь розряд число 0

0807

СА0308

 

JZ

WAITC

якщо ні, то чекати

080А

CD I008

 

CALL IDSW

якщо так, то викликати підпрограму

 

 

 

 

 

 

визначення розряду, у якому

 

 

 

 

 

 

записаний 0

080D

CF

 

R S ТІ

завершити виконання програми

0810

06 FF

IDSW

MVI В FF

записати в регістр В число FF

0812

04

SRCH

INR B

збільшити вміст регістра В на

0813

OF

 

 

RRC

Змістити число в акумуляторі вправо

 

 

 

 

 

 

на один розряд

0814

DA1208

 

JC

SRCH

якщо “3”=1, то продовжувати

0817

С9

 

 

RET

повернення з підпрограми

88

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

Завдання 1. Дослідити процес виконання команд виклику і повернення з підпрограми, а також команд роботи зі стеком.

Порядок виконання завдання

1. Ввести в мікро-ЕОМ підпрограму 15 (табл. 22).

 

 

 

 

 

Таблиця 22

 

 

 

Підпрограма 15

 

 

 

 

 

 

Адреса

Машинний

Мітка

Мнемокод

Коментар

 

 

код

 

 

 

 

 

0800

31 BOOB

 

LXI

записати в покажчик стека SP

 

 

 

 

SP,OBBO

адресу ОВВО

 

0803

CD 0708

 

CALL STDY

викликати підпрограму STDY

 

0806

CF

 

RST

І

зупинити виконання

 

 

 

 

 

 

підпрограми

 

0807

F5

 

STDY PUSH

записати слово стану МП БІС у

 

 

 

 

PSW

стек

 

0808

С5

 

PUSH В

записати вміст регістрів ВС у

 

 

 

 

 

 

стек

 

0809

D5

 

PUSH D

записати вміст регістрів D, Е в

 

 

 

 

 

 

стек

 

080А

Е5

 

PUSH H

записати вміст регістрів Н, L у

 

 

 

 

 

 

стек

 

0808

ЗЕ 0 5

 

МVI А 05

записати в регістр А число 05

 

080D

47

 

MOV В А

записати число з регістра А в

 

 

 

 

 

 

регістр

 

080E

87

 

ADD А

подвоїти вміст акумулятора

 

080F

5F

 

MOV E А

записати вміст регістра А в

 

 

 

 

 

 

регістр Е

 

0810

67

 

MOV H А

записати вміст регістра А в

 

 

 

 

 

 

регістр Н

 

0811

El

 

POP H

записати числа зі стека в

 

 

 

 

 

 

регістри Н, L

 

0812

DI

 

POP D

записати числа зі стека в

 

 

 

 

 

 

регістри D, Е

 

0813

СІ

 

POP В

записати числа зі стека в регістр

 

 

 

 

 

 

В,С

 

0814

FI

 

POP

PSW

записати слово стану зі стека в

 

 

 

 

 

 

МП БІСА

 

0815

С9

 

RET

повернення підпрограми

 

89

2.Виконати програму 15 за командами, використовуючи режим виконання програми за командами. Після кожної команди перевірити вміст усіх регістрів МП.

3.Виконати команди CALL, STDY, PUSH PSW, POP, RET за машинними циклами і побудувати тимчасові діаграми їхнього виконання на мікро-ЕОМ.

4.Замінити в підпрограмі 15 команду POP PSW на команду N ОР (00) і

простежити, як виконуватиметься підпрограма 15. Пояснити зміни, що відбулися.

Завдання 2. Досліджувати програму тимчасової затримки на прикладі роботи програми генерації звукових коливань (програма 2).

Порядок виконання завдання:

1. Зібрати і під’єднати схему видачі звукових сигналів до мікро-ЕОМ так,

як показано на рис. 12.

2.Записати повний текст програми 12 для генерації звукових сигналів з урахуванням підпрограм 10 і 11. Ввести в мікро-ЕОМ програму.

3.Встановити на вхідному пристрої число 00.

4.Здійснити пуск програми з адреси 0800.

5.Простежити за зміною тону звуку, формованого мікро-ЕОМ у процесі виконання програми, збільшуючи число, записане у вхідному пристрої.

Завдання 3. Досліджувати програму регульованої тимчасової затримки на

прикладі програми, що послідовно вмикає і вимикає світлодіоди вихідного

пристрою на час відповідно 10 і 5 с.

Порядок виконання завдання

1.Ввести в мікро-ЕОМ програму, розроблену в п.5 завдання для домашньої підготовки.

2.Здійснити пуск програми і перевірити її виконання на мікро-ЕОМ.

3.Змінити числа, записані в регістрах В, С, в підпрограмі регульованої тимчасової затримки (підпрограма 13). Перевірити можливість зміни тривалості

90