Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metoda / Metod_prakt-Mikroprocesori-2008-ukr.doc
Скачиваний:
18
Добавлен:
16.03.2016
Размер:
1.16 Mб
Скачать

4 Алгоритми і програми управління електронними апаратами

4.1 Мета занять

Вивчити програмну модель периферійних пристроїв, інтегрованих на кристалі мікроконтролера і можливості їх використання для управління електронними апаратами.

4.2 Заняття 1. Програмна модель таймерів/лічильників мікроконтролера і методи управління периферійними пристроями у реальному часі.

4.2.1 Мета заняття

Вивчити принципи роботи таймерів/лічильників в режимі таймера і в режимі лічильника, навчитися їх програмно настроювати на генерацію реальних інтервалів часу і рахівниць числа подій.

4.2.2 Методичні вказівки з організації самостійної роботи студентів

Під час підготовки до занять необхідно ознайомитися з лекційним матеріалом за темою «Склад і призначення таймерів/ лічильників (Т/С)» і матеріалом, викладеним [1,3,7,8].

Т/С призначені для підрахунку зовнішніх подій, для отримання програмно керованих часових інтервалів і виконання часозадаючих функцій ОМЕВМ.

До складу блока входять: буферний регістр Т/С; два 16-розрядні регістри Т/С0 і Т/С1; 8-розрядний регістр режимів Т/С (TMOD); схема інкремента (INC); 8-розрядний регістр управління (TCON);схема фіксації INT0, INT1, T0, T1; схема управління прапорцями; логіка управління прапорцямиТ/С.

Таймери/лічильники (Т\ С0 і Т/С1). Таймери/лічильники Т\ С0 і Т/С1 є два 16-розрядних регістра, що виконують функцію зберігання вмісту рахунку. Кожне з них складається з пари 8-розрядних регістрів, відповідно TH0, TH1 і TL0, TL1 (Н – старші регістри, L – молодші). Кожен з 8-розрядних регістрів програмно доступний за читанням і записом, має свою адресу і може бути використаний як додатковий РЗП, якщо Т/С не використовується (біти TR0 для Т/С0 і TR1 для Т/С1 в регістрі управління TCON рівні «0»).

Код величини початкового рахунку заноситься в регістри Т/С програмно. В процесі розрахунку вміст регістра Т/С інкрементується. Ознакою закінчення рахунку, як правило, є переповнювання регістра Т/С, тобто перехід його вмісту із стану “всі одиниці” в стан “всі нулі”. Оскільки регістри TH0, TL0, TH1, TL1 доступні за читанням, то за необхідності, контроль досягнень необхідної величини рахунку може виконуватися програмно.

Регістр режимів (TMOD). Регістр режимів призначений для прийняття і зберігання коду, який визначає: один з допустимих режимів роботи Т/С; роботу як таймерів або лічильників; управління Т/С від зовнішнього виведення. Регістр програмно доступний, допускає тільки по байтову адресацію. Формат регістра режимів і призначення розрядів подано [8 ].

Під час роботи таймера вміст регістра Т/С інкрементується в кожному машинному циклі. Іншими словами, Т/С є лічильником машинних циклів. Оскільки машинний цикл складається з 12 періодів частоти синхронізації fBQ, то частота рахунку в даному випадку дорівнює fBQ/12.

Під час роботи лічильника зовнішніх подій вміст регістра Т/С інкрементується у відповідь на перехід з «1» в «0» сигналу на рахунковому вході ОМЕВМ (виведення Т0 для Т/С0 і виведення Т1 для Т/С1). Рахункові входи перевіряються апаратно у фазі S5P2 кожного машинного циклу. Коли перевірки показують високий рівень на рахунковому вході в одному машинному циклі і низький рівень у другому, регістр Т/С інкрементується. Нове (інкрементування) значення заноситься в регістр Т/С у фазі S3P1 машинного циклу, в якому на рахунковому вході Тх ОМЕВМ після високого рівня виявлений перехід у низький. Оскільки для розпізнавання такого переходу потрібно два машинні цикли (24 періоди. частоти сигналу fBQ), то максимальна частота рахунку Т/С у режимі лічильника дорівнює fBQ/24. Щоб рівень сигналу на рахунковому вході був гарантовано зафіксований, він має залишатися незмінним протягом мінімум одного машинного циклу.

Регістр управління TCON. Регістр управління є регістром спеціальних функцій, програмно доступний, допускає побітову і побайтову адресацію. Він призначений для прийняття і зберігання коду слова, що управляє. Формат регістра TCON подано [8].

Під час настроювання Т/С необхідно ознайомитися з їх режимами роботи. Режим роботи Т/С визначається значенням бітів М0 і М1 в регістрі TMOD. Загалом чотири режими роботи.

Режими 0, 1, 2 однакові для обох Т/С. Т/С0 і Т/С1 у цих режимах повністю незалежні один від одного. У режимі 3 робота Т/С0 і Т/С1 різна.

Режим 0. Даний режим визначається установкою бітів М0:=0 і М:=0. У режимі 0 Т/С є пристроєм на основі 13-розрядного регістра. У цьому режимі функцію дільника на 32 виконують регістри TL0, TL1. Вони програмно доступні, проте слід пам'ятати, що значущими в режимі 0 є тільки 5 молодших розрядів регістра TL0, TL1. При переповнюванні Т/С встановлюється прапорець TF0 для Т/С0 і TF1 для Т/С1 в регістрі TCON.

Режим 1. Даний режим роботи визначається установкою бітів М0:=1, М1:=0 і повністю аналогічний режиму 0 за винятком того, що в режимі 1 Т/С перетворюється на пристрій на основі 16-розрядного регістра.

