В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > AVR
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


31. Краткое описание набора инструкций

31.1. Арифметические и логические инструкции

Мнемонический код Операнды Описание Операция Флаги Количество циклов синхронизации
ADD Rd, Rr Сложение без учета переноса Rd <-- Rd + Rr Z,C,N,V,S,H 1
ADC Rd, Rr Сложение с учетом переноса Rd <-- Rd + Rr + C Z,C,N,V,S,H 1
ADIW Rd, K Сложение слова с константой Rd <-- Rd + 1:Rd + K Z,C,N,V,S 2
SUB Rd, Rr Вычитание без учета переноса Rd <-- Rd - Rr Z,C,N,V,S,H 1
SUBI Rd, K Вычитание константы Rd <-- Rd - K Z,C,N,V,S,H 1
SBC Rd, Rr Вычитание с учетом переноса Rd <-- Rd - Rr - C Z,C,N,V,S,H 1
SBCI Rd, K Вычитание константы с учетом переноса Rd <-- Rd - K - C Z,C,N,V,S,H 1
SBIW Rd, K Вычитание константы из слова Rd + 1:Rd <-- Rd + 1:Rd - K Z,C,N,V,S 2
AND Rd, Rr Логическое И Rd <-- Rd · Rr Z,N,V,S 1
ANDI Rd, K Логическое И с константой Rd <-- Rd · K Z,N,V,S 1
OR Rd, Rr Логическое ИЛИ Rd <-- Rd v Rr Z,N,V,S 1
ORI Rd, K Логическое ИЛИ с константой Rd <-- Rd v K 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,S,H 1
SBR Rd,K Установка бит в регистре Rd <-- Rd v K Z,N,V,S 1
CBR Rd,K Сброс бит в регистре Rd <-- Rd · ($FFh - K) Z,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,N,V,S 1
CLR Rd Сброс регистра Rd <-- Rd Rd Z,N,V,S 1
SER Rd Установка регистра Rd <-- $FF Нет 1
MUL Rd,Rr Умножение беззнаковых переменных R1:R0 <-- Rd x Rr (UU) Z,C 2
MULS Rd,Rr Умножение знаковых переменных R1:R0 <-- Rd x Rr (SS) Z,C 2
MULSU Rd,Rr Умножение знаковой и беззнаковой переменных R1:R0 <-- Rd x Rr (SU) Z,C 2
FMUL2 Rd,Rr Дробное умножение беззнаковых переменных R1:R0 <-- Rd x Rr<<1 (UU) Z,C 2
FMULS Rd,Rr Дробное умножение знаковых переменных R1:R0 <-- Rd x Rr<<1 (SS) Z,C 2
FMULSU Rd,Rr Дробное умножение знаковой и беззнаковой переменных R1:R0 <-- Rd x Rr<<<1 (SU) Z,C 2
DES K Шифрование данных if (H = 0) then R15:R0 <-- Encrypt(R15:R0, K) else if (H = 1) then R15:R0 <-- Decrypt(R15:R0, K)   1/2

31.2. Инструкции переходов

