- •2 Архитектура avr-микроконтроллеров
- •3 Программная модель avr-микроконтроллеров
- •4 Система команд avr-микроконтроллеров
- •5 Программирование микроконтроллеров
- •6 Работа в среде avr Studio
- •Информация в сети интернет
- •Приложение 1 – Основные характеристики микроконтроллеров групп Tiny avr, Mega avr и lcd avr
Информация в сети интернет
1. http://www.atmel.com – официальный сайт фирмы Atmel (описания, последние версии программного обеспечения, информация о новинках).
2. http://www.atmel.ru – русскоязычный сайт фирмы Atmel (статьи и описания на русском языке, программное обеспечение).
3. http://www.argussoft.ru – сайт фирмы «Аргуссофт» (описания и информация на русском языке).
4. http://www.cec-mc.ru – сайт фирмы «КТЦ-МК» (описания и информация на русском языке).
5. http://www.chipinfo.ru – информация по электронным компонентам.
6. http://www.chipnews.gaw.ru – сайт журналов «Chip News» и «Инженерная микроэлектроника» (информация, статьи, обзоры).
10. http://www.gaw.ru – сайт «Рынок микроэлектроники» (обзоры, статьи, примеры практического применения).
Приложение 1 – Основные характеристики микроконтроллеров групп Tiny avr, Mega avr и lcd avr
Характеристика |
Tiny AVR |
Mega AVR |
|||||||||
ATtiny13 |
ATtiny15L |
ATtiny26 |
ATtiny28 |
ATtiny2313 |
ATmega48 |
ATmega8 |
ATmega88 |
ATmega8515 |
ATmega8535 |
||
Объём памяти программ (FLASH), Кбайт |
1 |
1 |
2 |
2 |
2 |
4 |
8 |
8 |
8 |
8 |
|
Объём внутренней оперативной памяти данных (SRAM), байт |
64 |
– |
128 |
– |
128 |
256 |
512 |
512 |
512 |
512 |
|
Объём энергонезависимой памяти данных (EEPROM), байт |
64 |
64 |
128 |
– |
128 |
512 |
1K |
1K |
512 |
512 |
|
Количество команд |
120 |
90 |
118 |
90 |
120 |
130 |
130 |
130 |
130 |
130 |
|
Количество линий ввода-вывода |
6 |
6 |
16 |
20 |
18 |
23 |
23 |
23 |
35 |
32 |
|
Количество векторов прерываний |
10 |
9 |
12 |
6 |
19 |
19 |
19 |
19 |
17 |
21 |
|
Разрядность программного счётчика (PC) |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
|
Стек1 |
П |
А |
П |
А |
П |
П |
П |
П |
П |
П |
|
8-разрядный таймер-счётчик |
1 |
2 |
2 |
1 |
1 |
2 |
2 |
2 |
1 |
2 |
|
16-разрядный таймер-счётчик |
– |
– |
– |
– |
1 |
1 |
1 |
1 |
1 |
1 |
|
Сторожевой таймер |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Аналоговый компаратор |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
АЦП (10 разрядов), каналов |
4 |
4 |
11 |
– |
– |
8 |
8 |
8 |
– |
8 |
|
Аппаратный умножитель |
– |
– |
– |
– |
– |
+ |
+ |
+ |
+ |
+ |
|
Универсальный асинхронный приёмопередатчик (УАПП) |
– |
– |
– |
– |
1 |
1 |
1 |
1 |
1 |
1 |
|
Интерфейс SPI для обмена данными |
– |
– |
– |
– |
– |
2 |
1 |
2 |
1 |
1 |
|
Двухпроводный последовательный интерфейс (TWI) |
– |
– |
– |
– |
– |
+ |
+ |
+ |
+ |
+ |
|
Интерфейс JTAG |
– |
– |
– |
– |
– |
– |
– |
– |
– |
– |
|
Программирование в системе (In-System Programming) |
+ |
+ |
+ |
– |
+ |
+ |
+ |
+ |
+ |
+ |
|
Самопрограммирование (Self-Programming) |
– |
– |
– |
– |
– |
+ |
+ |
+ |
+ |
+ |
|
Схема сброса при понижении напряжения питания |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Синхронизация от внутренней RC-цепочки |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Синхронизация от внешнего кварцевого генератора |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Максимальная тактовая частота, МГц |
16 |
1,6 |
16 |
4 |
16 |
16 |
16 |
16 |
16 |
16 |
|
Число выводов |
8 |
8 |
20/32 |
28/32 |
20/32 |
28/32 |
28/32 |
28/32 |
40/44 |
40/44 |
|
Характеристика |
Mega AVR |
LCD AVR |
||||||||
ATmega16 |
ATmega162 |
ATmega168 |
ATmega32 |
ATmega64 |
ATmega128 |
ATmega256 |
ATmega169 |
ATmega329 |
||
Объём памяти программ (FLASH), Кбайт |
16 |
16 |
16 |
32 |
64 |
128 |
256 |
16 |
32 |
|
Объём внутренней оперативной памяти данных (SRAM), байт |
1K |
1K |
1K |
2K |
4K |
4K |
8K |
1K |
2K |
|
Объём энергонезависимой памяти данных (EEPROM), байт |
512 |
512 |
512 |
1K |
2K |
4K |
4K |
512 |
1K |
|
Количество команд |
131 |
131 |
131 |
131 |
130 |
133 |
130 |
130 |
130 |
|
Количество линий ввода-вывода |
32 |
35 |
23 |
32 |
53 |
53 |
53 |
54 |
54 |
|
Количество векторов прерываний |
21 |
28 |
21 |
21 |
35 |
35 |
35 |
23 |
23 |
|
Разрядность программного счётчика (PC) |
16 |
16 |
16 |
16 |
16 |
22 |
22 |
16 |
16 |
|
Стек1 |
П |
П |
П |
П |
П |
П |
П |
П |
П |
|
8-разрядный таймер-счётчик |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
|
16-разрядный таймер-счётчик |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
1 |
1 |
|
Сторожевой таймер |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Аналоговый компаратор |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
АЦП (10 разрядов), каналов |
8 |
– |
8 |
8 |
8 |
8 |
8 |
8 |
8 |
|
Аппаратный умножитель |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Универсальный асинхронный приёмопередатчик (УАПП) |
1 |
2 |
1 |
1 |
2 |
2 |
2 |
1 |
1 |
|
Интерфейс SPI для обмена данными |
1 |
1 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
|
Двухпроводный последователь-ный интерфейс (TWI) |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Интерфейс JTAG |
– |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Программирование в системе (In-System Programming) |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Самопрограммирование (Self-Programming) |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Схема сброса при понижении напряжения питания |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Синхронизация от внутренней RC-цепочки |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Синхронизация от внешнего кварцевого генератора |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Максимальная тактовая частота, МГц |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
16 |
|
Число выводов |
40/44 |
40/44 |
28/32 |
40/44 |
64 |
64 |
64 |
64 |
64 |
|
1 А – аппаратный, П – программный (организуемый в ОЗУ).
Приложение 2 – Система команд микроконтроллеров семейства AVR
Мнемо-ника |
Операн-ды |
Описание |
Операция |
Флаги |
Число тактов* |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
Арифметические и логические команды |
||||||||||
ADD |
Rd, Rr |
Сложить без учёта флага переноса |
Rd Rd + Rr |
Z, C, N, V, H, S |
1 |
|||||
ADC |
Rd, Rr |
Сложить с учётом флага переноса |
Rd Rd + Rr + C |
Z, C, N, V, H, S |
1 |
|||||
ADIW |
Rdl, К6 |
Сложить слово и константу |
Rdh:Rdl Rdh:Rdl – K6 |
Z, C, N, V, S |
2 |
|||||
SUB |
Rd, Rr |
Вычесть без учёта флага переноса |
Rd Rd – Rr |
Z, C, N, V, H, S |
1 |
|||||
SUBI |
Rd, К8 |
Вычесть константу |
Rd Rd – K8 |
Z, C, N, V, H, S |
1 |
|||||
SBC |
Rd, Rr |
Вычесть с учётом флага переноса |
Rd Rd – Rr – C |
Z, C, N, V, H, S |
1 |
|||||
SBCI |
Rd, К8 |
Вычесть константу с учётом флага переноса |
Rd Rd – K8 – C |
Z, C, N, V, H, S |
1 |
|||||
SBIW |
Rdl, К6 |
Вычесть константу из слова |
Rdh:Rdl Rdh:Rdl – K6 |
Z, C, N, V, S |
2 |
|||||
AND |
Rd, Rr |
Выполнить логическое И |
Rd Rd · Rr |
Z, N, V, S |
1 |
|||||
ANDI |
Rd, К8 |
Выполнить логическое И с константой |
Rd Rd · K8 |
Z, N, V, S |
1 |
|||||
OR |
Rd, Rr |
Выполнить логическое ИЛИ |
Rd Rd v Rr |
Z, N, V, S |
1 |
|||||
ORI |
Rd, К8 |
Выполнить логическое ИЛИ с константой |
Rd Rd v K8 |
Z, N, V, S |
1 |
|||||
EOR |
Rd, Rr |
Выполнить логическое исключающее ИЛИ |
Rd Rd Rr |
Z, N, V, S |
1 |
|||||
COM |
Rd |
Вычислить дополнение до од-ного (поразрядная инверсия) |
Rd $FF – Rd |
Z, C, N, V, S |
1 |
|||||
NEG |
Rd |
Вычислить дополнение до двух (изменить знак) |
Rd $00 – Rd |
Z, C, N, V, H, S |
1 |
|||||
SBR |
Rd, К8 |
Установить разряд (разряды) в РОН |
Rd Rd v K8 |
Z, C, N, V, S |
1 |
|||||
CBR |
Rd, К8 |
Сбросить разряды в РОН |
Rd Rd · ($FF – K8) |
Z, C, N, V, S |
1 |
|||||
INC |
Rd |
Инкрементировать содержимое РОН |
Rd Rd + 1 |
Z, N, V, S |
1 |
|||||
DEC |
Rd |
Декрементировать содержимое РОН |
Rd Rd – 1 |
Z, N, V, S |
1 |
|||||
TST |
Rd |
Проверить на равенство нулю или отрицательное значение |
Rd Rd · Rd |
Z, C, N, V, S |
1 |
|||||
CLR |
Rd |
Очистить все разряды РОН |
Rd Rd Rd |
Z, C, N, V, S |
1 |
|||||
SER |
Rd |
Установить все разряды РОН |
Rd $FF |
Нет |
1 |
|||||
CP |
Rd, Rr |
Сравнить |
Rd – Rr |
Z, C, N, V, H, S |
1 |
|||||
CPC |
Rd, Rr |
Сравнить с учётом флага переноса |
Rd – Rr – C |
Z, C, N, V, H, S |
1 |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
CPI |
Rd, К8 |
Сравнить с константой |
Rd – K8 |
Z, C, N, V, H, S |
1 |
|||||
MUL |
Rd, Rr |
Перемножить содержимое двух РОН (без знака) |
R1:R0 Rd Rr |
Z, C |
2 |
|||||
MULS |
Rd, Rr |
Перемножить содержимое двух РОН (со знаком) |
R1:R0 Rd Rr |
Z, C |
2 |
|||||
MULSU |
Rd, Rr |
Перемножить содержимое двух РОН (Rd – со знаком; Rr – без знака) |
R1:R0 Rd Rr |
Z, C |
2 |
|||||
FMUL |
Rd, Rr |
Перемножить содержимое двух РОН (без знака) со сдвигом влево на 1 разряд |
R1:R0 Rd Rr << 1 |
Z, C |
2 |
|||||
FMULS |
Rd, Rr |
Перемножить содержимое двух РОН (со знаком) со сдвигом влево на 1 разряд |
R1:R0 Rd Rr << 1 |
Z, C |
2 |
|||||
FMULSU |
Rd, Rr |
Перемножить содержимое двух РОН (Rd – со знаком; Rr – без знака) со сдвигом влево на 1 разряд |
R1:R0 Rd Rr << 1 |
Z, C |
2 |
|||||
Команды ветвления |
||||||||||
RJMP |
k |
Относительный переход |
PC PC + k +1 |
Нет |
2 |
|||||
IJMP |
Нет |
Косвенный переход |
PC Z |
Нет |
2 |
|||||
EIJMP |
Нет |
Расширенный косвенный переход |
PC(15:0) Z, PC(21:16) EIND |
Нет |
2 |
|||||
JMP |
k |
Косвенный переход |
PC k |
Нет |
3 |
|||||
RCALL |
k |
Относительный вызов подпрограммы |
STACK PC + 1, PC PC + k + 1 |
Нет |
3 |
|||||
ICALL |
Нет |
Косвенный вызов подпрограммы |
STACK PC + 1, PC Z |
Нет |
3 |
|||||
EICALL |
Нет |
Расширенный косвенный вызов подпрограммы |
STACK PC + 1, PC(15:0) Z, PC(21:16) EIND |
Нет |
3 |
|||||
CALL |
k |
Вызов подпрограммы |
STACK PC + 1, PC k |
Нет |
4/5 |
|||||
RET |
Нет |
Возврат из подпрограммы |
PC STACK |
Нет |
4 |
|||||
RETI |
Нет |
Возврат из подпрограммы обработки прерывания |
PC STACK |
I |
4 |
|||||
CPSE |
Rd, Rr |
Сравнить и пропустить, если равно |
если Rd = Rr, PC PC + 2 (или 3) |
Нет |
1/2/3 |
|||||
SBRC |
Rr, b |
Пропустить, если бит в РОН сброшен |
если Rr(b) = 0, PC PC + 2 (или 3) |
Нет |
1/2/3 |
|||||
SBRS |
Rr, b |
Пропустить, если бит в РОН установлен |
если Rr(b)=1, PC PC + 2 (или 3) |
Нет |
1/2/3 |
|||||
SBIC |
I/O, b |
Пропустить, если бит в регист-ре ввода-вывода сброшен |
если I/O(b) = 0, PC PC + 2 (или 3) |
Нет |
1/2/3 |
|||||
SBIS |
I/O, b |
Пропустить, если бит в регистре ввода-вывода установлен |
если I/O(b) = 1, PC PC + 2 (или 3) |
Нет |
1/2/3 |
|||||
BRBC |
s, k |
Перейти, если флаг в регистре SREG сброшен |
если SREG(s) = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
BRBS |
s, k |
Перейти, если флаг в регистре SREG установлен |
если SREG(s) = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BREQ |
k |
Перейти, если равно |
если Z = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRNE |
k |
Перейти, если не равно |
если Z = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRCS |
k |
Перейти, если флаг переноса установлен |
если C = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRCC |
k |
Перейти, если флаг переноса сброшен |
если C = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRSH |
k |
Перейти, если равно или больше |
если C = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRLO |
k |
Перейти, если меньше |
если C = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRMI |
k |
Перейти, если минус |
если N = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRPL |
k |
Перейти, если плюс |
если N = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRGE |
k |
Перейти, если больше или равно (со знаком) |
если S = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRLT |
k |
Перейти, если меньше (со знаком) |
если S = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRHS |
k |
Перейти, если флаг полупереноса установлен |
если H = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRHC |
k |
Перейти, если флаг полупереноса сброшен |
если H = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRTS |
k |
Перейти, если флаг T установлен |
если T = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRTC |
k |
Перейти, если флаг T сброшен |
если T = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRVS |
k |
Перейти, если флаг переполнения установлен |
если V = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRVC |
k |
Перейти, если флаг переполнения сброшен |
если V = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRIE |
k |
Перейти, если прерывания разрешены |
если I = 1, PC PC + k + 1 |
Нет |
1/2 |
|||||
BRID |
k |
Перейти, если прерывания запрещены |
если I = 0, PC PC + k + 1 |
Нет |
1/2 |
|||||
Команды передачи данных |
||||||||||
MOV |
Rd, Rr |
Копирование РОН |
Rd Rr |
Нет |
1 |
|||||
MOVW |
Rd, Rr |
Копирование пары РОН |
Rd+1:Rd Rr+1:Rr |
Нет |
1 |
|||||
LDI |
Rd, К8 |
Загрузка константы в РОН |
Rd K8 |
Нет |
1 |
|||||
LDS |
Rd, k |
Прямая загрузка из ОЗУ в РОН |
Rd (k) |
Нет |
2 |
|||||
LD |
Rd, X |
Косвенная загрузка из ОЗУ в РОН |
Rd (X) |
Нет |
2 |
|||||
LD |
Rd, X+ |
Косвенная загрузка из ОЗУ с постинкрементом |
Rd (X), X X + 1 |
Нет |
2 |
|||||
LD |
Rd, –X |
Косвенная загрузка из ОЗУ с предекрементом |
X X – 1, Rd (X) |
Нет |
2 |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
LD |
Rd, Y |
Косвенная загрузка из ОЗУ в РОН |
Rd (Y) |
Нет |
2 |
|||||
LD |
Rd, Y+ |
Косвенная загрузка из ОЗУ с постинкрементом |
Rd (Y), Y Y + 1 |
Нет |
2 |
|||||
LD |
Rd, –Y |
Косвенная загрузка из ОЗУ с предекрементом |
Y Y – 1, Rd (Y) |
Нет |
2 |
|||||
LDD |
Rd, Y+q |
Косвенная загрузка из ОЗУ со смещением |
Rd (Y + q) |
Нет |
2 |
|||||
LD |
Rd, Z |
Косвенная загрузка из ОЗУ в РОН |
Rd (Z) |
Нет |
2 |
|||||
LD |
Rd, Z+ |
Косвенная загрузка из ОЗУ с постинкрементом |
Rd (Z), Z Z + 1 |
Нет |
2 |
|||||
LD |
Rd, –Z |
Косвенная загрузка из ОЗУ с предекрементом |
Z Z – 1, Rd (Z) |
Нет |
2 |
|||||
LDD |
Rd, Z+q |
Косвен. загрузка из ОЗУ со смещением |
Rd (Z + q) |
Нет |
2 |
|||||
STS |
k, Rr |
Прямое сохранение в ОЗУ |
(k) Rr |
Нет |
2 |
|||||
ST |
X, Rr |
Косвенное сохранение в ОЗУ |
(X) Rr |
Нет |
2 |
|||||
ST |
X+, Rr |
Косвенное сохранение в ОЗУ с постинкрементом |
(X) Rr, X X + 1 |
Нет |
2 |
|||||
ST |
–X, Rr |
Косвенное сохранение в ОЗУ с предекрементом |
X X – 1, (X) Rr |
Нет |
2 |
|||||
ST |
Y, Rr |
Косвенное сохранение в ОЗУ |
(Y) Rr |
Нет |
2 |
|||||
ST |
Y+, Rr |
Косвенное сохранение в ОЗУ с постинкрементом |
(Y) Rr, Y Y + 1 |
Нет |
2 |
|||||
ST |
–Y, Rr |
Косвенное сохранение в ОЗУ с предекрементом |
Y Y – 1, (Y) Rr |
Нет |
2 |
|||||
STD |
Y+q, Rr |
Косвенное сохранение в ОЗУ со смещением |
(Y + q) Rr |
Нет |
2 |
|||||
ST |
Z, Rr |
Косвенное сохранение в ОЗУ |
(Z) Rr |
Нет |
2 |
|||||
ST |
Z+, Rr |
Косвенное сохранение в ОЗУ с постинкрементом |
(Z) Rr, Z Z + 1 |
Нет |
2 |
|||||
ST |
–Z, Rr |
Косвенное сохранение в ОЗУ с предекрементом |
Z Z – 1, (Z) Rr |
Нет |
2 |
|||||
ST |
Z+q, Rr |
Косвенное сохранение в ОЗУ со смещением |
(Z + q) Rr |
Нет |
2 |
|||||
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), Z Z + 1 |
Нет |
3 |
|||||
SPM |
Нет |
Запись в память программ |
(Z) R1:R0 |
Нет |
– |
|||||
IN |
Rd, I/O |
Чтение регистра ввода-вывода |
Rd I/O |
Нет |
1 |
|||||
OUT |
I/O, Rr |
Запись в регистр ввода-вывода |
I/O Rr |
Нет |
1 |
|||||
PUSH |
Rr |
Занесение содержимого РОН в стек |
STACK Rr |
Нет |
2 |
|||||
POP |
Rd |
Извлечение из стека в РОН
|
Rd STACK |
Нет |
2 |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
Команды работы с битами |
||||||||||
LSL |
Rd |
Логический сдвиг влево |
Rd(n + 1) Rd(n), Rd(0) 0, C Rd(7) |
Z, C, N, V, H, S |
1 |
|||||
LSR |
Rd |
Логический сдвиг вправо |
Rd(n) Rd(n + 1), Rd(7) 0, C Rd(0) |
Z, C, N, V, H, S |
1 |
|||||
ROL |
Rd |
Циклический сдвиг влево через флаг переноса |
Rd(0) C, Rd(n + 1) Rd(n), C Rd(7) |
Z, C, N, V, H, S |
1 |
|||||
ROR |
Rd |
Циклический сдвиг вправо через флаг переноса |
Rd(7) C, Rd(n) Rd(n+1), C Rd(0) |
Z, C, N, V, S |
1 |
|||||
ASR |
Rd |
Арифметический сдвиг вправо |
Rd(n) Rd(n + 1), n = 0...6 |
Z, C, N, V, S |
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 |
|||||
SBI |
I/O, b |
Установить разряд в регистре ввода-вывода |
I/O(b) 1 |
Нет |
2 |
|||||
CBI |
I/O, b |
Сбросить разряд в регистре ввода-вывода |
I/O(b) 0 |
Нет |
2 |
|||||
BST |
Rr, b |
Сохранить разряд РОН во флаге T |
T Rr(b) |
T |
1 |
|||||
BLD |
Rd, b |
Загрузить разряд из флага T в РОН |
Rd(b) T |
Нет |
1 |
|||||
SEC |
Нет |
Установить флаг переноса |
C 1 |
C |
1 |
|||||
CLC |
Нет |
Сбросить флаг переноса |
C 0 |
C |
1 |
|||||
SEN |
Нет |
Установить флаг отрицательного числа |
N 1 |
N |
1 |
|||||
CLN |
Нет |
Сбросить флаг отрицательного числа |
N 0 |
N |
1 |
|||||
SEZ |
Нет |
Установить флаг нуля |
Z 1 |
Z |
1 |
|||||
CLZ |
Нет |
Сбросить флага нуля |
Z 0 |
Z |
1 |
|||||
SEI |
Нет |
Установить флаг разрешения прерываний |
I 1 |
I |
1 |
|||||
CLI |
Нет |
Сбросить флаг разрешения прерываний |
I 0 |
I |
1 |
|||||
SES |
Нет |
Установить флаг числа со знаком |
S 1 |
S |
1 |
|||||
CLS |
Нет |
Сбросить флаг числа со знаком |
S 0 |
S |
1 |
|||||
SEV |
Нет |
Установить флаг переполнения |
V 1 |
V |
1 |
|||||
CLV |
Нет |
Сбросить флаг переполнения |
V 0 |
V |
1 |
|||||
SET |
Нет |
Установить флаг T |
T 1 |
T |
1 |
|||||
CLT |
Нет |
Сбросить флаг T |
T 0 |
T |
1 |
|||||
SEH |
Нет |
Установить флаг внутреннего переноса |
H 1 |
H |
1 |
|||||
CLH |
Нет |
Сбросить флаг внутреннего переноса |
H 0 |
H |
1 |
|||||
NOP |
Нет |
Нет операции
|
Нет |
Нет |
1 |
|||||
1 |
2 |
3 |
4 |
5 |
6 |
|||||
SLEEP |
Нет |
Уменьшить энергопотребление |
См. описание конкретного микроконтроллера |
Нет |
1 |
|||||
WDR |
Нет |
Сбросить сторожевой таймер |
См. описание конкретного микроконтроллера |
Нет |
1 |
|||||
УСЛОВНЫЕ ОБОЗНАЧЕНИЯ:
Rd – результирующий (destination) и исходный РОН;
Rr – исходный (source) РОН;
I/O – регистр ввода-вывода;
b – разряд в регистре общего назначения или регистре ввода-вывода;
s – разряд (флаг) в регистре состояния SREG;
Rdl – регистры R24, R26, R28, R30;
X, Y, Z – регистры-указатели для косвенной адресации (X = R27:R26, Y = R29:R28, Z = R31:R30);
RAMPX, RAMPY, RAMPZ – регистры, связанные с регистрами-указателями X, Y и Z и обеспечивающие косвенную адресацию по всему объёму памяти данных (при размере памяти данных более 64 Кбайт) и доступ к размещённым в памяти программ константам в микроконтроллерах с размером памяти программ более 64 Кбайт;
РС – программный счётчик (Program Counter);
STACK – стек для хранения адресов возврата и содержимого регистров;
SP – указатель стека (Stack Pointer);
EIND – регистр, связанный с программным счётчиком и обеспечивающий косвенную адресацию по всему объёму памяти программ для микроконтроллеров с размером памяти программ более 64 Кбайт;
K6 – константа (6 разрядов), может быть константное выражение;
K8 – константа (8 разрядов), может быть константное выражение;
k – адресная константа для программного счётчика (размер зависит от команды);
q – смещение при косвенной адресации (6 разрядов).
РАЗРЯДЫ РЕГИСТРА СОСТОЯНИЯ SREG:
C – флаг переноса;
Z – флаг нулевого значения;
N – флаг отрицательного значения;
V – флаг переполнения;
S = N V – флаг для проверок со знаком при переполнении;
H – флаг полупереноса (переноса между третьим и четвёртым разрядами байта);
T – флаг для команд пересылки;
I – флаг глобального разрешения (запрещения) прерываний.
ПРИМЕЧАНИЯ: 1. Транслятор с языка ассемблера AVR-микроконтроллеров не различает регистр символов.
2. Мнемокоды ANDI и CBR а также ORI и SBR транслируются в один и тот же машинный код. Выбор между ними производится в зависимости от контекста программы.
3. Длительность выполнения команд условных переходов составляет 1 такт, если условие ложно (переход не производится), и 2 (3) такта (в зависимости от величины смещения), если соответствующее условие истинно (производится переход).
4. Для команд доступа к данным длительность выполнения указана при обращении к внутренней оперативной памяти данных.
Приложение 3 – Директивы ассемблера микроконтроллеров семейства AVR
Директива |
Описание |
.byte |
Зарезервировать байты в оперативной памяти данных |
.cseg |
Сегмент программы |
.db |
Определить (задать) байты в памяти программ или энергонезави-симой памяти данных |
.def |
Назначить регистру общего назначения символическое имя |
.device |
Определить устройство, для которого транслируется программа |
.dseg |
Сегмент данных |
.dw |
Определить (задать) слова в памяти программ или энергонезависимой памяти данных |
.endm, .endmacro |
Конец макроса |
.equ |
Установить постоянное выражение |
.eseg |
Сегмент энергонезависимой памяти данных |
.exit |
Выйти из файла |
.include |
Вложить другой файл |
.list |
Включить генерацию листинга |
.listmac |
Включить разворачивание макросов в листинге |
.macro |
Начало макроса |
.nolist |
Выключить генерацию листинга |
.org |
Установить положение в сегменте |
.set |
Установить переменный символический эквивалент выражения |