Режим 2. Даний режим роботи визначається установкою бітів М0:=0 і М1:=1. У цьому режимі Т/С є пристроєм на основі 8-розрядного регістра TL0 для Т/С0 і TL1 для Т/С1. При кожному переповнюванні TL0 окрім установки в регістрі TCON прапорця TF0 відбувається автоматичне перезавантаження вмісту з TH0 у TL0. Відповідно відбувається для T/C1. При переповнюванні TL1 у регістрі TCON встановлюється прапорець TF1 і відбувається перезавантаження TL1 з TH1.TH0 і TH1 завантажуються програмно і в процесі перезавантаження в молодший байт TL0, TL1 не змінює свій вміст.

Режим 3. Визначаєтся установкою бітів М1=1 і М0=1. У цьому режимі Т/С1 заблокований і просто зберігає свій рахунок (значення коду регістра Т/С). Ефект такий самий, як і при установці TR1=0 (Т/С – вимкнено). Т/С0 в режимі 3 є двома незалежними пристроями на основі 8-розрядних регістрів TL0 і TH0. Пристрій на основі регістра TL0 може працювати в режимі таймера і в режимі лічильника. За ним зберігаються всі біти управління Т/С0, крім того, він реагує на дію за входами T0, INT0. При переповнюванні TL0 встановлюється прапорець TF0. Пристрій на основі регістра ТН0 може працювати тільки в режимі таймера. Він використовує біт включення TR1, при переповнюванні TH0 виставляє прапорець TF1. Інших бітів управління пристрій на основі TH0 у цьому режимі не має.

Приклад 1.

Використовуючи Т/с 1 в режимі 0, виконати генерацію часового інтервалу, рівного 1с., і забезпечити відлік реального часу від 00 до 60с.

Початкові дані: Частота задаючого генератора f bq =12МГц ; Режим Т/С -0; f bq =12МГц; у режимі 0 Т/С – 13 розрядний пристрій.

Розв’язок.

Оскільки таймер/лічильник рахує машинні цикли, необхідно визначити тривалість машинного циклу. Тмц.= 12*Т, де тривалість одного періоду Т=1/ f bq.

Тмц.=12* 1/12=1мкс.

Для одного переповнювання Т/С необхідний час 2*13*1мкс, а Х переповнювання для 1c= 106мкс.

Тоді Х= .

Схема алгоритму розв’язку задачі наведена на рис. 4.1.

Лічильник 0 (R 5=00)

Лічильник переповнений Т/С (R4:=00)

Початкове значення Т/С (THO TLO:=00)

Режим (TMOD.01:=0)

Таймер (TMOD.2:=0)

TCON.4 (TRO):=1

TCON.5 (TFO) :=0

Перевірка прапорця переповнювання

Приріст лічильника переповнювання

N+ (R4+1)

Перевірка лічильника переповнювання

Приріст лічильника C ( R5:=R5+1)

Початкова установка лічильника переповнювань (R4:=0)

Перевірка лічильника секунд

Рисунок. 4.1 – Схема алгоритму розв’язання задачі TIMER

Програма мовою асемблер.

;TIMER 0050H

;Режим 0 Fзг=12Мгц.

;[30H]:=х (число переповнювань)

;R4-лічильник переповнювань

;R5-лічильник секунд

ORG 0050H ;визначення адреси програми

CLR A ;(A):=00

MOV R4,#30H ;(R4):=x

MOV R5, A ;(R5):=0 лічильник секунд

MOV TLO, A ;TL0:=00 (початкове встановлення таймера)

MOV THO, A ;TH0:=00 (початкове встановлення таймера)

MOV TMOD, A;режим TMOD.0,1:=0,0 ТаймерTMOD.2:=1

SETB TRO ;увімкнути таймер TCON.4 (TR0):=1

L2: CLR TFO ;Скидання пропорця переповнювання (TFO:=”0”)

L1: JNB TFO $L1 ;if TFO#1 виконувати безперервно

DJNZ R4,L2 ;(R4)-1 if (R4) не дорівнює 0 виконувати L2

MOV R4, #30H ;установити лічильник переповнювань (R4):=x

MOV A R5 ;А:= поточне значення З

ADD A, #01 ;додавання секунд (С+1)

DAA ;десяткова корекція

MOV R5, A ;R5:=C

CJNE A, #60 L2;if C#60 goto L2

CLR TRO ;викл Т\С

L3: NOP $L3

END

Під час роботи з Т/С необхідно мати на увазі, що вимкнення Т/С за допомогою бітів TR0, TR1 (скидання цих бітів в «0») або за допомогою входів ОМЕВМ INT0, INT1 (встановлення на цих входах «0» при GATE=1) не спотворює код, що знаходиться в регістрі Т/С.

4.2.3 Контрольні запитання і завдання

1. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 5 Мгц і 3 Мгц відповідно?

2. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 4 Мгц і 12 Мгц відповідно?

3. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 20 Мгц і 6 Мгц відповідно?

4. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 24 Мгц і 10 Мгц відповідно?

5. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 15 Мгц і 6 Мгц відповідно?

6. Чому дорівнює тривалість машинного циклу в ОМЕВМ МК| - 51, якщо частота задаючого генератора 2 Мгц і 8 Мгц відповідно?

7. На якій частоті задаючого генератора ОМЕВМ МК| - 51 тривалість машинного циклу буде рівна 2 і 1.5 мкс|?

8. На якій частоті задаючого генератора ОМЕВМ МК| - 51 тривалість машинного циклу дорівнюватиме 0.6 і 4 мкс|?

9. На якій частоті задаючого генератора ОМЕВМ МК| - 51 тривалість машинного циклу дорівнюватиме 0.5 і 1.2 мкс|?

10. На якій частоті задаючого генератора ОМЕВМ МК| - 51 тривалість машинного циклу дорівнюватиме 2 і 0.8 мкс|?

11. Які регістри спеціальних функцій задіяні в управлінні і забезпеченні функціонування таймерів/лічильників ОМЕВМ МК-51|?

12. Який з режимів таймера/лічильника необхідно використовувати у разі роботи послідовного порту?