Мнемонический код Операнды Описание Операция Флаги Количество циклов синхронизации
RJMP k Относительный переход PC <-- PC + k + 1 Нет 2
IJMP   Косвенный переход по адресу в регистре (Z) PC(15:0) <-- Z
PC(21:16) <-- 0
Нет 2
EIJMP   Расширенный косвенный переход по адресу в регистре (Z) PC(15:0) <-- Z
PC(21:16) <-- EIND
Нет 2
JMP k Переход PC <-- k Нет 3
RCALL k Относительный вызов подпрограммы PC <-- PC + k + 1 Нет 2 / 3(1)
ICALL   Косвенный вызов по адресу в регистре (Z) PC(15:0) <-- Z
PC(21:16) <-- 0
Нет 2 / 3(1)
EICALL   Расширенный косвенный вызов по адресу в регистре (Z) PC(15:0) <-- Z
PC(21:16) <-- EIND
Нет 3(1)
CALL k Вызов подпрограммы PC <-- k Нет 3 / 4(1)
RET   Выход из подпрограммы PC <-- STACK Нет 4 / 5(1)
RETI   Выход из процедуры обработки прерывания PC <-- STACK I 4 / 5(1)
CPSE Rd,Rr Сравнение и пропуск инструкции, если равно if (Rd = Rr) PC <-- PC + 2 or 3 Нет 1/2/3
CP Rd,Rr Сравнение Rd - Rr Z,C,N,V,S,H 1
CPC Rd,Rr Сравнение с учетом переноса Rd -Rr -C Z,C,N,V,S,H 1
CPI Rd,K Сравнение с константой Rd - K Z,C,N,V,S,H 1
SBRC Rr, b Пропуск инструкции, если бит в регистре равен 0 if (Rr(b) = 0) PC <-- PC + 2 or 3 Нет 1/2/3
SBRS Rr, b Пропуск инструкции, если бит в регистре равен 1 if (Rr(b) = 1) PC <-- PC + 2 or 3 Нет 1/2/3
SBIC A, b Пропуск инструкции, если бит в регистре В/В равен 0 if (I/O(A,b) = 0) PC <-- PC + 2 or 3 Нет 2/3/4
SBIS A, b Пропуск инструкции, если бит в регистре В/В равен 1 If (I/O(A,b) =1) PC <-- PC + 2 or 3 Нет 2/3/4
BRBS s, k Переход, если флаг статуса равен 1 if (SREG(s) = 1) then PC <-- PC + k + 1 Нет 1/2
BRBC s, k Переход, если флаг статуса равен 0 if (SREG(s) = 0) then PC <-- PC + k + 1 Нет 1/2
BREQ k Переход, если равно if (Z = 1) then PC <-- PC + k + 1 Нет 1/2
BRNE k Переход, если неравно if (Z = 0) then PC <-- PC + k + 1 Нет 1/2
BRCS k Переход, если перенос равен 1 if (C = 1) then PC <-- PC + k + 1 Нет 1/2
BRCC k Переход, если перенос равен 0 if (C = 0) then PC <-- PC + k + 1 Нет 1/2
BRSH k Переход, если больше или равно if (C = 0) then PC <-- PC + k + 1 Нет 1/2
BRLO k Переход, если меньше if (C = 1) then PC <-- PC + k + 1 Нет 1/2
BRMI k Переход, если минус if (N = 1) then PC <-- PC + k + 1 Нет 1/2
BRPL k Переход, если плюс if (N = 0) then PC <-- PC + k + 1 Нет 1/2
BRGE k Переход, если больше или равно (с учетом знака) if (N V= 0) then PC <-- PC + k + 1 Нет 1/2
BRLT k Переход, если меньше (с учетом знака) if (N V= 1) then PC <-- PC + k + 1 Нет 1/2
BRHS k Переход, если флаг полупереноса равен 1 if (H = 1) then PC <-- PC + k + 1 Нет 1/2
BRHC k Переход, если флаг полупереноса равен 0 if (H = 0) then PC <-- PC + k + 1 Нет 1/2
BRTS k Переход, если флаг T равен 1 if (T = 1) then PC <-- PC + k + 1 Нет 1/2
BRTC k Переход, если флаг T равен 0 if (T = 0) then PC <-- PC + k + 1 Нет 1/2
BRVS k Переход, если флаг переполнения равен 1 if (V = 1) then PC <-- PC + k + 1 Нет 1/2
BRVC k Переход, если флаг переполнения равен 0 if (V = 0) then PC <-- PC + k + 1 Нет 1/2
BRIE k Переход, если прерывания разрешены if (I = 1) then PC <-- PC + k + 1 Нет 1/2
BRID k Переход, если прерывания отключены if (I = 0) then PC <-- PC + k + 1 Нет 1/2

31.3. Инструкции передачи данных

