- •1 Загальні відомості
- •6 Відладка програми
- •7 Налаштування параметрів імітатора
- •ATmega128, aTmega128l 8-розрядний avr-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт Особливості:
- •Короткий огляд
- •Завдання:
- •Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Завдання:
- •Часові діаграми таймера-лічильника 0
- •Опис регістрів 8-розрядного таймера-лічильника 0
- •Асинхронна робота таймера-лічильника 0
- •Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
- •Завдання:
- •Завдання:
- •Набір інструкцій
Завдання:
1. Проініціалізувати таблицю переривань і стек
2. Здійснити стартову настройку таймера лічильника 0
2.1 Регістр порогу порівняння OCR0 рівним 78 (десяткове число)
2.2 Регістр управління таймером-лічильником 0 TCCR0
2.2.1 Біт примусової установка результату порівняння FOC0 = 0b0
2.2.2 Режим Скидання при збігу (CTC): WGM01, WGM00 = 0b10
2.2.3 Вихід OC0 відключений: COM01, COM00 = 0b00
2.2.4 Тимчасово таймер відключений: CS02, CS01, CS00 = 0b000
2.3 У Регістр маски переривань встановити біт OCIE0 – дозвіл генерування переривань при умові, що регістр таймера-лічильника TCNT0 зрівняється з регістром порогу порівняння OCR0
2.4 Запускаємо таймер лічильник 0 з встановленням подільника частоти 256 CS02, CS01, CS00 = 0b110
2.5 Встановити біт глобального дозволу переривань (I-біт)
3. Написати обробник неочікуваного переривання55
3.1 Вийти з обробника переривання
4. Написати обробник переривання коли регістр таймера-лічильника TCNT0 зрівняється з регістром порогу порівняння OCR0
4.1 Зберегти регістр статусу у СТЕК
4.1.1 Завантажити регістр статусу у регістр загального призначення
4.1.2 Записати даний регістр загального призначення у стек
4.2 Тут власне кажучи мав би бути обробник переривання, який ми лишаємо пустим, або можна вставити якісь свої команди для «покращення» освоєння теми переривань у AVR мікроконтролерах
4.3 Відновити регістр статусу зі СТЕК-у
4.1.2 «Виштовхати» вмістиме стеку (збережений регістр статусу) зі стеку в регістр загального призначення
4.1.1 Записати у регістр статусу даний регістр загального призначення
4.4 Вийти з обробника переривання
5. Реалізувати безперервний цикл
6. Хід виконання програми аналогічний, як у попередній лабораторній роботі № 9 «Вивчення програмування таймера мікроконтролера AVR» 56
Набір інструкцій
Мнемоніка |
Операнди |
Опис |
Дія |
Біти статусу |
Кількість машинних циклів |
Описано у лабораторній роботі |
Арифметичні і логічні інструкції |
|
|||||
ADD |
Rd, Rr |
Додавання без врахування переносу |
Rd <— Rd + Rr |
Z,C,N,V,H |
1 |
2 |
ADC |
Rd, Rr |
одавання з врахуванням переносу |
Rd <— Rd + Rr + C |
Z,C,N,V,H |
1 |
2 |
ADIW |
Rdl,K |
Додавання константи до слова |
Rdh:Rdl <— Rdh:Rdl + K |
Z,C,N,V,S |
2 |
2 |
SUB |
Rd, Rr |
Віднімання без врахування переносу |
Rd <— Rd - Rr |
Z,C,N,V,H |
1 |
2 |
SUBI |
Rd, K |
Віднімання константи |
Rd <— Rd - K |
Z,C,N,V,H |
1 |
2 |
SBC |
Rd, Rr |
Віднімання з врахуванням переносу |
Rd <— Rd - Rr - C |
Z,C,N,V,H |
1 |
2 |
SBCI |
Rd, K |
Віднімання константи з врахуванням переносу |
Rd <— Rd - K - C |
Z,C,N,V,H |
1 |
2 |
SBIW |
Rdl,K |
Віднімання константи від слова |
Rdh:Rdl <— Rdh:Rdl-K |
Z,C,N,V,S |
2 |
2 |
AND |
Rd, Rr |
Логічне І |
Rd <— Rd · Rr |
Z,N,V |
1 |
9 |
ANDI |
Rd, K |
Логічне І з константою |
Rd <— Rd · K |
Z,N,V |
1 |
2 |
OR |
Rd, Rr |
Логічне АБО |
Rd <— Rd v Rr |
Z,N,V |
1 |
9 |
ORI |
Rd, K |
Логічне АБО з константою |
Rd <— Rd v K |
Z,N,V |
1 |
2 |
EOR |
Rd, Rr |
Логічне ВИКЛЮЧАЮЧЕ АБО |
Rd <— Rd Е Rr |
Z,N,V |
1 |
9 |
COM |
Rd |
Виконання порозрядного доповнення до одиниці (зворотній код) |
Rd <— $FF - Rd |
Z,C,N,V |
1 |
9 |
NEG |
Rd |
Виконання порозрядного доповнення до двох (додатковий код) |
Rd <— $00 - Rd |
Z,C,N,V,H |
1 |
9 |
SBR |
Rd, K |
Встановлення біт (біту) в регістрі |
Rd <— Rd v K |
Z,N,V |
1 |
8 |
CBR |
Rd, K |
Очистка біт (біту) в регістрі |
|
Z,N,V |
1 |
8 |
INC |
Rd |
Інкрементація |
Rd <— Rd + 1 |
Z,N,V |
1 |
5 |
DEC |
Rd |
Декрементація |
Rd <— Rd - 1 |
Z,N,V |
1 |
5 |
TST |
Rd |
Тестування на НУЛЬ або МІНУС |
|
Z,N,V |
1 |
4 |
CLR |
Rd |
Очистка регістру |
|
Z,N,V |
1 |
3 |
SER |
Rd |
Вствновлення у регістрі всіх біт у одиниці |
Rd <— $FF |
Нема |
1 |
|
MUL |
Rd, Rr |
Множення беззнакових чисел |
R1:R0 <— RdxRr |
Z, C |
2 |
7 |
MULS |
Rd, Rr |
Множення знакових чисел |
R1:R0 <— RdxRr |
Z, C |
2 |
7 |
MULSU |
Rd, Rr |
Множення знакового числа з беззнаковим числом |
R1:R0 <— Rd x Rr |
Z, C |
2 |
7 |
FMUL |
Rd. Rr |
Множення беззнакових дробових чисел |
R1:R0 <— (RdxRr) << 1 |
Z, C |
2 |
7 |
FMULS |
Rd, Rr |
Множення знакових дробових чисел |
R1:R0 <— (RdxRr) << 1 |
Z, C |
2 |
7 |
FMULSU |
Rd, Rr |
Множення знакового дробового числа із беззнаковим дробовим числом |
R1:R0 <— (RdxRr) << 1 |
Z, C |
2 |
7 |
Інструкції переходу |
|
|||||
RJMP |
k |
Відносний перехід |
PC <— PC + k +1 |
Нема |
2 |
1 |
IJMP |
|
Відносний перехід по вказівнику Z |
PC <— Z |
Нема |
2 |
|
JMP |
k |
Перехід по безпосередній адресі |
PC <— k |
Нема |
3 |
10 |
RCALL |
k |
Відносний перехід до підпрограми |
PC <— PC + k + 1 |
Нема |
3 |
4 |
ICALL |
|
Відносний перехід до підпрограми по вказівнику Z |
PC <— Z |
Нема |
3 |
|
CALL |
k |
Перехід по підпрограми |
PC <— k |
Нема |
4 |
|
RET |
|
Вихід з підпрограми |
PC <— STACK |
Нема |
4 |
4 |
RETI |
|
Вихід з переривання |
PC <— STACK |
I |
4 |
10 |
CPSE |
Rd,Rr |
Зрівнювання і пропуск, якщо рівне if (Rd = Rr) |
PC <— PC + 2 или 3 |
Нема |
1/2/3 |
|
CP |
Rd,Rr |
Порівняння регістрів |
Rd-Rr |
Z, N,V,C,H |
1 |
1 |
CPC |
Rd,Rr |
Порівняння регістрів із врахуванням біту переносу |
Rd - Rr-C |
Z, N,V,C,H |
1 |
4 |
CPI |
Rd,K |
Порівняння з константою |
Rd-K |
Z, N,V,C,H |
1 |
3, 4 |
SBRC |
Rr,b |
Пропустити наступну інструкцію, якщо біт регістру очищений |
if (Rr(b)=O)PC <— PC + 2 или 3 |
Нема |
1 /2/3 |
9 |
SBRS |
Rr, b |
Пропустити наступну інструкцію, якщо біт регістру встанвлений |
if (Rr(b)=1)PC <— PC+ 2 или 3 |
Нема |
1/2/3 |
9 |
SBIC |
P, b |
Пропустити наступну інструкцію, якщо біт регістру вводу/виводу очищений |
if (P(b)=O)PC <— PC + 2 или 3 |
Нема |
1 /2/3 |
9 |
SBIS |
P, b |
Пропустити наступну інструкцію, якщо біт регістру вводу/виводу встановлений |
if (P(b)=1)PC <— PC + 2 или 3 |
Нема |
1 /2/3 |
9 |
BRBS |
s, k |
Перейти, якщо біт у Регістрі Статусу (SREG) встановлений |
if (SREG(s) = 1) then PC <— PC+k + 1 |
Нема |
1/2 |
5 |
BRBC |
s, k |
Перейти, якщо біт у Регістрі Статусу (SREG) очищений |
if (SREG(s) = 0) then PC <— PC+k + 1 |
Нема |
1 /2 |
5 |
BREQ |
k |
Перейти, якщо рівне нулю |
if (Z = 1) then PC <— PC + k + 1 |
Нема |
1 /2 |
3 |
BRNE |
k |
Перейти, якщо не рівне нулю |
if (Z = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
3 |
BRCS |
k |
Перейти, якщо біт переносу встановлений |
if (C = 1)then PC <— PC + k+ 1 |
Нема |
1 /2 |
5 |
BRCC |
k |
Перейти, якщо біт переносу очищений |
if (C = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
5 |
BRSH |
k |
Перейти, якщо рівне або більше (беззнекове) |
if (C = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
1, 4 |
BRLO |
k |
Перейти, якщо менше (беззнекове) |
if (C = 1) then PC <— PC + k+ 1 |
Нема |
1 /2 |
1, 4 |
BRMI |
k |
Перейти, якщо від’ємне |
if (N = 1)then PC <— PC + k + 1 |
Нема |
1 /2 |
4 |
BRPL |
k |
Перейти, якщо додатнє |
if (N = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
4 |
BRGE |
k |
Перейти, якщо рівне більше чи рівне (знакове) |
if (N e V= 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
4 |
BRLT |
k |
Перейти, якщо менше (знакове) |
if (N e V= 1) then PC <— PC + k + 1 |
Нема |
1 /2 |
4 |
BRHS |
k |
Перехід, якщо біт статусу Н встановлений |
if (H = 1)then PC <— PC + k + 1 |
Нема |
1 /2 |
|
BRHC |
k |
Перехід, якщо біт статусу Н скинутий |
if (H = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
|
BRTS |
k |
Перехід, якщо біт статусу T встановлений |
if (T = 1)then PC <— PC + k +1 |
Нема |
1 /2 |
|
BRTC |
k |
Перехід, якщо біт статусу T скинутий |
if (T = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
|
BRVS |
k |
Перейти, якщо біт переповнення встановлений |
if (V = 1)then PC <— PC + k+ 1 |
Нема |
1 /2 |
5 |
BRVC |
k |
Перейти, якщо біт переповнення очищений |
if (V = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
5 |
BRIE |
k |
Перехід, якщо біт голобального дозволу переривань встановлений |
if ( I = 1)then PC <— PC + k + 1 |
Нема |
1 /2 |
|
BRID |
k |
Перехід, якщо біт голобального дозволу переривань скинутий |
if ( I = 0) then PC <— PC + k + 1 |
Нема |
1 /2 |
|
Інструкцї передачі даних |
|
|||||
MOV |
Rd, Rr |
Копіювання регістру |
Rd <— Rr |
Нема |
1 |
1 |
MOVW |
Rd, Rr |
Копіювання слів між регістрами |
Rd+1:Rd <— Rr+1:Rr |
Нема |
1 |
|
LDI |
Rd, K |
Безпосереднє завантаження константи у регістр |
Rd <— K |
Нема |
1 |
1 |
LD |
Rd, X |
Завантаження у регістр з пам’яті даних методом непрямої адресації |
Rd <— (X) |
Нема |
2 |
5 |
LD |
Rd, X+ |
Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація |
Rd <— (X), X <— X + 1 |
Нема |
2 |
5 |
LD |
Rd,-X |
Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації |
X <— X - 1, Rd <— (X) |
Нема |
2 |
5 |
LD |
Rd,Y |
Завантаження у регістр з пам’яті даних методом непрямої адресації |
Rd <— (Y) |
Нема |
2 |
5 |
LD |
Rd, Y+ |
Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація |
Rd <— (Y), Y <— Y + 1 |
Нема |
2 |
5 |
LD |
Rd,-Y |
Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації |
Y <— Y - 1, Rd <— (Y) |
Нема |
2 |
5 |
LDD |
Rd,Y+q |
Завантаження у регістр з пам’яті даних методом непрямої адресації зі зміщенням |
Rd <— (Y + q) |
Нема |
2 |
5 |
LD |
Rd, Z |
Завантаження у регістр з пам’яті даних методом непрямої адресації |
Rd <— (Z) |
Нема |
2 |
5 |
LD |
Rd, Z+ |
Завантаження у регістр з пам’яті даних методом непрямої адресації і постінкрементація |
Rd <— (Z),Z <— Z+1 |
Нема |
2 |
5 |
LD |
Rd.-Z |
Предекрементація і потім завантаження у регістр з пам’яті даних методом непрямої адресації |
Z <— Z - 1, Rd <— (Z) |
Нема |
2 |
5 |
LDD |
Rd, Z+q |
Завантаження у регістр з пам’яті даних методом непрямої адресації зі зміщенням |
Rd <— (Z + q) |
Нема |
2 |
5 |
LDS |
Rd, k |
Завантаження з пам’яті даних методом прямої адресації |
Rd <— (k) |
Нема |
2 |
5 |
ST |
X, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації |
(X) <— Rr |
Нема |
2 |
5 |
ST |
X+, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація |
(X) <— Rr, X <— X + 1 |
Нема |
2 |
5 |
ST |
-X, Rr |
Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації |
X <— X - 1, (X) <— Rr |
Нема |
2 |
5 |
ST |
Y, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації |
(Y) <— Rr |
Нема |
2 |
5 |
ST |
Y+, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація |
(Y) <— Rr, Y <— Y + 1 |
Нема |
2 |
5 |
ST |
-Y, Rr |
Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації |
Y <— Y - 1, (Y) <— Rr |
Нема |
2 |
5 |
STD |
Y+q,Rr |
Запис у пам’ять даних з регістра методом непрямої адресації зі зміщенням |
(Y + q) <— Rr |
Нема |
2 |
5 |
ST |
Z, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації |
(Z) <— Rr |
Нема |
2 |
5 |
ST |
Z+, Rr |
Запис у пам’ять даних з регістра методом непрямої адресації і постінкрементація |
(Z) <— Rr, Z <— Z + 1 |
Нема |
2 |
5 |
ST |
-Z. Rr |
Предекрементація і потім запис у пам’ять даних з регістра методом непрямої адресації |
Z <— Z - 1, (Z) <— Rr |
Нема |
2 |
5 |
STD |
Z+q,Rr |
Запис у пам’ять даних з регістра методом непрямої адресації зі зміщенням |
(Z + q) <— Rr |
Нема |
2 |
5 |
STS |
k, Rr |
Запис у пам’ять даних регістра методом прямої адресації |
(k) <— Rr |
Нема |
2 |
5 |
LPM |
|
Читання з пам’яті програм |
R0 <— (Z) |
Нема |
3 |
|
LPM |
Rd, Z |
Читання з пам’яті програм |
Rd <— (Z) |
Нема |
3 |
|
LPM |
Rd, Z+ |
Читання з пам’яті програм і наступною постінкрементацією |
Rd <— (Z), Z <— Z+1 |
Нема |
3 |
|
ELPM |
|
Розширене читання з пам’яті програм |
R0 <— (RAMPZ:Z) |
Нема |
3 |
|
ELPM |
Rd, Z |
Розширене читання з пам’яті програм |
Rd <— (RAMPZ:Z) |
Нема |
3 |
|
ELPM |
Rd, Z+ |
Розширене читання з пам’яті програм наступною постінкрементацією |
Rd <— (RAMPZ:Z), RAMPZ:Z <— RAMPZ:Z+1 |
Нема |
3 |
|
SPM |
|
Запис у пам’ять програм |
(Z) <— R1 :R0 |
Нема |
- |
|
IN |
Rd, P |
Загрузити вмістиме регістрів вводу/виводу у регістр загального призначення |
Rd <— P |
Нема |
1 |
4 |
OUT |
P, Rr |
Записали вмістиме регістру загального призначення у регістр вводу/виводу |
P <— Rd |
Нема |
1 |
4 |
PUSH |
Rr |
“Заштовхати” регістр у стек |
STACK <— Rr |
Нема |
2 |
4 |
POP |
Rd |
“Виштовхати” регістр зі стеку |
Rd <— STACK |
Нема |
2 |
4 |
Бітові інструкції і інструкції тестуванні біт |
|
|||||
SBI |
P,b |
Установлення біту в регістрі вводу-виводу |
l/O(P,b) <— 1 |
Нема |
2 |
8 |
CBI |
P,b |
Очистка біту в регістрі вводу-виводу |
l/O(P,b) <— 0 |
Нема |
2 |
8 |
LSL |
Rd |
Логічний зсув вліво |
Rd(n+1) <— Rd(n), Rd(0) <— 0 |
Z,C,N,V |
1 |
2 |
LSR |
Rd |
Логічний зсув вправо |
Rd(n) <— Rd(n+1), Rd(7) <— 0 |
Z,C,N,V |
1 |
2 |
ROL |
Rd |
Зсув вліво через переном |
Rd(0)<— C,Rd(n+1)<— Rd(n),C <— Rd(7) |
Z,C,N,V |
1 |
|
ROR |
Rd |
Зсув вправо через переном |
Rd(7) <— C,Rd(n)<— Rd(n+1),C <— Rd(0) |
Z,C,N,V |
1 |
|
ASR |
Rd |
Арифметичний зсув вправо |
Rd(n)<— Rd(n+1), n=0..6 |
Z,C,N,V |
1 |
|
SWAP |
Rd |
Обмін тетрадами |
Rd(3..0) <— Rd(7..4), Rd(7..4) <— Rd(3..0) |
Нема |
1 |
|
BSET |
s |
Встановлення біту регістру статусу SREG |
SREG(s) <— 1 |
SREG(s) |
1 |
|
BCLR |
s |
Скидання біту регістру статусу SREG |
SREG(s) <— 0 |
SREG(s) |
1 |
|
BST |
Rr, b |
Запис біту регістра у біт T регістру статусу SREG |
T <— Rr(b) |
T |
1 |
|
BLD |
Rd, b |
Читання з біту T регістру статусу SREG у регістр |
Rd(b) <— T |
Нема |
1 |
|
SEC |
|
Встановлення біту переносу (C) |
C <— 1 |
C |
1 |
|
CLC |
|
Очистка біту переносу (C) |
C <— 0 |
C |
1 |
3 |
SEN |
|
Встановлення біту N регістра статусу SREG |
N <— 1 |
N |
1 |
|
CLN |
|
Очищення біту N регістра статусу SREG |
N <— 0 |
N |
1 |
|
SEZ |
|
Встановлення біту Z регістра статусу SREG |
Z <— 1 |
Z |
1 |
|
CLZ |
|
Очищення біту Z регістра статусу SREG |
Z <— 0 |
Z |
1 |
|
SEI |
|
Встановлення біту глобального дозволу переривань |
l<— 1 |
I |
1 |
10 |
CLI |
|
Скидання біту глобального дозволу переривань |
l <— 0 |
I |
1 |
10 |
SES |
|
Встановлення біту S регістра статусу SREG |
S <— 1 |
S |
1 |
|
CLS |
|
Очищення біту S регістра статусу SREG |
S <— 0 |
S |
1 |
|
SEV |
|
Встановлення біту V регістра статусу SREG |
V <— 1 |
V |
1 |
|
CLV |
|
Очищення біту V регістра статусу SREG |
V <— 0 |
V |
1 |
|
SET |
|
Встановлення біту T регістра статусу SREG |
T <— 1 |
T |
1 |
|
CLT |
|
Очищення біту T регістра статусу SREG |
T <— 0 |
T |
1 |
|
SEH |
|
Встановлення біту H регістра статусу SREG |
H <— 1 |
H |
1 |
|
CLH |
|
Очищення біту H регістра статусу SREG |
H <— 0 |
H |
1 |
|
Інструкції управління мікроконтролером |
|
|||||
NOP |
|
Немає операції |
|
Нема |
1 |
1 |
SLEEP |
|
Перехід у режим сну (Sleep Mode) |
(см. подробное описание режима сна) |
Нема |
1 |
|
WDR |
|
Скидання сторожового таймеру (WatchDog) |
(см. подробное описание сторожевого таймера) |
Нема |
1 |
|
BREAK |
|
Перехід у Stop Mode |
Только для встроенной отладки |
Нема |
- |
|
1 Наймолодший біт байту LSB (least significant bit – англ.) позначається номером 0, а найстарший біт байту MSB (most significant bit – англ.) позначається номером 7. Біт під номером 3 – це найстарший біт молодшої тетроди байту, а біт під номером 4 – це наймолодший біт старшої тетроди байту
2 Для чисел без знаку (коли числа представляються у прямому коді і найстарший біт байту приймає участь у формування модуля числа) однобайтними числами є числа з діапазону [0; 255]. У випадку знакових чисел (коли числа представляються у додатковому коді і найстарший байт не приймає участь у формування модуля числа, а відповідає за знак) однобайтними числами є числа з діапазону [-127; 127]. Біт V встановлюється у тому випадку, коли у результаті арифметичної чи логічної операції ми виходимо за цей діапазон.
3 Як правило (зокрема і для асемблера AVR Studio) під словом розуміють ціле число довжиною у два байти
4 Біти встановлюються з урахуванням того, що відбувається додавання константи до двобайтного числа, а не однобайтного.
5 У програмування зміщення вліво означає зміщення у сторону старших розрядів, а зміщення вправо – с сторону молодших розрядів.
6 При відніманні чи додаванні від’ємного числа треба мати на увазі, що від’ємн числа представляються у додатковому коді
7 Зручно при ініціалізації SP при ініціалізації програми вказати SP як адресу останньої комірки SRAM
8 Ця фраза не стосується мікроконтролера ATMEGA128
9 pre означає попередній
10 Декрементація означає зменшення на одиницю
11 post означає після
12 Інкрементація означає збільшення на одиницю
13 Номер відносно першої адреси регістрів вводу/виводу
14 Опис цієї директиви читайте в описі AVR Studio асемблера
15 Опис цієї директиви читайте у описі до лабораторної роботи № 5
16 Існує ще інструкція переходу до підпрограми по абсолютній адресі без обмеження у адресному просторі CALL, абе вона виконується довше. Аналогічно існує налог команді відносного переходу RJMP - JMP
17 К – це кількість проініціалізованих елементів арифметичної прогресії, яке відповідає умові завершення формування наступних елементів арифметичної прогресії, описане вище у програмі виконання роботи
18 Вказівник – це об’єкт (наприклад змінна, чи регістр) який вказує на комірку пам’яті адресного простору
19 Опис цієї директиви читайте в описі AVR Studio асемблера
20 Перший символ (Z, Y чи Z) означає Z, Y чи Z регістр відповідно. Другий символ (L чи Н) є початковим символом слова LOW (молодший) і HIGH (старший) – що означає молодший чи старший байт регістра-вказівника.
21 Можна реалізувати свій варіант алгоритму циклу. Є декілька можливостей його реалізації.
22 Умовами даної лабораторної роботи передбачено що зупинкою підрахунку наступних елементів арифметичної прогресії є:
1-е) наступний елемент арифметичної прогресії стає двобайтних числом (додавання двох однобайтних чисел дає перенос у старші розряди)
2-е) Сума арифметичної прогресії стає трьохбайтним числом. Тобто третій байт суми стає відмінним від нуля.
А це означає, що треба розраховувати, що сума може стати трьохбайтним числом і вести відповідні розрахунки, маючи це на увазі.
23 Умова даної лабораторної роботи передбачає, що всі елементи арифметичної прогресії і різниця арифметичної прогресії є однобайтними числами
24 Оскільки вихід з циклу може бути не тільки при умові, коли всі елементи порініціалізовані, але і коли сума стане трьохбайтним числом чи елемент арифметичної прогресії стане двохбайтним числом, то кількість ітерацій не обов’язково має бути рівна N
25 Наприклад:
stop: rjmp stop
26
При виконанні інструкцій переходу
після порівняння треба використовувати
тільки ті інструкції, які підходять
для знакових чисел і числами можуть
бути тільки числа з діапазону
27
зверніть увагу, що параметром є однобайтне
беззнакове число. Тому при виконанні
інструкцій переходу після порівняння
треба використовувати тільки ті
інструкції, які підходять для беззнакових
чисел і числами можуть бути тільки
числа з діапазону
28 Для простоти у тілі циклу можна помістити тільки інструкцію NOP, або будь-яку іншу інструкцію яка не впливає на роботу циклу.
29 Див. зноску 27
30 Див. зноску 28
31 Див. зноску 27
32 Див. зноску 28
33 Див. зноску 27
34 Див. зноску 28
35 Знакова однобайтна змінна, яка мала бути об’явлена згідно п.2 Див. зноску 26
36 Див. зноску 35
37 Див. зноску 28
38 Див. зноску 35
39 Див. зноску 35
40 Див. зноску 28
41 Див. зноску 28
42 Див. зноску 35
43 Див. зноску 35
44 Біт, який відповідає за знак числа
45 Див. зноску 44
46
Множення на
– це те саме, що зміщення вліво (у сторону
старших біт) на 8 позицій. Іншими словами
зміщення на 8 – це переміщення одного
байту в старший наступний байт
47 Номер відносно першої адреси регістрів вводу/виводу. Якщо у таблиці не вказано номер регістру вводу видоду. то це значить, що даний регістр відноситься до розширених регістрів вводу-виводу і доступитися до ним можна з допомогою відносної адресації через регістри X, Y і Z, а інструкції IN і OUT для них не підходять. Якщо ж номер регістру вводу-виводу вказаний, то цей регістр відноситься рдо регістрів вводу-виводу і до них можна використовувати як інструкції IN і OUT, так і методами непрямої адресації, як для розширених регістрів вводу виводу.
Зверніть увагу на те, що в інструкціях IN і OUT вказується не адреса комірки регістра у пам’яті даних. а номер регістра. При доступі до будь-якого регістра методом непрямої адресації через регістри X, Y і Z треба вказувати адресу комірки пам’яті даних, а не номер регістру!!!
48 Цей режим не використовується у даній лабораторній роботі, тому опис його опущений
49 Див. зноску 48
50 Real Time Clock – годинник реального часу
51 Див зноску 47 лабораторної роботи № 8 «Вивчення програмування паралельного порту вводу-виводу мікроконтролера AVR»
52 Цю операцію треба виконати так, щоб інші біти регістру управління таймером-лічильником 0 залишилися незміненими. Тобто треба зчитати регістр управління TCCR0 у регістр загального призначення, потім змінити відповідні біти і змінений регістр загального призначення знову записати у регістр вводу-виводу TCCR0
53 Про регістр TIFR і його біти читайте у теоретичному матеріалі до цієї лабораторної роботи
54 Методика аналогічна, як у лабораторній роботі № 9
55 Цей пункт є обов’язковим тільки у тому випадку, коли у таблиці переривань реалізовано перехід на цей обробник
56 Другу breakpoint треба помістити не у підпрограмі очистки біту OCF0 (бо цю підпрограму ми видалили для цієї лабораторної роботи, так як цей біт автоматично очищується при генерації переривання при встановленні цього біту), а у обробнику переривання