12. Які команди можна використовувати для настроювання Т/С1 як лічильника в режимі 2?

MOV 88H, #60H

MOV 89H, #6FH

SETB TCON.6

MOV TCON, #1FH

CLR TMOD.4

SETB TMOD.6

13. Які команди можна використовувати для настроювання таймера – лічильника 0 на режим таймера, передбачивши увімкнення від зовнішнього джерела?

MOV 89H, #08H

MOV 88H, #10H

SETB TR0

MOV 85H, #FFH

SETB TMOD.3

CLR TMOD.1

4.2.4 Приклади аудиторних і домашніх завдань

Приклад 4.1. Настроїтти таймер/лічильник в режим автозавантаження і забезпечити при цьому управління передачею даних (або формування сигналу через вихідний порт) f=9600 Гц.

Розв’язок.

Необхідно визначити часову затримку для заданої частоти f=9600 Гц.

FBQ =12МГц; 1c= 106MкC

,т.е. при FBQ =12МГц, необхідно 104 (68H) машинних цикла.

256-104=152 або 100H-68H=98H

Схема алгоритму розв’язку задачі наведена на рис. 4.2.

Початкова адресація масиву

Розмір масиву N

Номер банку

Автозавантажувана величина TH0:=xx TL0:=xx

Режим (TMOD.0,1:=0.1)

Функція -Таймера (TMOD.2:=0)

Увімкнути TCON.4:=1 (TRO:=1)

TCON.5:=0 (TFO:=0)

If TFO

Передача байта даних у порт Р0

Збільшення адреси (перехід до наступного байта масиву)

Зменшення масиву

If N_

TRO:=00

Рисунок 4.2 – Схема алгоритму розв’язку задачі Avtogener

Програма «Avtogener.» мовою Асемблера

;«Avtogener.»- 0070H

;40H – початкова адреса масиву даних

;[35H]– розмірність масиву N

;[36H]– автозавантажувана змінна

; для заданої чатоти

;R0:=40H-

;R4:=[35]

ORG 0070H ;визначення адреси програми

Avtogener: MOV R4,35H ;встановлення розмірності масиву слів

MOV R0,40H ;встановлення початкової адреси масиву

MOV TH0,36H ;початкове встановлення Т/С

MOV TL0,36H ;автозавантажуваною величиною

MOV TMOD,#02H ;настроювання Т/С на режим 2

SETB TR0 ;увімкнення Т/С

M2: CLR TF0 ;очищення прапорця переповнювання

М1: JNB TF0,M1 ;виконувати безперервно if TF0!=1

MOV PO.@R0 ;пересилання БД в Р0

INC R0 ;перехід до наступного байта масиву

DJNZ R4,M2 ;перехід якщо N!=0

.

CLR TF0 ;скидання прапорця переповнювання

CLR TR0 ;вимкнення таймера

NOP

RET(RETI)

Приклад 4.2. Настроїти таймер/лічильник в режимі 3 на рахунок числа подій до NN, де 255<NN<65535 (наприклад, для N=755).

Оскільки в третьому режимі максимальне число рахунків дорівнює 256, то 755 : 256 = 2 число повних рахунків лічильника, а остача 755 – 512 = 243.

Визначаємо початок рахунку: 256 - 243 = 13.

Таким чином під час встановлення початка рахунку, що дорівнює 13, число переповнювань дорівнюватиме 2+1=3.

Схема алгоритму розв’язку задачі наведена на рис. 4.3.

Рисунок 4.3 – Схема алгоритму розв’язку задачі «Подія»

Програма «Подія» мовою Асемблер.

;«Подія»- 0090Н

;режим-3

;[30H]-число переповнювань

;[31]-початок рахунку

ORG 0090H ;початок програмного модуля

«Подія»: CLR P1.3 ;P1.3:=1-установити низький рівень

MOV R4,50H ;R4:=[30H]-Число переповнення.

MOV TL0,51H ;TL0:=початок рахунку

MOV TMOD,#0FH ;TMOD.0,1:=1,1-Режим 3

;TMOD.2:=1-Лічильник

;TMOD.3:=1-Увімкнути зовнішнє джерело

SETB TR0 ;ввімкнути лічильник

K2: CLR TF0 ;очищення прапорця

S1: JNB TF0,S1 ;якщо TF0=0-виконувати

; безперервно

DJNZ R4,K2 ;R4-1 якщо R4=0 виконувати К2

SETB P1.3 ;P1.3:=1-встановити високий рівень

ACALL del 60 з ;затримка 60 с

CLR P1.3 ;скидання високого рівня сигналу

4.3 Заняття 2. Алгоритми і програми обміну інформацією через послідовний порт

4.3.1 Мета занять

Вивчити і набути практичних навичок настроювання послідовного порту в різних режимах роботи

4.3.2 Методичні вказівки з організації самостійної роботи студентів

Під час підготовки до практичних занять необхідно вивчити лекційний матеріал з даної теми. Блок послідовного інтерфейсу переривань (ПІП) призначений для організації введення-виведення послідовних потоків інформації та організації системи переривання програм.

Програмно-доступним регістром у блоці є регістр управління SCON, призначений для прийняття і зберігання коду восьмибітового слова, що управляє послідовним інтерфейсом (Рис. 4.4). Всі розряди регістра доступні за записом і читанням.

Біти

7

6

5

4

3

2

1

0

Позначення

SM0

SM1

SM2

REN

ТВ8

RB8

ТI

RI

Рисунок 4.4 – Формат регістра управління послідовним портом (SCON)

На рис. 4.4 прийняті такі позначення бітів:

SM0 SM1 – визначають режими роботи послідовного порту;

SM2 – дозвіл багатопроцесорної роботи;

REN – дозвіл або заборона прийняття послідовних даних;

TB8 – дев'ятий біт переданих даних у режимах 2 і 3;

