- •1.2.3 Контрольні запитання і завдання
- •1.2.4 Приклади аудиторних і домашніх завдань
- •1.3 Заняття 2. Двійкова арифметика і основні функції алгебри логіки
- •1.3.2 Методичні вказівки з організації самостійної роботи студентів
- •1.3.3 Контрольні запитання і завдання
- •1.3.4 Приклади аудиторних і домашніх завдань
- •2 Алгоритми і програми проектування мікропроцесорних систем
- •2.1 Мета занять
- •2.2 Методичні вказівки з організації самостійної роботи студентів
- •2.3 Контрольні запитання і завдання
- •2.4 Приклади аудиторних і домашніх завдань
- •3.2.3 Контрольні запитання і завдання
- •3.2.4 Приклади аудиторних і домашніх завдань
- •3.3 Заняття 2,3. Групи команд
- •3.3.1 Мета занять
- •3.3.2 Методичні вказівки з організації самостійної роботи студентів
- •3.3.3 Контрольні запитання і завдання
- •3.3.4 Приклади аудиторних і домашніх завдань
- •4.2.3 Контрольні запитання і завдання
- •4.2.4 Приклади аудиторних і домашніх завдань
- •4.3 Заняття 2. Алгоритми і програми обміну інформацією через послідовний порт
- •4.3.1 Мета занять
- •4.3.2 Методичні вказівки з організації самостійної роботи студентів
- •4.3.3 Контрольні запитання і завдання
- •4.3.4 Приклади аудиторних і домашніх завдань
- •4.4 Заняття 3. Алгоритми і програми обробки інформації в режимі переривань
- •4.4.1 Мета заняття
- •4.4.2 Методичні вказівки з організації самостійної роботи студентів
- •4.4.3 Контрольні запитання і завдання
- •4.4.4 Приклади аудиторних і домашніх завдань
- •61166 Харків, просп. Леніна, 14
3.3.3 Контрольні запитання і завдання
1. Які вимоги визначають вибір способу адресації?
2. Який спосіб адресації доцільно використовувати під час роботи з таблицями символів (кодів), зашитих в ПЗП програми?
3. Який спосіб адресації використовується в командах передачі байта константи в акумулятор з елемента пам'яті програм?
4. Які регістри дозволяють виконати вибірку будь-якого осередку 256-байтового блока зовнішнього ОЗУ даних?
5. Який регістр використовується для вибірки осередків усередині адресного простору 64 Кбайт зовнішнього ОЗУ?
6. Яка адресація використовується для звертання до регістрів спеціальних функцій?
7. Яку адресацію можна використовувати при звертанні до внутрішнього ОЗУ даних?
8. :Які команди використовують пряму адресацію?
MOV A,28
PUSH 4FH
ANL C,2BH
MOV R0,A
MOV A,#data
XCH A,@R2
9. Які команди використовують безпосередню адресацію?
MOV direct,#data
ANL A,#25H
POP direct
ORL A,45
10. Які команди використовують побічно-регістрову адресацію?
XRL 3Fh,#7Fh
MOV @R0, #110
ADDC A, 250
MOV @P1, 3Fh
11. Які способи адресації використовуються в командах: MOVC A,@0DPTR; MOV X,@0PC; DJNZ R4,adr; ORL C,2BH?
12. Яка команда виконає настроюваня банку 3?
MOV D0H,#FFH
MOV PSW,18H
MOV PSW,#0FH
SETB PSW.4
13. Якою командою можливе скидання прапорця перенесення?
CLR D7H
MOV PSW,#03H
XRL A,direct
CPL C
CLR PSW.6
CLR PSW.0
14. Якому з поточних банків РЗП настроюється командами MOV PSW,#B7h; MOV D0,24?
3.3.4 Приклади аудиторних і домашніх завдань
Приклад 3.1 Реалізувати команду MOV A,@Ri ; i=0,1; (A):=(direct) за умови (A)=10H, (R0)=41H, (ОЗУ[41])=0CAH
Розв’язок: MOV A,@R0; (A)=CAH, (R0)=40H, (ОЗУ[41])=0CAH
Приклад 3.2 Реалізувати команду MOV A,#data; (A):=<data8> за умови
(A)=C9H (11001001B).
Розв’язок: MOV A,#37H; (A)=37H (00110111B)
Приклад 3.3 Реалізувати команду MOV Rn,<direct>;n=0-7, (Rn):=(direct) за умови (R0)=39H, (P2)=F2H
Розв’язок: MOV R0,P ; (R0)=F2H
Приклад 3.4 Реалізувати команду MOV <direct>,<direct>; (direct):=(direct) за умови (ОЗУ[45])=33H, (ОЗУ[48])=DEH
Розв’язок: MOV 48H,45H; (ОЗУ[45])=33H, (ОЗУ[48])=33H
Приклад 3.5 Реалізувати команду MOV DPTR,#data16 за умови (DPTR)=01FDH
Розв’язок. Команда "завантажити покажчик даних 16-бітовою константою" завантажує покажчик даних DPTR 16-бітовою константою, вказаною у другому і третьому байтах команди. Другий байт команди завантажується у старший байт покажчика даних (DPH), а третій байт – у молодший байт покажчика даних (DPL). Ця команда на прапорці не впливає і є єдиною командою, яка одночасно завантажує 16 біт даних.
MOV DPTR,#<data16>;(DPTR):=#data[15-9], причому (DPH):=#data[15-8], (DPL):=#data[7-0]
MOV DPTR,#1234H ;(DPTR)=1234H, (DPH)=12H, (DPL)=34H
Приклад 3.6 Реалізувати команду ADD A,<direct ; (A):=(A)+(direct) за умови (A)=77H, (ОЗУ [90])=FFH.
Розв’язок:ADD A,90H ;(A)=76H, (ОЗУ [90])=FFH
;(C)=1, (AC)=1, (OV)=0
Приклад 3.7 Реалізувати команду ADD A,<#data> ; (A):=(A)+#data за умови (A)=09H.
Розв’язок: ADD A,#0D3H;(A)=DCH
;(C)=0, (AC)=0, (OV)=0
Приклад 3.8 Реалізувати команду ADDC A,<direct>;(A):=(A)+(direct)+(C) за умови (A)=11H, (ОЗУ[80])=DFH,(C)=1
Розв’язок: ADDC A,80H ;(A)=F1H
;(C)=0, (AC)=1, (OV)=0
Приклад 3.9 Реалізувати команду SUBB A,Rn ; (A):=(A)-(C) -(Rn), де n=0-7 за умови (A)=C9H, (R2)=54H, (C)=1
Розв’язок: SUBB A,R2 ;(A)=74H, (R2)=54H, (C)=0
;(AC)=0, (OV)=1
Приклад 3.10. Реалізувати команду множення А на В за умови (A)=2AH, (C)=1,(B)=06H, (OV)=1
Розв’язок:MUL AB ;(A)=D8H, (C)=0, (B)=00H, (OV)=0
Приклад 3.11. Реалізувати команду ділення А на В за умови, що акумулятор містить число 251 (0FBH або 11111011B), а регістр В – число 18 (12H або 00010010B).
Розв’язок: Команда "ділення" ділить 8-бітове ціле без знака з акумулятора А на 8-бітове ціле без знака в регістрі В. Аккумулятору привласнюється ціла частина частки (старші розряди), а регістру В – остача. Прапорці CY і OV скидаються. Якщо (A)>(B), то прапорець АС не скидається.
Після виконання команди DIV AB в акумуляторі буде число 13, а у В – 17, оскільки 251=(13*18)+17, CY і OV – скинуті.
Приклад 3.12. Реалізувати команду логічного «І» ANL A,@Ri ;(A):=(A) AND ((Ri)), де i=0,1 за умови (A)=BCH, (ОЗУ[35])=47H, (R0)=35H
Розв’язок:ANL A,@R0 ;(A)=04H, (ОЗУ[35])=47H
Приклад 3.13. Реалізувати команду логічного «І» ANL <direct>,#data ; : (direct);=(direct) AND #data за умови (P1)=FFH.
Розв’язок:ANL P1,#73H ;(P1)=73H
Приклад 3.14 Реалізувати команду DJNZ <direct>,<мітка>;(PC):=(PC)+3, (direct):=(direct)-1, ;якщо ((direct)>0 або (direct)<0), то (PC):=(PC)+<rel8> за умови (ОЗУ[40])=01H, (ОЗУ[50])=80H, (ОЗУ[60])=25H.
Розв’язок:DJNZ 40H,LAB1 ;(ОЗУ[40])=00H
DJNZ 50H,LAB2 ;(ОЗУ[50])=7FH
DJNZ 60H,LAB3 ;(ОЗУ[60])=24H
...
LAB1: CLR A
...
LAB2: DEC R1
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) не спотворює код, що знаходиться в регістрі Т/С.