Мнемонический код Операнды Описание Операция Флаги Количество циклов синхронизации
MOV Rd, Rr Копирование регистра Rd <-- Rr Нет 1
MOVW Rd, Rr Копирование пары регистров Rd+1:Rd <-- Rr+1:Rr Нет 1
LDI Rd, K Загрузка константы в регистр Rd <-- K Нет 1
LDS Rd, k Загрузка регистра по прямому адресу памяти данных Rd <-- (k) Нет 2(1)(2)
LD Rd, X Косвенная загрузка Rd <-- (X) Нет 1(1)(2)
LD Rd, X+ Косвенная загрузка с последующим инкрементированием Rd <-- (X)
X <-- X + 1
Нет 1(1)(2)
LD Rd, -X Косвенная загрузка с предварительным декрементированием X <-- X - 1 <-- X - 1
Rd <-- (X) <-- (X)
Нет 2(1)(2)
LD Rd, Y Косвенная загрузка Rd <-- (Y) <-- (Y) Нет 1(1)(2)
LD Rd, Y+ Косвенная загрузка с последующим инкрементированием Rd <-- (Y)
Y <-- Y + 1
Нет 1(1)(2)
LD Rd, -Y Косвенная загрузка с предварительным декрементированием Y <-- Y - 1 <-- Y - 1
Rd <-- (Y) <-- (Y)
Нет 2(1)(2)
LDD Rd, Y+q Косвенная загрузка со смещением Rd<--(Y + q) Нет 2(1)(2)
LD Rd, Z Косвенная загрузка Rd <-- (Z) Нет 1(1)(2)
LD Rd, Z+ Косвенная загрузка с последующим инкрементированием Rd <-- (Z)
Z <-- Z + 1
Нет 1(1)(2)
LD Rd, -Z Косвенная загрузка с предварительным декрементированием Z <-- Z - 1 <-- Z - 1
Rd <-- (Z) <-- (Z)
Нет 2(1)(2)
LDD Rd, Z+q Косвенная загрузка со смещением Rd <-- (Z + q) Нет 2(1)(2)
STS k, Rr Запись по прямому адресу памяти данных (k) <-- Rd Нет 2(1)
ST X, Rr Косвенная запись (X) <-- Rr Нет 1(1)
ST X+, Rr Косвенная запись с последующим инкрементированием (X) <-- Rr
X <-- X + 1
Нет 1(1)
ST -X, Rr Косвенная запись с предварительным декрементированием X <-- X - 1
(X) <-- Rr
Нет 2(1)
ST Y, Rr Косвенная запись (Y) <-- Rr Нет 1(1)
ST Y+, Rr Косвенная запись с последующим инкрементированием (Y) <-- Rr
Y <-- Y + 1
Нет 1(1)
ST -Y, Rr Косвенная запись с предварительным декрементированием Y <-- Y - 1
(Y) <-- Rr
Нет 2(1)
STD Y+q, Rr Косвенная запись со смещением (Y + q) <-- Rr Нет 2(1)
ST Z, Rr Косвенная запись (Z) <-- Rr Нет 1(1)
ST Z+, Rr Косвенная запись с последующим инкрементированием (Z) <-- Rr
Z <-- Z + 1
Нет 1(1)
ST -Z, Rr Косвенная запись с предварительным декрементированием Z <-- Z - 1
(Z) <-- Rr
Нет 2(1)
STD Z+q,Rr Косвенная запись со смещением (Z + q) <-- Rr Нет 2(1)
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   Запись в память программ (RAMPZ:Z) <-- R1:R0 Нет -
SPM Z+ Запись в память программ с последующим инкрементированием на 2 (RAMPZ:Z) <-- R1:R0
Z <-- Z + 2
Нет -
IN Rd, A Чтение из памяти ввода-вывода Rd <-- I/O(A) Нет 1
OUT A, Rr Запись в память ввода-вывода I/O(A) <-- Rr Нет 1
PUSH Rr Поместить содержимое регистра в стек STACK <-- Rr Нет 1(1)
POP Rd Извлечь содержимое регистра из стека Rd <-- STACK Нет 2(1)

31.4. Инструкции тестирования и обработки бит

Мнемонический код Операнды Описание Операция Флаги Количество циклов синхронизации
LSL Rd Логический сдвиг влево Rd(n+1) <-- Rd(n)
Rd(0) <-- 0
C <-- Rd(7)
Z,C,N,V,H 1
LSR Rd Логический сдвиг вправо Rd(n) <-- Rd(n+1)
Rd(7) <-- 0
C <-- Rd(0)
Z,C,N,V 1
ROL Rd Циклический сдвиг влево через перенос Rd(0) <-- C
Rd(n+1) <-- Rd(n)
C <-- Rd(7)
Z,C,N,V,H 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) Нет 1
BSET s Установка флага SREG(s) <-- 1 SREG(s) 1
BCLR s Сброс флага SREG(s) <-- 0 SREG(s) 1
SBI A, b Установка бита в регистре В/В I/O(A, b) <-- 1 Нет 1
CBI A, b Сброс бита в регистре В/В I/O(A, b) <-- 0 Нет 1
BST Rr, b Запись бита регистра в бит T T <-- Rr(b) T 1
BLD Rd, b Чтение бита Т в бит регистра 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 в SREG T ? 1 T 1
CLT   Сброс флага T в SREG T ? 0 T 1
SEH   Установка флага полупереноса в SREG H ? 1 H 1
CLH   Сброс флага полупереноса в SREG H <-- 0 H 1

31.5. Инструкции управления микроконтроллером

Мнемонический код Операнды Описание Операция Флаги Количество циклов синхронизации
BREAK   Останов (см. подробное описание инструкции BREAK) Нет 1
NOP   Нет операции   Нет 1
SLEEP   Переход в экономичный режим работы (см. подробное описание инструкции SLEEP) Нет 1
WDR   Сброс сторожевого таймера (см. подробное описание инструкции WDR) Нет 1

Прим.:

  1. Количество циклов, необходимых для доступа к памяти данных, распространяются на доступы к внутренней памяти и не имеют отношения к доступам через интерфейс внешнего ОЗУ.
  2. Для доступа к внутреннему SRAM необходим еще один дополнительный цикл.


<-- Предыдущая страница Оглавление Следующая страница -->