RB8 – дев'ятий біт прийнятих даних у режимах 2 і 3;

T1 – прапорець переривання передавача, встановлюється апаратний у кінці часу видачі 8-го біта в режимі 0 або на початку стоп-біта| в інших режимах і скидається програмним забезпеченням;

R1 – прапорець переривання приймача, встановлюється апаратний у кінці часу прийняття 8-го біта в режимі 0 або через половину інтервалу стоп-біта| в режимах 1, 2, 3 при SM2=0.

У блоці послідовного інтерфейсу є буфер передавача і буфер приймача. Буфер приймача і буфер передавача при програмному доступі мають однакове ім'я (SBUF) і адресу (99Н). Якщо команда використовує SBUF як регістр джерела, то звертання відбувається до буфера приймача. Якщо команда використовує SBUF як регістр призначення, то звертання відбувається до буфера передавача.

У всіх чотирьох режимах роботи послідовного порту передача ініціюється будь-якою командою, яка використовує SBUF як регістр призначення. Прийом у режимі 0 ініціюється умовою RI=0 і REN=1. У решті режимів прийом ініціюється надходженням старт-біта, якщо REN=1.

Послідовний інтерфейс працює в 4-х режимах.

Режим 0. Інформація передається через вхід приймача RXD (виведення Р3.0 ОМЕВМ). Через вихід передавача TXD (виведення Р3.1 ОМЕВМ) видаються імпульси синхронізації, які стробують кожен біт інформації, що приймається або передається. Формою посилання 8 біт. Частота прийняття і передачі постійна і складає

,

де f BQ – тактова частота ОМЕВМ.

Режим 1. Інформація передається через вихід передавача RXD. Формою посилання 10 біт: «Старт» біт = 0, вісім біт даних, «Стоп» біт = 1. Частота прийняття і передачі задається Т/С1.

,

де fп т/с1 – частота переповнювання таймера лічильника 1.

Режим 2. Інформація передається через вхід, через вихід передавача TXD, а приймається через вхід приймача RXD. Формат посилання – 11 біт: стартовий біт дорівнює «0»; вісім біт даних; програмований 9 біт; стоповий біт дорівнює «1».

Переданий дев'ятий біт даних приймає значення біта TB8 з регістра спеціальних функцій SCON. Біт ТВ8 у регістрі SCON може бути програмно встановлений у 0 або в 1, або в нього наприклад, можна помістити значення біта Р з регістра PSW для підвищення достовірності інформації, що приймається (контроль за паритетом). Під час прийняття дев'ятий біт даних прийнятого посилання надходить у біт RB8 регістра SCON.2. Частота прийняття і передачі в режимі 2 задається програмно і може дорівнювати fBQ/32 або fBQ/64:

.

Режим 3. Режим 3 повністю ідентичний режиму 2 за винятком частоти прийняття і передачі, яка в режимі 3 задається як

.

Приклад складання програм настроювання послідовного порту мовою асемблера для передачі даних у режимі 0:

;T0 0030H

;режим 0 fT0= fBQ/12

ORG 0030H ;

TO: SETB EA ;дозвіл переривання від усіх джерел

SETB ES ;дозвіл переривання від

;послідовного порту

MOV SCON,#00 ;настроювання ПП на режим 0

MOV SBUF,@R1 ;початок передачі

S1: JNB TI,S1 ;очікування кінця передачі

CLR TI

.

.

END

Приклад складання програми настроювання послідовного порту мовою асемблера для прийняття даних у режимі 1.

;R1 0060H

;режим 1

;FR1=(2SMOD/32)*fПЕРТ/С1

ORG 0060H ;визначення програмного модуля

R1: CLR ET1 ;заборона переривання від Т/С1

MOV TMOD,#20H;настроювання Т/С1 на режим 2

MOV TH1,#XX ;швидкість для послідовного порту

SETB TR1 ;ввімктути Т/С1

SETB EА ;загальний дозвіл переривання

SETB ES ;дозвіл переривань від послідовного

;порту

MOV PCON,#80H;подвоєння швидкості прийняття через пос. порт

MOV SCON,#50H;настроювання ПП на режим 1, дозвіл прийняття

S1: JNB RI,S1 ;очікування закінчення прийняття

MOV @R0,SBUF ;зберегти прийняті дані

CLR Ri ;скидання прапорця приймача послідовного| порту

.

END

У режимах 1, 3 також є можливість змінити швидкість послідовної передачі:

де fOV — частота переповнювань Т/С 1.

Для використання Т/С 1 як джерело для задання частот Fn1 і Fn3 необхідно:

1) заборонити переривання від Т/С 1;

2) запрограмувати роботу Т/С 1 як таймер або як лічильник, встановивши при цьому для нього один з режимів 0, 1 або 2;

3) запустити Т/С 1 на рахунок.

Зазвичай для синхронізації послідовного порту таймер T/C l включається в режим автозавантаження (режим 2).

В цьому випадку швидкість послідовного обміну визначається за формулою:

,

де (ТН) — десятковий код вмісту TH1.

Якщо необхідний послідовний обмін з дуже низькою швидкістю, то можна використовувати Т/С 1 в режимі 16-розрядного таймера (режим 1), дозволивши при цьому переривання від Т/С 1 з метою перезавантаження TL1/TH1 у підпрограмі обслуговування переривання.

4.3.3 Контрольні запитання і завдання

1. Які регістри спеціальних функцій у МК використовуються для ініціалізації і роботи послідовного інтерфейсу?

2. Які виведення мікроконтролера використовуються для організації роботи послідовного порту в синхронному режимі?

3. Що впливає на швидкість передачі/прийняття через послідовний порт МК в синхронному режимі?

4 Що впливає на швидкість прийняття/передачі через послідовний порт у режимі 1, 2, 3?

5. Яке слово, що управляє, необхідне для настроювання послідовного інтерфейсу МК для передачі в режимі 0, 1, 2, 3?

