Приложение 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 | Установить переменный символический эквивалент выражения |
- 2 Архитектура avr-микроконтроллеров
- 3 Программная модель avr-микроконтроллеров
- 4 Система команд avr-микроконтроллеров
- 5 Программирование микроконтроллеров
- 6 Работа в среде avr Studio
- Информация в сети интернет
- Приложение 1 – Основные характеристики микроконтроллеров групп Tiny avr, Mega avr и lcd avr