
- •1 Загальні відомості
- •6 Відладка програми
- •7 Налаштування параметрів імітатора
- •ATmega128, aTmega128l 8-розрядний avr-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт Особливості:
- •Короткий огляд
- •Завдання:
- •Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Завдання:
- •Часові діаграми таймера-лічильника 0
- •Опис регістрів 8-розрядного таймера-лічильника 0
- •Асинхронна робота таймера-лічильника 0
- •Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
- •Завдання:
- •Завдання:
- •Набір інструкцій
Завдання:
Написати програму з використання AVR Studio і перевірити її у покроковому режимі:
|
.CSEG |
|
|
.ORG 0x0 |
|
|
|
|
|
ldi R16,55 |
; Безпосереднє завантаження числа |
|
ldi R17,66 |
; Безпосереднє завантаження числа |
k: |
nop |
; Нема операції |
|
mov R0,R17 |
; Копіювання регістра R17 у R0 |
|
cp R16,R0 |
; Порівняння двох регістрів R16 – R0 |
|
brlo stop |
; Перехід на мітку stop якщо менше |
|
brsh k |
; Перехід на мітку k якщо більше або рівне |
stop: |
rjmp stop |
; Бзумовний перехід на мітку stop |
|
|
|
|
.DSEG |
|
|
.ORG 0x100 |
|
Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
вивчення математичних команд асемблера мікроконтролера AVR
вивчення логічних команд асемблера мікроконтролера AVR
Програма виконання роботи
- Провести дослідження з допомогою AVR Studio виконання команд ADD, ADC, SUB, SBC, SUBI, SBCI, ADIW, SBIW
- З допомогою вікна Workspace процесора AVR Studio дослідити вплив команд на стани бітів-стану
- Виявити і дослідити подібність і відмінність пар команд ADD і ADC; SUB і SBC при встановленому/скинутому біті переносу С.
- З допомогою AVR Studio дослідити виконання команд ANDI, ORI, LSL, LSR
- На основі досліджень скласти алгоритм додавання і віднімання двобайтних цілих чисел.
Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
Регістр статусу
Регістр статусу (SREG) є складовою частиною ядра AVR мікроконтролера. SREG містить інформацію про результати попередньої арифметичної інструкції. Цю інформацію можна використовувати при побудові умовних операцій. Треба мати на увазі, що SREG обновлюється після кожної АЛП (арифметично-логічний пристрій) операцій.
SREG автоматично не зберігається, коли мікроконтролера переходить на обробник переривання і не відновлюється після виходу з обробника переривань. Це треба виконати з програми.
AVR регістр статусу – SREG- має такий вигляд
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
I |
T |
H |
S |
V |
N |
Z |
C |
Біт 7 – I – «Глобальний дозвіл переривань»
Встановлення цього біту дозволяє генерацію переривань мікроконтролера. Коли цей біт є очищений, то переривання мікроконтролером не будуть генеруватися, навіть якщо є умова їх генерації. Цей біт очищується мікроконтролером після того, як переривання відбулося, але його можна встановити інструкцією RETI – при цьому буде можливість генерації наступних переривань. Цей біт може бути встановлений командою SEI і скинутий інструкцією CLI.
Біт 6 – T – «Схов скопійованого біту»
Інструкції копіювання біту BLD (Bit LoaD) і BST (Bit STore) використовує T-біт як джерело, або призначення для опрацьованого біту. Біт з будь-якого регістру з набору регістрів може мути скопійований в Т-біт інструкцією BST і Т-біт може бути скопійований в будь-який біт будь-якого регістру з набору регістрів інструкцією BLD.
Біт 5 – H – «Біт переносу через тетраду»
Цей біт сигналізує перенос через тетроду у деяких арифметичних операціях. Цей біт використовується в BCD (двійково-десятковій) арифметиці.
Біт 4 – S – «Біт знаку»
Цей біт є завжди результатом виключаю чого або між бітом від’ємного числа (N) і бітом переповнення додаткового коду(V).
Біт 3 – V – «Біт переповнення додаткового коду»
Цей біт використовується у арифметиці, яка працює з додатковим кодом.
Біт 2 – N – «Біт від’ємного числа»
Цей біт сигналізує, що результатом арифметичної чи логічної операції є від’ємне число.
Біт 1 – N – «Біт нуля»
Цей біт сигналізує, що результатом арифметичної чи логічної операції є нуль.
Біт 0 – С – «Біт переносу»
Цей біт сигналізує, що в результаті виконання арифметичної чи логічної операції виник перенос старшого розряду.
Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі
ADD – «Додавання без врахування переносу»
Додавання двох регістрів без врахування біту переносу C і поміщення результату у регістр призначення Rd
Rd ← Rd + Rr
Синтаксис |
Операнди |
Лічильник команд |
ADD Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 31, у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення2, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
add r1,r2 ;Додається r2 до r1 (r1 = r1 + r2)
ADC – «Додавання з врахуванням переносу»
Додавання двох регістрів і вмістимого біту C і поміщення результату у регістр призначення Rd
Rd ← Rd + Rr + C
Синтаксис |
Операнди |
Лічильник команд |
ADC Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 3, у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
;Додавання r1:r0 від r3:r2
add r2,r0 ;Додається молодших байт двобайтного числа
adс r3,r1 ;Додається з переносом старших байт двобайтного числа
SUB – «Віднімання без врахування переносу»
Віднімання двох регістрів без врахування біту переносу C і поміщення результату у регістр призначення Rd
Rd ← Rd - Rr
Синтаксис |
Операнди |
Лічильник команд |
SUB Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 3 у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
sub r1,r2 ;Віднімання r2 від r1 (r1 = r1 - r2)
SBC – «Віднімання з врахуванням переносу»
Віднімання двох регістрів і вмістимого біту C і поміщення результату у регістр призначення Rd
Rd ← Rd - Rr - C
Синтаксис |
Операнди |
Лічильник команд |
SBC Rd,Rr |
0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 3, у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
;Віднімання r1:r0 від r3:r2
sub r2,r0 ;Віднімання молодших байт двобайтного числа
sbс r3,r1 ;Віднімання з переносом старших байт двобайтного числа
SUBI – «Віднімання константи»
Віднімання константи від регістра і поміщення результату у регістр призначення Rd. Ця інструкція працює з регістрами R16 ÷ R31 і дуже добре з регістрами непрямої адресації X, Y і Z.
Rd ← Rd - K
Синтаксис |
Операнди |
Лічильник команд |
SUBI Rd,K |
16 ≤ d ≤ 31, 0 ≤ K ≤ 255 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 3 у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
subi r22,$11 ;Віднімання $11 від r22
SBCI – «Віднімання константи з врахуванням переносу»
Віднімання константи і вмістимого біту C від регістра і поміщення результату у регістр призначення Rd
Rd ← Rd - Rr - C
Синтаксис |
Операнди |
Лічильник команд |
SBCI Rd,K |
16 ≤ d ≤ 31, 0 ≤ K ≤ 255 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Встановлюється якщо відбувся перенос розряду з біту 3, у іншому випадку – скидається.
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
;Віднімання $4F23 від r17:r16
subi r16,$23 ;Віднімання молодших байт двобайтного числа
sbсi r17,$4F ;Віднімання з переносом старших байт двобайтного числа
ADIW – «Додавання константи до слова3»
Додавання числа (0 – 63) до регістрової пари і поміщення результату у регістрову пару. Ця інструкція виконується на чотирьох регістрових парах з найбільшими номерами і дуже добре підходить для операцій над регістрами непрямої адресації X, Y і Z.
Ця інструкція не підтримується всіма без винятку AVR мікроконтролерами.
Rd+1:Rd ← Rd+1:Rd + K
Синтаксис |
Операнди |
Лічильник команд |
ADIW Rd+1:Rd,K |
d Є {24, 26, 28, 30}, 0 ≤ K ≤ 63 |
PC ← PC + 1 |
Вплив на регістри статусу4:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
<> |
<> |
<> |
<> |
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
ADIW R24:R25,1 ;Додається 1 до r25:r24
SBIW – «Віднімання константи від слова»
Віднімання числа (0 – 63) від регістрової пари і поміщення результату у регістрову пару. Ця інструкція виконується на чотирьох регістрових парах з найбільшими номерами і дуже добре підходить для операцій над регістрами непрямої адресації X, Y і Z.
Ця інструкція не підтримується всіма без винятку AVR мікроконтролерами.
Rd+1:Rd ← Rd+1:Rd - K
Синтаксис |
Операнди |
Лічильник команд |
SBIW Rd+1:Rd,K |
d Є {24, 26, 28, 30}, 0 ≤ K ≤ 63 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
<> |
<> |
<> |
<> |
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $0000, у іншому випадку – скидається.
Біт C:
Встановлюється якщо відбувся перенос розряду з MSB, у іншому випадку – скидається.
Наприклад:
sbiw r25:r24,1 ;Віднімання 1 до r25:r24
ANDI – «Логічне І з константою»
Здійснює логічне І між вмістимим регістру Rd і константи – результат поміщається у регістр призначення Rd.
Rd ← Rd & K
Синтаксис |
Операнди |
Лічильник команд |
ANDI Rd,K |
16 ≤ d ≤ 31, 0 ≤ K ≤ 255 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
- |
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Наприклад:
andi r17,$0F ;Очищення старшої тетроди регістру r17
ORI – «Логічне АБО з константою»
Здійснює логічне АБО між вмістимим регістру Rd і константи – результат поміщається у регістр призначення Rd.
Rd ← Rd | K
Синтаксис |
Операнди |
Лічильник команд |
ORI Rd,K |
16 ≤ d ≤ 31, 0 ≤ K ≤ 255 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
0 |
<> |
<> |
- |
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
Очищується.
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Наприклад:
ori r17,$F0 ;Встановлення старшої тетроди регістру r17 у одиниці
LSL – «Логічний зсув вліво»
Зміщення всіх біт в регістрі Rd вліво5. Біт 7 записується в біт переносу C. Цю операцію зручно використовувати для множення знакового і без знакового цілого числа на два.
C ← b7-------b0 ← 0
Синтаксис |
Операнди |
Лічильник команд |
LSL Rd |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
<> |
<> |
<> |
<> |
<> |
<> |
Біт Н:
Біт 3
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
V = N ^ С. (Для N і C після зміщення).
Біт N:
Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється, якщо перед зміщенням MSB був встановлений, у іншому разі очищується
Наприклад:
lsl r0 ;Множення r0 на 2
LSR – «Логічний зсув вправо»
Зміщення всіх біт в регістрі Rd вправо. Біт 7 очищається. Біт 0 записується в біт переносу C. Цю операцію зручно використовувати для ділення знакового і без знакового цілого числа на два.
0 → b7-------b0 → 0
Синтаксис |
Операнди |
Лічильник команд |
LSR Rd |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
Вплив на регістри статусу:
I |
T |
H |
S |
V |
N |
Z |
C |
- |
- |
- |
<> |
<> |
0 |
<> |
<> |
Біт S:
S = N ^ V. Використовується для тестування знаку результату.
Біт V:
V = N ^ С. (Для N і C після зміщення).
Біт N:
Cкидається.
Біт Z:
Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.
Біт C:
Встановлюється, якщо перед зміщенням LSB був встановлений, у іншому разі очищується
Наприклад:
lsl r0 ;Ділення r0 на 2