6. Який пристрій ініціалізував початок передачі через послідовний порт МК у режимі 0 і 2?

7. Який пристрій ініціалізував передачу через послідовний порт МК у режимах 1 і 3?

8. Які умови необхідно виконати для настроювання ПІ МК на синхронний режим?

9. Які умови необхідно виконати для настроювання ПП МК на асинхронний режим?

10. На який режим прийняття настроюється ПП словом FOH, що управляє?

11. Яка інформація міститься в 9-му біті переданого слова в режимі 2, 3?

12. Який формат переданого слова ПІ, що приймається, в режимі 1, 2, 3?

13. Чим закінчується передане або прийняте слово через ПП| МК| в асинхронному режимі?

14. З чого починається передане або прийняте слово через ПП| МК| в асинхронному режимі?

15. Через які виведення МК| передається інформація через послідовний інтерфейс у синхронному режимі?

16. Через які виведення МК| приймається інформація через послідовний інтерфейс у синхронному режимі?

17. Через які виведення МК| передаються імпульси синхронізації в режимі 0?

4.3.4 Приклади аудиторних і домашніх завдань

Приклад 4.3. Скласти програму настроювання послідовного порту для прийняття даних в режимі 0 за умови fT0= fBQ/12.

Розв’язок:

;R0 0040H

;режим 0 fT0= fBQ/12

ORG 0040H ;

RO: SETB EA ; дозвіл переривання від усіх джерел

SETB ES ;дозвіл переривання від

;послідовного порту

MOV SCON,#10H ; настроювання ПП| на режим 0

S2: JNB RI,S2 ;очікування закінчення прийняття

MOV @R0,SBUF ;зберігання прийнятих даних

CLR RI

.

Приклад 4.4. Скласти програму настроювання послідовного порту для передачі даних в режимі 1 за умови FT1=(2SMOD/32)*fПЕРТ/С1

Розв’язок:

;Т1 0050Н

;режим 1

;FT1=(2SMOD/32)*fпер.Т/С1

ORG 0050H

T1: CLR ET1 ;заборона переривання від Т/С1

MOV TMOD,#20H;настроювання Т/С1 (режим 2, таймер)

MOV TH1,#XXH ;швидкість для послідовного порту

SETB TR1 ;увімкнути таймер

SETB EA ;дозвіл переривання від усіх джерел

SETB ES ;дозвіл переривання від

;послідовного порту

MOV SCON,#40H;настроювання ПП на режим 1

MOV PCON,#80H;можливість подвоєння швидкості

MOV SBUF,@R1 ;початок передачі

S1: JNB TF0,S1 ;очікування закінчення передачі

CLR TI ;скидання прапорця передавача послідовного

;порту

END

Приклад 4.5. Скласти програму настроювання послідовного порту для передачі даних у режимі 2 за умови FT2=(2SMOD/64)*fBQ

Розв’язок:

;Т2 0070Н

;Режим 2

;FT2=(2SMOD/64)*fBQ

ORG 0070H

T2: NOP

SETB EA ;загальний дозвіл переривання від усіх джерел

SETB ES ;дозвіл переривання від

;послідовного порту

MOV PCON,#80H;можливе подвоєння швидкості

MOV SCON,#88H;настроювання послідовного порту, скидання TI

;режим 2 (SCON.7.6:=1.0)

;9 передаваний біт (SCON.3:=1)

MOV SBUF,@R1 ;початок передачі

S1: JNB TI,S1 ;очікування закінчення передачі

CLR TI ;очищення прапорця.

--------- -

END

Приклад 4.6. Скласти програму настроювання послідовного порту для прийняття даних у режимі 2 за умови FR2=(2SMOD/64)*fBQ

Розв’язок:

;R2 0080Н

;Режим 2

;FR2=(2SMOD/64)*fBQ

ORG 0080H ;

R2: NOP

SETB EA ;загальний дозвіл переривання від усіх джерел

SETB ES ; дозвіл переривання від

;послідовного порту

MOV PCON,#80H;можливість подвоєння швидкості

MOV SCON,#90H;настроювання послідовного порту, скидання TI:=0

;режим 2 (SCON.7.6:=1.0)

;дозвіл прийняття (SCON.4:=4) REN:=1

S1: JNB BI,S1 ;очікування закінчення прийняття

CLR TI ;очищення прапорця

----------

END

Приклад 4.7. Скласти програму настроювання послідовного порту для прийняття із швидкістю 110 бод на частоті тактового сигналу fBQ = 6 Мгц.

Розв’язок:

;R3 0090H

;Ініціалізація порту для роботи

;на прийом із швидкістю 110 бод

;на частоті тактового сигналу 6 Мгц

ORG 0090H ;

R3: CLR ET1 ;заборона переривання від Т/С1

MOV TMOD,#20H;настроювання Т/С1

