Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб11.docx
Скачиваний:
1
Добавлен:
13.09.2019
Размер:
72.47 Кб
Скачать

Міністерство освіти та науки України

Національний технічний університет України

«Київський політехнічний інститут»

Факультет інформатики та обчислювальної техніки

Кафедра технічної кібернетики

"КОМП’ЮТЕРНА ЕЛЕКТРОНІКА"

кредитний модуль "Мікропроцесорні системи"

Лабораторна робота №11

Програмування часових затримок

Виконали:

студент гр. ІК-91

Федоров Д. В.

Перевірив:

Ігнатенко В.М.

Київ 2012

Мета роботи: вивчити принцип побудови алгоритмів часових затримок та керування зовнішніми пристроями.

1. Короткі теоретичні відомості.

Алгоритм найпростішої програми часової затримки (без видачи керуючих діянь) показаний на мал.1. Для реалізації часової затримки використовується один з внутрішніх регістрів МП, куди спочатку завантажується байт інформації. Після кожного зменшення на одиницю вмісту регістра він перевіряється на рівність нулю; якщо він не дорівнює нулю, програма циклічно повторюється. Час виконання цих двох команд програми відомий, тому тривалість затримки буде визначатися числом циклічних повторень.

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

DELAY: DCR A; зменьшуючий рахунок;

JNZ DELAY; продовжити, якщо не нуль;

RET; повернення.

У програмі використовується акумулятор А. В цьому випадку байт попереднього встановлення лічильника повинен бути завантажений до цього регістру. Це можливо, оскільки результат виконання команд DCR r впливає на стан флагу нуля Z, що входить до регістру флагів F.

Для виконання команд треба:

DCR r; 4 такти;

JNZ 10 тактів у випадку виконання умови;

7 Тактів, якщо умова не виконується;

RET; 10 тактів.

Мал. 1. Алгоритм програми затримки.

Отже, для кожного проходу по петлі треба 4 + 10 = 14 тактів, а для останнього 4 + 7 + 10 = 21 такт, оскільки умова не виконується і JNZ не потребує переходу, але додатково виконується команда RET. Отже, при тривалості такту Т = 0.4 нс максимальна затримка td дорівнює:

td = (( 256 – 1 )* 14 + 21 )* 0,4 = 1436 нс.

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

DELAY: DCX B; зменшуючий рахунок;

MOV A,B; пересилка з В до А;

ORA C; перевірка на нуль;

JNZ DELAY; продовжити, якщо не нуль;

RET; повернення.

Використання команд DCX rp дозволяє завдяки застосування в даному випадку пари регістрів В,С збільшити затримку до N = 2562 = 65536 = 216. Згідно тексту програми регістрова пара повинна бути попередньо завантажена вихідними даними. В підпрограмі перша команда зменшує вміст пари на одиницю (враховуючи перенос між байтами). Оскільки команда не впливає на флаги, для перевірки виконується пересилка вмісту В до акумулятору та порівняння з іншим регістром даної пари, тобто з С, за допомогою команди ОRA C. Флаг (тригер) Z буде встановленний в 1 тільки у тому випадку, якщо вміст В і С буде дорівнювати нулю.

Час затримки td, одержаний при виконанні цієї команди, буде дорувнювати:

td = (( N - 1 )* 24 + 31)* 0,4 (нс),

і для максимального числа N час затримки буде:

td max = ( 65536 – 1 )* 24 + 31)* 0,4 = 0.6 (мс).

Таку затримку можна одержати, якщо попередньо занести "0" до регістрів В і С.

Для отримування ще більшої затримки можна організувати додатковий лічильник, наприклад, в регістровій парі D, який буде визначати, скільки разів виконується затримка у 0.6 мс. Програма, яка це реалізує:

DELAY : LXI B,0000; початок зовнішньої петлі;

LOOP : DCX B; петля затримки 0.6 мс;

MOV A,B; пересилка з В до А;

ORA C; порівняння;

JNZ LOOP; продовження внутрішньої петлі;

DCX D; зовнішня петля затримки;

MOV A, D; пересилка з D до A;

ORA E; порівняння;

JNZ DELAY; продовження зовнішньої петлі;

RET; повернення.

У внутрішньому циклі виконується затримка 0.6 мс, у зовнішньому – послідовність таких затримок. Така організація програми називається вкладанням.

Виконання:

ІДЗ:

  1. Сформувати 3 виводи на світло діоди:

    1. Д4 Д3 – байт 18

    2. Д7 Д0 – байт 81

    3. Д6, Д5, Д4, Д1 – байт 71

  2. Часові затримки: для знаходження кількості зовнішніх циклів потрібно потрібний час затримки t (залежить від частоти процесора, обрана частота 2.5 ГГц) поділити на максимальну довжину затримки, при одному зовнішньому циклі:

    1. 10 секунд – 02FF (767) зовнішніх циклів.

    2. 1.5 секунд – 0088 (136) зовнішніх циклу.

    3. 6 секунд – 01FF (511) зовнішніх циклів.

Адреса

Код

Аемблер

Регістри, лічильники, покажчики

Коментарі

A

F

B

D

SP

PC

8000

3E

MVI A,81

81

-

-

-

83C7

8002

Програмування інтерфейсу

8001

81

8002

D3

OUT FB

81

-

-

-

83C7

8004

8003

FB

8004

3E

MVI A, 23

18

-

-

-

83C7

8006

Вивід на світлодіоди байту С для вмикання діодів: 4, 3

8005

23

8006

D3

OUT F9

18

-

-

-

83C7

8008

8007

F9

8008

11

LXI D, 00C0

18

-

-

02FF

83C7

800B

Зовнішній цикл затримки (10 с)

8009

C0

800A

00

800B

CD

CALL 8025

18

-

-

02FF

83C5

800E

Виклик підпрограми затримки на 10 секунд

800C

25

800D

80

800E

3E

MVI A, C0

81

-

-

0

83C7

8010

Вивід на світлодіоди байту 81 для вмикання діодів: 7, 0

800F

C0

8010

D3

OUT F9

81

-

-

0

83C7

8012

8011

F9

8012

11

LXI D, 0420

81

-

-

0088

83C7

8015

Зовнішній цикл затримки (1,5 с)

8013

20

8014

04

8015

CD

CALL 8025

81

-

-

0088

83C5

8018

Виклик підпрограми затримки на 1,5 секунд

8016

25

8017

80

8018

3E

MVI A, 1C

71

-

-

0

83C7

801A

Вивід на світлодіоди байту 71 для вмикання діодів: 6, 5, 4,1

8019

1C

801A

D3

OUT F9

71

-

-

0

83C7

801C

801B

F9

801C

11

LXI D, 06C0

71

-

-

01FF

83C7

801F

Зовнішній цикл затримки (6 с)

801D

C0

801E

06

801F

CD

CALL 8025

71

-

-

01FF

83C5

8022

Виклик підпрограми затримки на 1,5 секунд

8020

25

8021

80

8022

C3

JMP 8004

71

-

-

0

83C7

8025

Безумовний перехід на початок програми (безкінечний цикл)

8023

04

8024

80

8025

01

LXI B, FFFF

X

-

FF

FF

Y/0

83C7

8028

Завантаження в р.п. В максимального значення, для отримання затримки 0.786

8026

FF

8027

FF

8028

0B

DCX B

X

-

B-1

Y/0

83C7

8029

Зменшення значення р.п. В

8029

78

MOV A, B

B

-

-

Y/0

83C7

802A

Занесення до акумулятора старшої половини р.п. В

802A

B1

ORA C

B

0/1

-

Y/0

83C7

802B

Порівняння старшої та молодшої половини

802B

C2

JNZ 8025

B

-

-

Y/0

83C7

802E

Перехід на початок внутрішнього циклу

802C

28

802D

80

802E

1B

DCX D

B

-

-

Y-1

83C7

802F

Зменшення лічильника зовнішнього циклу

802F

7A

MOV A, D

8030

8030

B3

ORA E

8031

8031

C2

JNZ 8022

B

-

-

0

83C7

8034

Перехід на початок зовнішнього

циклу

8032

25

8033

80

8034

C9

RET

B

-

-

0

83C7

Повернення

Х – в залежності від потрібної послідовності ввімкнутих світодіодів, буде різне значення акумулятора. В даній програмі: 18, 81 та 71.

Y – в залежності від кількості потрібних зовнішніх циклів. В даній програмі: 13, 2 та 8. З кожним проходом зовнішнього циклу D зменшується на 1, отже на виході підпрограми ми отримуємо 0 в регістрі D.

Висновок: в даній лабораторній роботі я навчився програмувати часові затримки за допомогою циклів з потрібною кількістю повторів. Це пояснюється тим, що кожен цикл виконується за певну послідовність тактів. Знаючи частоту процесора можна визначити час виконання одного такту. Звідси час циклу – (кількість тактів у циклі) * (час виконання одного циклу). Для створення більш довгої часової затримки можна використовувати вкладені цикли.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]