- •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
2.3 Контрольні запитання і завдання
1. Які етапи програмування передують кодуванню алгоритму мовою програмування?
2. Які етапи програмування виконуються після етапу визначення типів вхідних і вихідних змінних?
3. Які вимоги висуваються до алгоритмів?
4. Які можливі типи схем алгоритмів і їхня область застосування?
5. У яких випадках переважне написання програм у машинних двійкових кодах?
6. У яких випадках переважне написання програм у мнемокодах?
7. Що розуміється під вкладенням підпрограм?
2.4 Приклади аудиторних і домашніх завдань
Приклад 2.6. Організувати програмно лічильник циклів.
Розв’язок. Для реалізації завдання складається перелік кроків, тобто схема алгоритму.
Схема алгоритму наведена на рис. 2.5, а фрагмент програми – у табл. 2.4.
Рисунок 2.5 – Схема алгоритму рахунку циклів
Для МП з регістр-акумуляторною архітектурою як лічильник циклів може бути один РЗП, наприклад, регістр В. За командою в нього заноситься число N, що визначає кількість повторюваних циклів. У даному завданні умовно встановлюється N=16. Для визначеності приймаємо, що ділянка програми, яку необхідно повторити 16 разів, починається командою логічної операції що «ВИКЛЮЧАЄ АБО» XRA A, розташованої за адресою 1002, і закінчується командою MOV D, A. Ця команда розташована за адресою 10А1H і пересилає дані з акумулятора в регістр D. Після кожного виконання цієї ділянки програми вміст лічильника (регістра В) зменшується на одиницю за допомогою команди DCR B (адреса 10А2). До тих пір, поки вміст регістра В відмінний від нуля, ознака Z має нульове значення і програма переходить до виконання команди, адреса 1002 якого міститься в другому і третьому байтах команди JNZ (перехід за відсутності нуля). Вказана адреса позначена у програмі міткою М, тобто мітка М1 є мнемонічним позначенням адреси 1002.
Таблиця 2.4 – Програма рахунку циклів
Мітка |
Мнемокод |
Операнд |
Адреса |
Н - код |
Коментар |
Vt |
|
. . . . . . . |
. . . . . . . |
. . . . . . |
. . . . . . |
. . . . . . . . . . |
. . |
|
MVI |
B, 16 |
1000 |
06 |
Встановлення лічильника |
7 |
|
|
|
1001 |
10 |
N=16 у (B) |
|
M1: |
XRA |
A |
1002 |
AF |
Обнулення ознаки перенесення |
4 |
Продовження табл. 2.4 |
||||||
|
. . . . . . . |
. . . . . . . |
. . . . . . |
. . . . . . |
. . . . . . . . . . |
. . |
|
MOV |
D, A |
10A1 |
57 |
Пересилання вмісту А в регістр D (D:=A) |
5 |
|
DCR |
B |
10A2 |
05 |
Зменшення вмісту лічильника на 1 |
5 |
|
JNZ |
M1 |
10A3 |
C2 |
Перехід за умовою (N) 0 до елемента пам'яті з адресою 1002 |
10 |
|
|
|
10A4 |
02 |
|
|
|
|
|
10A5 |
10 |
|
|
|
. . . . . . . |
. . . . . . . |
. . . . . . |
. . . . . . |
. . . . . . . . . . |
. . |
Якщо в результаті чергового віднімання одиниці вміст регістра У виявиться рівним нулю (Z=1), то програма перейде до виконання команди, розташованої за JNZ. Відбувається вихід з циклічної ділянки програми. Якщо регістр В має вісім двійкових розрядів, то розглянута структура програми дозволяє організувати лічильник від 1 до 255 циклів.
Приклад 2.7. Визначити з двох позитивних чисел одне максимальне.
Розв’язок. Під час обробки сигналів часто з’являється необхідність визначення максимального з декількох позитивних чисел. Такі завдання виникають, наприклад, під час виявлення корисних сигналів або під час знаходження максимального значення сигналу при заданому інтервалі часу. Знаходження максимального з декількох чисел зводиться до послідовного визначення максимального з двох чисел.
Вважатимемо, що одне з чисел, які перевіряються, знаходиться в регістрі А, друге – в регістрі В. Потрібно після визначення більше число помістити в регістр В, а менше – в акумулятор. Схема алгоритму реалізації даного завдання наведена на рис. 2.6, а програма в машинних кодах – у табл. 2.5.
Рисунок 2.6 – Схема алгоритму знаходження
максимального з двох позитивних чисел
У системі команд МП є команда порівняння СМР, яка не змінює вмісту акумулятора, проте встановлює трігер ознаки CY (перенесення) в одиничний стан, якщо вміст акумулятора менше вмісту регістра.
Таблиця 2.5 – Програма знаходження більшого з двох позитивних чисел
Мітка |
Мнемокод |
Операнд |
Адреса |
Н-код |
Коментар |
Vt |
|
CMP |
B |
00A1 |
B8 |
Порівняння чисел |
7 |
|
JC |
M1 |
00А2 |
DA |
Перехід на М1, якщо (А) <(В) |
10 |
|
|
|
00А3 |
А8 |
|
|
|
|
|
00А4 |
00 |
|
|
|
MOV |
C, A |
00A5 |
4F |
Обмін вмісту між акумулятором і регістром B через регістр З |
5 |
|
MOV |
A, B |
00A6 |
7B |
|
5 |
|
MOV |
B, C |
00A7 |
41 |
|
5 |
M1: |
|
|
00A8 |
|
|
|
3 Програмна модель ядра мікроконтролера з CISC архітектурою
3.1 Мета занять
Вивчення і закріплення теоретичного матеріалу того, що включає програмно доступні ресурси мікроконтролерів з регістр-акумуляторної архітектури, систему команд, алгоритми і програми обробки інформації з використанням різних методів адресації.
3.2 Заняття 1. Програмно доступні регістри, розподіл пам'яті, способи адресації
3.2.1 Мета заняття
Вивчити і дослідити регістри спеціальних функцій, регістри загального призначення, розподіл пам'яті, основні способи адресації, використовувані в системі команд МК MCS 251.
3.2.2 Методичні вказівки з організації самостійної роботи студентів
Під час підготовки до занять необхідно ознайомитися з лекційним матеріалом з даної теми і матеріалом, викладеним [1,2,3 ].
Мікроконтролер (МК) або однокристальна мікро-ЕОМ (ОМЕВМ) – це однокристальна МПС, орієнтована на виконання функцій обробки, логічного аналізу і управління різними пристроями. ОМЕВМ сімейства МК 51 має: 32 РЗП; 28 визначених користувачем програмно-керованих прапорців; 21 восьми-розрядних регістрів спеціальних функцій [3]. До трьох регістрів можна адресуватися як до 16-розрядних.
Основним функціональним компонентом ядра мікроконтролера є арифметико-логічний блок (АЛБ), що забезпечує виконання арифметичних і логічних операцій.
АЛБ| складається з 8-розрядного АЛП| (суматора), регістра акумулятора (А), двох буферних регістрів (БРАЛУ, БРА), додаткового регістра (В), регістра стану програми (PSW), ПЗП-констант. Програмно доступними регістрами є регістр А, PSW, В.
Регістр А – є 8-розрядним регістром, призначеним для прийняття і зберігання результату, що отримується під час виконання арифметичних і логічних операцій, а також операцій пересилання.
Регістр PSW призначений для зберігання інформації про стан АЛБ під час виконання програми.
Регістр В – 8-розрядний регістр, використовуваний під час операцій множення і ділення. Для інших команд він може розглядатися як додатковий регістр загального призначення.
Рисунок 3.1 – Формат регістра PSW
На рис. 3.1 прийняті позначення розрядів регістра стану програми (PSW) визначають: P – ознака паритету парності; VO– ознака прапорця переповнювання; RS0, RS1 – вибір банку РЗП; F0 – прапорець користувача; AC – ознака додаткового перенесення; CY – ознака перенесення; PSW.1 – резервний містить тригер доступний за записом («0» і «1») і читанням, який може використовувати програміст.
У мікроконтролері сімейства МК| 51 є пам'ять програм і пам'ять даних.
Пам'ять програм – призначена для зберігання програм і має окремий від пам'яті даних адресний простір об'ємом 64 Кбайт, причому для деяких ОМЕВМ КР1816ВЕ51, КР1830ВЕ51 і КМ1816ВЕ751 частина пам'яті з адресами 0000 – 0FFF розташована на кристалі ОМЕВМ. Пам'ять програм доступна тільки за читанням і має байтову організацію об'ємом до 64 Кбайт.
Пам'ять даних – призначена для прийняття, зберігання і видачі інформації, використовуваної в процесі виконання програми. Структура пам'яті даних та її розподіл подано [3,7,8].
Важливим регістром, який використовується під час виконання ряду команд, є регістр покажчик стека (SP). Він є 8-розрядним регістром, призначеним для прийняття і зберігання адреси осередку стека, до якого було останнє звертання. Під час виконання, наприклад команд LCALL, ACALL вміст покажчика стека збільшується на 2 (SP=SP+2), а під час виконання команд RET, RETI вміст покажчика стека зменшується на 2 (SP=SP-2).
Основна функція мікроконтролера (МК) – обробка інформації, логічний аналіз і управління. Обробка інформації проводиться МК згідно з програмою, яка є сукупністю (послідовністю) команд, що скерувують роботу пристрою управління.
Під командою розуміють сукупність відомостей, необхідних процесорному елементу для виконання певної дії під час реалізації програми. Безліч інструкцій, що реалізовуються в конкретному мікроконтролері, утворює його систему команд, яка і служить базою для написання програм. Команда, як правило, складається з двох частин: коду операції і адреси. Код операції – повідомляє МП, що робити, а адреса – вказує місце положення даних тих, що беруть участь в операції. Точний формат команди залежить від конкретної операції, яку необхідно виконати (рис. 3.2). Наприклад, команда
MOV A,R2
|
КОП |
Ад |
|
||||||
|
0 |
1 |
D |
D |
D |
S |
S |
S |
|
Рисунок 3.2 – Структура формату команди MOV A,R2
На рис. 3.2 SSS – джерело, DD – приймач інформації.
Синтаксис більшості команд асемблерної мови ОМЕВМ складається з мнемонічного позначення функції, слідом за яким йдуть операнди, вказуючи методи адресації і типи даних. Хоча мнемокоди однакових команд часто різні для різних МП| і МК|, конструкція запису команд асемблера однакова для всіх мов асемблерного рівня.
Мовою Асемблера кожна команда записується на одному рядку і має чотири поля: 1 поле мітки; 2 поле коду операції; 3 поле операнда; 4 поле коментаря. З усіх полів у кожному рядку тільки поле коду має бути непорожнім.
MOV A,Rо ; A:=(Ro)
SJMP DEL
......
DEL: SETB 3FH ; [3FH]:=1
Команди виконуються за один, два або чотири (множення і ділення) машинні цикли. При частоті тактового генератора, рівній 12 Мгц, одноциклові команди виконуються за 1 мкс, двоциклові — за 2 мкс і т.д.
У командах можуть бути різні способи адресації операндів-джерел.
Регістрова адресація використовується для звертання до восьми робочих регістрів вибраного банку робочих регістрів (ці самі регістри можуть бути вибрані за допомогою прямої адресації і побічно-регістрової адресації як звичайні осередки внутрішнього ОЗУ даних).
Приклад: MOV A,Rn ; де n=0-7; (A):=(Rn).
Регістрова адресація використовується також для звертання до регістрів А, В, АВ (здвоєному регістру), DPTR і до прапорця перенесення С. Використання регістрової адресації дозволяє одержувати двобайтовий еквівалент трибайтових команд прямої адресації.
Пряма адресація використовується для звертання до елементів внутрішньої пам'яті (ОЗУ) даних (0—127) і до регістрів спеціального призначення.
Приклад: MOV A,40H; (A):=[40H].
Пряма побітова адресація також використовується для звертання до 128 біт, що окремо адресуються, розташованих в осередках з адресами 20Н—2FH і до біт регістрів спеціального призначення, що окремо адресуються.
Приклад: CLR 7FH ; [7FH]:=0.
Побічно-регістрова адресація використовується для звертання до осередків внутрішнього ОЗУ даних. Як регістри-покажчики використовується регістри R0, R1 вибраного банку регістрів.
Приклад: MOV A,@Ro; (A):=[(Ro)]].
У командах PUSH і POP використовується вміст покажчика стека (SP).
Побічно-регістрова адресація використовується також для звертання до зовнішньої пам'яті даних. В цьому випадку за допомогою регістрів-покажчиків R0 і R1 (вибраного банку робочих регістрів) вибирається осередок з блока в 256 байт зовнішньої пам'яті даних. 16-розрядний покажчик даних (DPTR) може бути використаний для звертання до будь-якого осередку адресного простору зовнішньої пам'яті даних об'ємом до 64 Кбайт.
Приклад: MOVX A,@Ri ; (A):=((Ri)), де i=0,1
MOVX A,@DPTR, : (A):=[(DPTR)].
Безпосередня адресація дозволяє вибрати з адресного простору пам'яті програм константи, зазначені в команді.
Приклад: MOV A,#data; (A):=<data8>.
Побічно-регістрова адресація за сумою: базовий регістр плюс індексний регістр (вміст акумулятора А) спрощує перегляд таблиць, зашитих у пам'яті програм. Будь-який байт з таблиці може бути вибраний за адресою, визначеною сумою вмісту DPTR або PC і вмісту А.
Приклад: MOVC A,@A+DPTR; : (A):=[(A)+(DPTR)].