;режим 2 (TMOD.5.4:=10

;таймер (TMOD.G=0)

MOV TH1,#72H ;автозавантажуване число для

;отримання швидкості 110 бод

SETB TR1 ;ввімкнути T/C1

SETB EA ;загальний дозвіл переривання від усіх джерел

SETB ES ; дозвіл переривання від

;послідовного порту

MOV SCON,#11011100B;настроювання послідовного порту

;режим 3 (SCON.7;6:=1,1)

;дозвіл. прийняття (REN:=1),Скидання R1:=0

;RB8,TB8=1,1

S1: JNB RI,S1 ;очікування завершення. прийняття символу

MOV A,SBUF ;читання прийнятого символу

CLR RI ;скидання прапорця

MOV SBUF,A ;видача прийнятого символу

;на зовнішній пристрій

K1: JNB TI K1 ;очікування закінчення

CLR TI ;передачі

CLR RI ;скидання прапораця

RETI ;перехід з підпрограми

END

4.4 Заняття 3. Алгоритми і програми обробки інформації в режимі переривань

4.4.1 Мета заняття

Вивчити принципи організації переривань і методи складання програм обробки переривань.

4.4.2 Методичні вказівки з організації самостійної роботи студентів

Механізм переривань в ОМЕВМ дозволяє автоматично реагувати на зовнішні і внутрішні події (переповнювання таймерів/лічильників, завершення послідовного обміну). Кожне із зовнішніх переривань INT0, INT1 може бути активізовано за рівнем («0») або за фронтом (перехід з «1» в «0») сигналів на виведеннях ОМЕВМ Р3.2, Р3.3, що визначається станом бітів IT0, IT1 регістра TCON («1» – фронт, «0» – рівень).

Кожне з перерахованих джерел переривань може бути індивідуально дозволено або заборонено установкою або скиданням відповідного біта в регістрі дозволу переривань IE. Регістр IE містить також біт ЕА, скидання якого в «0» забороняє відразу всі переривання. Необхідною умовою переривання є його дозвіл в регістрі IE.

Всі біти, які викликають переривання (IE0, IE1, TF0, TF1, RI, TI), можуть бути програмно встановлені або скинуті з тим самим результатом, що і у разі їх апаратної установки або скидання. Тобто переривання можуть програмно викликатися або очікуючи обслуговування переривання можуть бути програмно ліквідовані. Крім того, переривання по INT0, INT1 можуть викликатися програмною установкою P3.2=0 і Р3.3=0, як показано у наведеному нижче прикладі:

MAIN: MOV IE,#00000101B; дозвіл переривання від INT0 і INT1

MOV IP,#04H ;присвоєння INT1 старшого пріоритету

SETB EA ;загальний дозвіл переривання

MOV P3,#11110011B; імітація зовнішніх переривань

SUBR: ORG013H ;перехід до підпрограми обслуговування INT1

У запропонованому прикладі запити переривання і INT0 і INT1, що мають різний пріоритет, надходять одночасно. При цьому обслуговується переривання з вищим пріоритетом.

Всі прапорці IE0, IE1, TF0, TF1, RI, TI встановлюються незалежно від того чи дозволено, чи ні, відповідне переривання в регістрі IE.

Структура пріоритетів переривань є двоступеневою. Кожному джерелу переривання може бути індивідуально привласнений один з двох рівнів пріоритетів: високий або низький. Виконується це установкою (високий рівень пріоритету) або скиданням (низький рівень пріоритету) відповідного біта в регістрі пріоритетів переривань IP.

Номер

Джерело

Пріоритет усередині рівня

1

IE0

(вищий)

2

TF0

3

IE1

4

TF1

5

RI+TI

(нижчий)

Слід зазначити, що структура «Пріоритет усередині рівня» працює тільки в тих випадках, коли визначається послідовність обслуговування запитів на переривання, які прийняті.

Регістр дозволу переривань (IЕ) призначений для дозволу або заборони переривань від відповідних джерел. Позначення розрядів регістра IЕ наведено на рис. 4.5.

Біти

7

6

5

4

3

2

1

0

Позначення

ЕА|

X

X

ES

ET1

EX1

ET0

EX0

Рисунок 4.5– Формат регістра дозволу переривання

ЕА| – управління всіма джерелами переривань одночасно. Якщо ЕА=0, то переривання заборонені. Якщо ЕА=1, то переривання можуть бути дозволені індивідуальною установкою високого рівня сигналу у відповідних розрядах ЕХ0, ЕТ0 EX1, ET1, ES. Х – резервний розряд.

ES – управління перериванням від послідовного порту.

ЕТ0 – управління перериванням від Т/С0.

ET1 – управління перериванням від Т/С1.

EX1 – управління перериванням від зовнішнього джерела INT1.

ЕХ0 – управління перериванням від зовнішнього джерела INT0.

Регістр пріоритетів переривань (IP) призначений для встановлення рівня пріоритету переривання для кожного з п'яти джерел. Позначення розрядів регістра IP наведено на рис. 4.6.

Біти

7

6

5

4

3

2

1

0

Позначення

Х

Х

Х

PS

РТ1

РХ1

РТ0

РХ0

Рисунок 4.6 – Формат регістра пріоритетів переривань (IP)

Призначення розрядів регістра IP: РХ0 – встановлення рівня пріоритету переривання від зовнішнього джерела INT0; РТ0 – встановлення рівня пріоритету переривання від Т/С0; РХ1 – встановлення рівня пріоритету переривання від зовнішнього джерела INT1; РТ1 – встановлення рівня пріоритету переривання від Т/С1; PS – встановлення рівня пріоритету переривання від послідовного порту; Х – резервний розряд.

Логіка обробки прапорців переривань здійснює пріоритетний вибір запиту переривання, скидання його прапорця та ініціює вироблення апаратно реалізованої команди переходу на підпрограму обслуговування переривання.

Схема вироблення вектора переривання виробляє двобайтові адреси підпрограм обслуговування переривання залежно від джерела переривань, які наведені в табл. 4.1

Таблиця 4.1 – Вектори переривань усіх джерел

Джерело переривання

Вектор переривання

Зовнішнє переривання INT0

0003Н

Таймер/лічильник Т/С0

000ВН

Зовнішнє переривання INT1

0013Н

Таймер/лічильник Т/С1

001ВН

Послідовний порт

0023Н

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

4.4.3 Контрольні запитання і завдання

1. Які регістри спеціальних функцій МК| використовуються для організації обробки переривань?

2. Які регістри задіяні у формуванні сигналів від усіх джерел переривання?

3. У яких регістрах встановлюються прапорці ініціалізації переходів по вектору переривань?

4. Які регістри використовуються для організації переривань від внутрішніх джерел?

5. Які регістри використовуються для організації переривань від зовнішніх джерел?

6. За якою адресою буде виконаний перехід до підпрограми обробки переривання, якщо в регістрі дозволу IE буде встановлене слово 1FH, що управляє?

7. За якою адресою буде виконаний перехід до підпрограми обробки переривання, якщо в регістрі дозволу IE буде встановлене слово 90H, що управляє?

8. За якою адресою буде виконаний перехід до підпрограми обробки переривання, якщо в регістрі дозволу IE буде встановлене слово 81H, що управляє?

9. Яке слово, що управляє, необхідно помістити в регістр управління перериваннями IE для переходу за адресою 0023Н?

10. Яке слово, що управляє, необхідно помістити в регістр управління перериваннями IE для переходу за адресою 000ВН?

11. Яке слово, що управляє, необхідно помістити в регістр управління перериваннями IE для переходу за адресою 0001Н?

12. Яке джерело переривання буде обслужене першим, якщо в режимі пріоритетів IP помістити слово, що управляє, 10Н?

13. Яке джерело переривання буде обслужене першим, якщо в режимі пріоритетів IP помістити слово, що управляє, 00Н?

14. Яке джерело переривання буде обслужене першим, якщо в режимі пріоритетів IP помістити слово, що управляє, 08Н?

4.4.4 Приклади аудиторних і домашніх завдань

Приклад 4.8. Настроїти послідовний порт в режимі 3 на прийом десяти байт даних із швидкістю 55 бод і розміщення їх у внутрішньому ОЗУ. Дані, що приймаються, перевірити на десяткову парність, якщо ТАК – записувати в осередок 50Н, інакше – в 40Н. Перевірку виконувати за перериванням від RI.

Алгоритм розвязання основної задачі

START.

1. Настроїти Т/С1( режим 2, функція "таймер").

2. Занести в Т/С початкове значення, рівне 43Н.

3. Заборонити переривання від Т/С1.

4. Увімкнути Т/С1.

5. Вирішити переривання від усіх джерел.

6. Вирішити переривання від послідовного порту.

7. Настроїти послідовний порт (режим 3, вирішити прийом, скинути прапорці приймача).

8. Початок прийняття.

9. Перевіряти прапорець безперервно для очікування закінчення прийняття одного байта.

10. Якщо число прийнятих байт менше 10, виконувати пункт 9.

STOP

Алгоритм підпрограми обслуговування переривання

1. Перевірити десяткову парність прийнятих даних. Якщо «НІ», виконувати п. 4, інакше пункт 2.

2. Записати прийняті дані в осередок 50Н.

3. Виконувати пункт 5.

4. Записати прийняті дані в осередок 40Н.

5. Повернення в основну програму.

Розрахункова частина:

Fппз=(2SMOD·fBQ)/(32·12·(256-TH))

55=1·4000000/(32·12· (256-TH))

TH=256-4000000/(32·12·55=67D=43H;

Основна програма мовоюАсемблера

; «Прийняття даних» 0090Н ;режим 3 ;10 байт ;fпп=55 бод ;[50Н]<- прийнятий байт, якщо дані ;парне ;[40Н]<- прийнятий байт, якщо дані ;непране

ORG 0090H ; задання початкової адреси програми

R3: CLR ET1 ;заборона переривань від Т/С1

MOV TMOD,#20H ;настроювання Т/С (режим 2, таймер)

MOV TH1,#43H ;завантаження величини, що визначає частоту ;переповнення таймера

SETB TR1 ;увімкнення таймера

SETB EA ; дозвіл переривання від усіх джерел SETB ES ;дозвіл переривання від

;послідовного порту

MOV SCON,#11010000B;настроювання ПП (режим 3, дозвіл

;прийняття, скидання прапорця приймача)

MOV R1,#10D ;занесення у регістр кількості тих, що ;приймаються

; байт даних

L1: JNB RI,L1 ;перехід до мітки, якщо RI дорівнює 0

DJNZ R1,L1 ;зменшення вмісту R1 на одиницю

; і перехід за міткою, якщо R1не рівне 0

Підпрограма обслуговування переривання

ORG 0030H ;вектор переривання від послідовного

;порту

CHET:MOV A,SBUF ;розміщення даних, що приймаються, в

; акумуляторі

CLR RI ;очищення прапорця переривання приймача

JNB ACC.0,K1 ;парність на парність, якщо «НІ» виконувати на

; мітку К1

К2: MOV 40H,A ;інакше прийнятий байт даних заноситься в

; осередок 40Н

JMP M1 ;перехі до мітки М1

K1: MOV 50H,A ;прийнятий байт даних заноситься в

; осередок 50Н

M1: RETI ;вихід з підпрограми

ORG 0023H ;задання адреси вектора переривання від ПП|

SJMP CHET ;перехід до підпрограми перевірки парності

END

Приклад 4.9. Виконати за перериванням від Т/С0 передачу 20 байт даних через послідовний порт у режимі 3 з одночасною перевіркою третього біта переданого байта і розміщенням його в 9-му переданому біті. Швидкість передачі максимальна.

Розв’язок.

У режимі 3 швидкість передачі через послідовний порт визначається частотою переповнювання T/С 1. В зв'язку з цим необхідне настроювання даного таймера на максимальну частоту переповнювання.

Алгоритм розвязку задачі

1. START.

2. Встановити лічильник числа передаваних байт.

3. Настроювання Т/С0 (режим 2, функція "таймер).

4. Занести в Т/С0 значення, що визначає інтервал передачі даних.

5. Настроювання Т/С1 (режим 2, функція "таймер).

6. Занести в Т/С1 початкове значення, рівне FFH (максимальна частота переповнювання).

7. Вирішити переривання від усіх джерел.

8. Вирішити переривання від Т/С0.

9. Заборонити переривання від Т/С1.

10. Настроїти послідовний порт в режим 3.

11. За необхідності подвоїти швидкість передачі.

12. Увімкнути Т/С0 і Т/С1.

13. Перевіряти прапорець TF0 безперервно. Якщо TF0 =1, перехід на обробку переривання.

14. Скидання прапорця переповнювання Т/С0.

15. Перевірити число переданих байт. Якщо менше 20, виконувати пункт13.

16. STOP

Алгоритм обслуговування переривання

1. START.

2. Скидання прапорця передавача.

3. Заборонити переривання від передавача послідовного порту.

4. Перевірити 3-й| біт передаваного байта і привласнити його значення TB8 регістра TCON.

5. Почати передачу даних.

6. Перевіряти прапорець передавача безперервно для очікування закінчення передачі одного байта інформації. Якщо Т=1, виконувати пункт7.

7. Повернення в основну програму.

Основна програма мовоюАсемблера

; Послідовний порт передача 0070Н

; режим3

; 50Н-64Н- розташування 20 байт даних

; R1 : =50H

ORG 0070H ; задання початкової адреси програми

MOV R1,#50H ;завантаження у R1 адреси першого переданого

; байта

MOV TMOD,#10B ;настроювання Т/С0 (режим 2

;функція - "таймер")

MOV TH0,#ХХH ;завантаження величини, що визначає частоту ;переповнення таймера

MOV TL0,#ХХH ;завантаження величини, що визначає початок рахунку таймера

CLR ET1 ;заборона переривання від Т/С1

SETB EA ;дозвіл переривання від усіх джерел

SETB ET0 ;дозвіл переривання від Т/С0

MOV R2,#00H ;завантаження у R2 0

L: CLR TF0 ;обнуління прапорця TF0

MOV SCON,11000000B;настроювання послідовного порту в режим 3

MOV PCON,#80H ;подвоєння швидкості передачі даних

SETB TR1 ; увімкнення Т/С1

SETB TR0 ; увімкнення Т/С0

$K: JNB TF0, $K ;очікування початку передачі байта даних.

;якщо TF0 = 1, виконувати на підпрограму ;обслуговування ;переривання

CLR TF0 ;скидання прапорця переповнювання від Т/С0

INC R2 ;приріст вмісту R2

CJNE R2,#14H, $K ;очікування завершення передачі

; масиву даних

CLR TR0 ;вимкнути таймер

Підпрограма обслуговування переривання

PER: ORG 001AH ;адреса підпрограми обслуговування

;переривання

CLR TI ;очищення прапорця передавача

; послідовного порту

CLR TB8 ;очистіть 9-й біт переданих даних

MOV A @R1 ;завантаження в А чергового байта переданих

; даних

MOV TB8,ACC.3 ;розміщення 3-го біта переданих даних

; у 9-му біті

MOV SBUF,A ;початок передачі даних

INC R1 ;інкрементування адрес переданих

;даних

RETI ;вихід з підпрограми обслуговування

; переривання

ORG 000ВH ;задання адреси вектора переривання від Т/С0

SJMP PER ;перехід до підпрограми обслуговування

; переривання

END

Рекомендована література

  1. Лысенков Н.А. Вычислительные и микропроцессорные средства в электронных апаратах: Учеб. пособие. – Харьков: ХНУРЭ, 2002 – 156 с.

  2. М. Предко. Руководство по микроконтроллерам. Том 1 и 2. – Москва: Постмаркет, 2001. – 415 с., 487 с.

  3. Бобрыкин А.В., Липовецкий Г.П., Литвинский Г.П. и др. Однокристальные микро-ЭВМ. – М.: МИКАП, 1994. – 320с.

  4. Гребнев В.В. Микроконтроллеры семейства AVR фирмы Atmel. – М.: Ип Радио Софт, 2002 – 176с.

  5. Голубцов М.С., Кириченкова А.В. Микроконтрллеры AVR: от простого к сложному. Изд. 2-е, испр. и доп. – М.: СЛОН-Пресс, 2005. – 304 с.

  6. Евстифеев А.В. Микроконтроллеры AVR семейства Tiny и Mega фирмы Atme, 2-е изд., стер. – М.: Издательский дом «Додэка-XXI», 2005. – 560с .

7. Методичні вказівки до самостійної работи студентів з дисципліни “Обчислювальні та мікропроцесорні засоби в ЕА” для студентів усіх форм навчання спеціальностей 7.091001, 7.091002, 7.091003, 7.091004 / Упоряд.: М.О. Лисенков, Б.О. Рогачов.–Харків: ХНУРЕ, 2005. – 98 с.

8. Методичні вказівки до лабораторних робіт з дисципліни «Обчислювальні та МП засоби в ЕА» для студентів усіх форм навчання спеціальностей : 7.091001, 7.091002, 7.091003, 7.091004 / Упоряд.: Лисенков М.О., Рогачов Б.О.– Харків: ХНУРЕ, 2006. – 104 с.

Навчальне видання

МЕТОДИЧНІ ВКАЗІВКИ

до практичних занять з дисципліни

“ МІКРОПРОЦЕСОРИ В ЕЛЕКТРОННИХ АПАРАТАХ ”

для студентів усіх форм навчання спеціальностей

7.091001 – Виробництво електронних засобів;

7.091002 – Біотехнічні та медичні апарати і системи;

7.091003 – Електронна побутова апаратура;

7.091004 – Технологія та засоби телекомунікацій

Упорядники: ЛИСЕНКОВ Микола Олександрович

ГАЛКІН Павло Вікторович

Відповідальний випусковий І.І.Ключник

Редактор О.Г. Троценко

Комп’ютерна верстка О.А. Чурсіна

План 2008 (II півріччя), поз. 35

Підпис. до друку 22.07.08. Формат 60×84 1/16. Спосіб друку–ризографія.

Умов. друк. арк. 3,9. Облік. вид. арк. 3,6. Тираж 50 прим.

Зам. № 1–35. Ціна договірна

ХНУРЕ. Україна. 61166 Харків, просп. Леніна, 14

Віддруковано в навчально-науковому

видавничо-поліграфічному центрі ХНУРЕ

Соседние файлы в папке metoda