
- •1 Загальні відомості
- •6 Відладка програми
- •7 Налаштування параметрів імітатора
- •ATmega128, aTmega128l 8-розрядний avr-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт Особливості:
- •Короткий огляд
- •Завдання:
- •Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Завдання:
- •Часові діаграми таймера-лічильника 0
- •Опис регістрів 8-розрядного таймера-лічильника 0
- •Асинхронна робота таймера-лічильника 0
- •Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
- •Завдання:
- •Завдання:
- •Набір інструкцій
Короткий огляд
ATmega128 - малопотужний 8-розр. КМОП мікроконтролер, заснований на розширеній AVR RISC-архітектурі. За рахунок виконання більшості інструкцій за один машинний цикл ATmega128 досягає продуктивності 1 млн. операцій у секунду / МГц, що дозволяє проектувальникам систем оптимізувати співвідношення енергоспоживання і швидкодії
Ядро AVR поєднує багатий набір інструкцій з 32 універсальними робочими регістрами. Усі 32 регістра безпосередньо підключені до арифметико-логічного пристрою (АЛУ), який дозволяє вказати два різних регістра в одній інструкції і виконати її за один цикл. Дана архітектура володіє більш ефективним кодом за рахунок досягнення продуктивності в 10 разів вище в порівнянні зі звичайними CISC-мікроконтролерами.
ATmega128 містить такі елементи: 128 кбайт внутрішньосистемної програмованої флеш-пам'яті з підтримкою читання під час запису, 4 кбайт ЕСППЗУ, 4 кбайт статичного ОЗУ, 53 лінії універсального вводу-виводу, 32 універсальних робочих регістри, лічильник реального часу (RTC), чотири гнучких таймера-лічильника з режимами порівняння і ШИМ, 2 УСАПП, двухпроводной послідовний інтерфейс орієнтований на передачу байт, 8-канальний 10-розр. АЦП з опціональним диференціальним входом з програмованим коефіцієнтом підсилення, програмований сторожовий таймер з внутрішнім генератором, послідовний порт SPI, випробувальний інтерфейс JTAG сумісний зі стандартом IEEE 1149.1, який також використовується для доступу до вбудованої системи відладці і для програмування, а також шість програмно вибираних режимів зменшення потужності. Режим холостого ходу (Idle) зупиняє ЦПУ, але при цьому підтримуючи роботу статичного ОЗУ, таймерів-лічильників, SPI-порту і системи переривань. Режим вимкнення (Powerdown) дозволяє зберегти вміст регістрів, при зупиненому генераторі і виключенні вбудованих функцій до наступного переривання або апаратного скидання. В економічному режимі (Power-save) асинхронний таймер продовжує роботу, дозволяючи користувачеві зберегти функцію відліку часу в той час, коли інша частина контролера знаходиться в стані сну. Режим зниження шумів АЦП (ADC Noise Reduction) зупиняє ЦПУ і всі модулі введення-виведення, крім асинхронного таймера і АЦП для мінімізації імпульсних шумів у процесі перетворення АЦП. У черговому режимі (Standby) кварцовий / резонатора генератор продовжують роботу, а інша частина мікроконтролера знаходиться в режимі сну. Даний режим характеризується малою споживаною потужністю, але при цьому дозволяє досягти найшвидшого повернення в робочий режим. У розширеному черговому режимі (Extended Standby) основний генератор і асинхронний таймер продовжують працювати.
Мікроконтролер проводиться за технологією високощільної енергонезалежної пам'яті компанії Atmel. Вбудована внутрішньосистемної програмована флеш-пам'ять дозволяє перепрограмувати пам'ять програм безпосередньо усередині системи через послідовний інтерфейс SPI за допомогою простого програматора або за допомогою автономної програми в завантажувальному секторі. Завантажувальна програма може використовувати будь-який інтерфейс для завантаження прикладної програми у флеш-пам'ять. Програма в завантажувальному секторі продовжує роботу в процесі оновлення прикладної секції флеш-пам'яті, тим самим підтримуючи двухопераціонность: читання під час запису. За рахунок поєднання 8-розр. RISC ЦПУ з внутрішньосистемної самопрограмміруемой флеш-пам'яттю в одній мікросхемі ATmega128 є потужним микроконтроллером, що дозволяє досягти високого ступеня гнучкості й ефективної вартості при проектуванні більшості додатків вбудованого керування.
ATmega128 підтримується повним набором програмних і апаратних засобів для проектування, в т.ч.: Сі-компілятори, макроассемблера, програмні відладчики/симулятори, внутрішньосистемні емулятори і оцінні набори.
Лабораторна робота №1 «Освоєння середовища AVR Studio і способів відладки на елементарному прикладі»
Ціль роботи
вивчення AVR Studio
вивчення принципів написання програм на мові асемблер
вивчення найпростіших команд ATMEGA128
Програма виконання роботи
- Самостійно ознайомитися з методикою роботи в AVR Studio
- Скласти алгоритм програми
- Відлагодити програму в AVR Studio
- Самостійно перевірити виконання програми
- Підготувати звіт по лабораторній роботі
Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
Assembler AVR працює з файлами, які складаються з мнемонік команд, міток і директив. Мнемоніки інструкцій і директиви часто мають свої операнди.
Кожна лінійка має бути обмеженою до 120 символів.
Кожна лінійка може починатися з мітки, яка є символьним рядком, який завершується двокрапкою. Мітки використовуються як аргумент в командах переходу ,а також, як ім’я змінної в Program Memory і RAM.
Рядок може мати такі чотири форми:
[мітка:] директива [операнди директиви] [коментар]
[мітка:] інструкція [операнди інструкції] [коментар]
Коментар
Пустий рядок
У квадратних дужках вказується інформація яка не обов’язково має бути присутньою у рядку.
Коментар має мати таку форму
; [Текст]
Додатково AVRASM2 сприймає коментарі, які написані у C-стилі.
AVRASM2 допусткає декілька команд і диркттив у одному рядку, але це не рекомендується.
По замовчування Assembler AVR не є чутливим до регістру клавіатури, якщо опціями не встановлено протилежне
Способи представлення чисел:
Цілі числа можна представляти у таких форматах:
- десяткова (по замовчуванню): 10, 255
- шістнадцяткова (дві форми запису): 0x0a, $0a, 0xff, $ff
- двійкова: 0b00001010, 0b11111111
- вісьміркова (першим символом є нуль): 010, 077
Директиви.
Асемблер підтримує велику кількість директив. Директиви не транслюються прямо у машинні коди. Вони використовуються для впорядкування програми у пам’яті, визначають макроси, ініціалізують пам’ять і т.д. Повний список директив можна отримати з допомоги до AVR Studio. Директива починається з значка крапки «.»
Директива CSEG – «Сегмент програми»
Ця директива визначає початок сегменту програми. Асемблерний файл може складатися з декількох сегментів програми, які з’єднуються в один сегмент програми коли асемблюються. По замовчуванню тип сегменту є «програма». Сегмент програми має власний адресу розміщення, яка має розмір слова. Директива ORG може бути використана для розміщення програми і констант у специфічне місце пам’яті програм. Ця директива не потребує додаткових параметрів.
Синтаксис:
.CSEG
Директива DSEG – «Сегмент даних»
Ця директива визначає початок сегменту даних. Асемблерний файл може складатися з декількох сегментів даних, які з’єднуються в один сегмент даних коли асемблюються. Сегмент даних, по-нормальному, тільки складається з директив BYTE (і міток). Сегмент даних має власний адресу розміщення, яка має розмір байту. Директива ORG може бути використана для розміщення змінних у специфічне місце пам’яті даних (SRAM). Ця директива не потребує додаткових параметрів.
Синтаксис:
.DSEG
Директива ORG – «Встановлення початку програми»
Ця директива встановлює лічильник в абсолютне значення. Значення встановлення береться як параметр. Якщо ця директива подається в сегменті даних, тоді це є адреса розміщення у SRAM; якщо ця директива подається у сегменті програм, тоді це є адреса розміщення пам’яті програм; аналогічно з сегментом EEPROM.
По замовчуванню величина адреси розміщення для пам’яті програм і EEPROM є нуль, і для SRAM є адреса, яка слідує за кінцем області регістрів вводу/виводу (0x60 для мікроконтролерів без розширених адрес вводу/виводу, або 0x100 і більше для мікроконтролерів з розширеним адресним простором регістрів вводу/виводу). Треба мати на увазі, що адреса розміщення для SRAM і EEPTOM визначається байтами, у той час як для пам’яті програм адреса розміщення визначається словами. Також треба мати на увазі, що в деяких мікроконтролерах відсутнє SRAM і/чи EEPROM.
Синтаксис:
.ORG вираз
Інструкції:
Асемблер бере мнемоніки інструкцій з набору інструкцій, який можна отримати або з допомоги до AVR Studio, або з документації.
Всі інструкції поділяються на такі групи:
- арифметичні і логічні інструкції
- інструкції переходу
- інструкції переміщення даних
- бітові і біт-оціночні інструкції
Для операндів інструкцій будемо приймати такі скорочення:
Rd – регістр призначення (і джерело) у наборі регістрів
Rr – регістр джерело у наборі регістрів
b – константа (0-7), може бути вираз, результатом якого є константа
s – константа (0-7), може бути вираз, результатом якого є константа
P – константа (0-31/63), може бути вираз, результатом якого є константа
K6 – константа (0-63), може бути вираз, результатом якого є константа
K8 – константа (0-255), може бути вираз, результатом якого є константа
k – константа, величина якої залежить від того, яка інструкція. Може бути вираз, результатом якого є константа
q константа (0-63), може бути вираз, результатом якого є константа
Rd1 – R24, R26, R28, R30 Для інструкцій ADIW і SBIW
X, Y, Z – регістри непрямої адресації (X= R27:R26, Y=R29:R28, Z=R31:R30)
Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі
LDI – «Безпосереднє завантаження»
Ця інструкція завантажує 8-и бітну константу в регістри R16÷R31
Rd ← K
Синтаксис |
Операнди |
Лічильник команд |
LDI Rd,K |
16 ≤ d ≤ 31, 0 ≤ K ≤ 255 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
ldi r30, $F0
NOP – «Немає операції»
Ця інструкція займає цілий цикл ядра мікроконтролерах і при цьому не виконує ніяких дій
Синтаксис |
Операнди |
Лічильник команд |
NOP |
Нема |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
nop
MOV – «Копіювання регістру»
Ця інструкція робить копію одного регістра у інший. Регістр джерело Rr залишається незмінним, у той час, як регістр призначення Rd завантажується копією регістра джерела Rr
Rd ← Rr
Синтаксис |
Операнди |
Лічильник команд |
MOV Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
mov r16, r0
CP – «Порівняння регістрів»
Ця інструкція здійснює порівняння двох регістрів Rd і Rr. Ні один регістр при цьому не змінюється. Всі інструкції переходу з умовою можуть бути використані після цієї інструкції
Rd - Rr
Синтаксис |
Операнди |
Лічильник команд |
CP Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Наприклад:
cp r4, r19
BRLO – «Перейти, якщо менше (беззнекова)»
Інструкція умовного відносного переходу. Вона перевіряє БІТ ПЕРЕНОСУ (С - Carry flag - англ.) і здійснює відносний перехід (відносно регістра PC – Program Counter - англ.) якщо C встановлений. Якщо ця інструкція виконується зразу після будь-яких цих інструкцій CP, CPI, SUB чи SUBI – перехід відбудеться, якщо беззнакове ціле число представлене у Rd було меншим за беззнакове ціле число представлене у Rr. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBS 0,k)
якщо Rd < Rr (C = 1) тоді PC ← PC + k + 1 інакше PC ← PC + 1
Синтаксис |
Операнди |
Лічильник команд |
BRLO k |
-64 ≤ k ≤ +63 |
PC ← PC + k + 1 PC ← PC + 1, якщо умова не справджується |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
loop: ldi r20, $20
cpi r19, $10
brlo loop
nop
BRSH – «Перейти, якщо рівне або більше (беззнекова)»
Інструкція умовного відносного переходу. Вона перевіряє БІТ ПЕРЕНОСУ (С - Carry flag - англ.) і здійснює відносний перехід (відносно регістра PC – Program Counter - англ.) якщо C не встановлений. Якщо ця інструкція виконується зразу після будь-яких цих інструкцій CP, CPI, SUB чи SUBI – перехід відбудеться, якщо беззнакове ціле число представлене у Rd було більшим або рівним за беззнакове ціле число представлене у Rr. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBC 0,k)
якщо Rd ≥ Rr (C = 0) тоді PC ← PC + k + 1 інакше PC ← PC + 1
Синтаксис |
Операнди |
Лічильник команд |
BRSH k |
-64 ≤ k ≤ +63 |
PC ← PC + k + 1 PC ← PC + 1, якщо умова не справджується |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
loop: ldi r20, $20
cpi r19, $10
brsh loop
nop
RJMP – «Відносний перехід»
Інструкція здійснює відносний перехід по адресі у інтервалі PC – 2K + 1 і PC +2K (слів). У асемблері мітки використовуються замість відносних операцій. Для AVR мікроконтролерів з пам’яттю програм не більшою 4К слів (8К байт) ця інструкція може адресувати пам’ять з будь-якого місця програми (будь-якої комірки пам’яті програм).
PC ← PC + k + 1
Синтаксис |
Операнди |
Лічильник команд |
Стек |
RJMP k |
-2K ≤ k ≤ 2K |
PC ← PC + k + 1 |
Без змін |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
- |
- |
- |
- |
- |
Наприклад:
rjmp OK
OK: nop