Смекни!
smekni.com

8-разрядные КМОП RISC микроконтроллеры с внутрисистемно программируемым Flash ПЗУ (стр. 6 из 7)

Команды вызова подпрограммы (icall, rcall, call) работают практически так же, как и команды безусловного перехода. Отличие заключается в том, что, перед тем как выполнить переход, значение счетчика команд сохраняется в стеке. Кроме того, подпрограмма должна заканчиваться командой возврата RET.

Очевидно, что команды передачи управления нарушают нормаль­ное (линейное) выполнение основной программы. Каждый раз, когда выполняется команда из этой группы (кроме команд сравнения), нормальное функционирование конвейера нарушается. Перед загрузкой в конвейер нового адреса производится остановка и очистка выполняемой последовательности команд. Соответственно, реинициализация конвейера приводит к необходимости использования нескольких машинных циклов для выполнения таких команд.

Команды управления системой

В эту группу входят всего 3 команды:

• NOP — пустая команда;

• SLEEP — перевод микроконтроллера в режим пониженного энер­гопотребления;

• wdr— сброс сторожевого таймера.

Все команды этой группы выполняются за один машинный цикл.

Сводные таблицы команд

В Таблице указаны все команды, которыми располагают микроконтроллеры. В каждой таблице команды сгруппированы по функциональному признаку. В таблицах приведены такие основные сведения о командах, как мнемоническое обозначение команды, ее описание, число машинных циклов, необходимых для ее выполнения, а также флаги регистра SREG, на которые воздействует эта команда.

Группа команд логических операций

Мнемоника Описание Операция Циклы Флаги
AND Rd,Rr «Логическое И» двух РОН Rd=Rd • Rr 1 Z,N,V
ANDI Rd,K «Логическое И» РОН и константы Rd = Rd • К 1 Z,N,V
EOR Rd, Rr «Исключающее ИЛИ» двух РОН Rd = Rd ®Rr 1 Z,N,V
OR Rd,Rr «Логическое ИЛИ» двух РОН Rd = RdvRr 1 Z,N,V
ORI Rd,K «Логическое ИЛИ» РОН и константы Rd = Rd v К 1 Z,N,V
COM Rd Перевод в обратный код Rd = $FF-Rd 1 Z,C,N,V
NEG Rd Перевод в дополнительный код Rd = $00-Rd 1 Z,C,N,V,H
CLR Rd Сброс всех разрядов РОН Rd=Rd®Rd 1 Z,N,V
SER Rd Установка всех разрядов РОН Rd =$FF 1
TST Rd Проверка РОН на отрицательное или нулевое значение Rd • Rd 1 Z,N,V
SWAP Rd Обмен местами тетрад в РОН Rd(3...O) = Rd(7...4), Rd(7...4) = Rd(3...O) 1

Группа команд арифметических операций

Мнемоника Описание Операция Циклы Флаги
ADD Rd.Rr Сложение двух РОН Rd = Rd + Rr 1 Z,C,N,V,H
ADC Rd.Rr Сложение двух РОН с переносом Rd = Rd + Rr + C 1 Z,C,N,V,H
ADIW Rd,K Сложение регистровой пары с константой Rdh:RdI = Rdh:Rdl + К 2 Z,C,N,V,S
SUB Rd,Rr Вычитание двух РОН Rd = Rd-Rr 1 Z,C,N,V,H
SUBI Rd,K Вычитание константы из РОН Rd = Rd-K 1 Z,C,N,V,H
SBC Rd,Rr Вычитание двух РОН с заемом Rd=Rd-Rr-C 1 Z,C,N,V,H
SBCI Rd,K Вычитание константы из РОН с заемом Rd = Rd-K-C 1 Z,C,N,V,H
SBIW Rd,K Вычитание константы из регистровой пары Rdh:Rdl = Rdh:Rdt-K 2 Z,C,N,V,S
DEC Rd Декремент РОН Rd = Rd-l 1 Z,N,V
INC Rd Инкремент РОН Rd = Rd + 1 1 Z,N,V
ASR Rd Арифметический сдвиг вправо Rd(n) = Rd(n+ 1), n = 0...6 1 Z,C,N,V
LSL Rd Логический сдвиг влево Rd(n+l) = Rd(n), Rd(0) = 0 1 Z,C,N,V
LSR Rd Логический сдвиг вправо Rd(n) = Rd(n+l),Rd(7) = 0 1 Z,C,N,V
Мнемоника Описание Операция Циклы Флаги
ROL Rd Сдвиг влево через перенос Rd(0) = C, Rd(n+l) = Rd(n), С = Rd(7) 1 Z,C,N,V
ROR Rd Сдвиг вправо через перенос Rd(7) = C, Rd(n) = Rd(n+l), С = Rd(0) 1 Z,C,N,V
MUL Rd,Rr Умножение беззнаковых чисел Rl:RO = RdXRr 2 Z,C
MULS Rd,Rr Умножение чисел со знаком Rl:RO = RdXRr 2 Z,C
MULSU Rd,Rr Умножение беззнакового чис­ла на число со знаком Rl:RO = RdXRr 2 Z,C
FMDL Rd,Rr Умножение дробных беззнаковых чисел Rl:RO = (RdXRr)«l 2 Z,C
FMULSRd,Rr Умножение дробных чисел со знаком Rl:RO = (RdXRr)«l 2 Z,C
FMULSU Rd,Rr Умножение дробного беззнакового числа и дробного числа со знаком Rl:RO = (RdXRr)«1 2 Z,C
Группа команд операций с битами
Мнемоника Описание Операция Циклы Флаги
CBR Rd,K Сброс разряда(ов) РОН Rd = Rd»($FF-K) 1 Z,N,V
SBR Rd,K Установка разрада(ов) РОН Rd=RdvK 1 Z, N,V
CBI A,b Сброс разряда РВВ A.b = 0 2
SBI A,b Установка разряда РВВ A.b=l 2
BCLR s Зброс флага SREG.S - 0 1 SREG.S
BSET s Установка флага SREG.S=l 1 SREG.S
BLD Rd,b Загрузка разряда РОН из флага Т (SREG) Rd.b = T 1
BST Rr,b Запись разряда РОН в флаг Т (SREG) T = Rr.b 1 T
CLC Сброс флага переноса С = 0 1 С
SEC Установка флага переноса C=l 1 С
CLN Сброс флага отр. числа N = 0 1 N
SEN Установка флага отр. числа N = 1 1 N
CLZ Сброс флага нуля Z = 0 1 Z
SEZ Установка флага нуля Z = l 1 Z
CLI Общее запрещение прерываний 1 = 0 1 I
SEI Общее разрешение прерываний 1 = 1 1 I
CLS Сброс флага знака S = 0 1 S
SES Установка флага знака S = l 1 S
CLV Сброс флага переполнения доп. кода V = 0 1 V
SEV Установка флага переполнения доп. кода V = l 1 V
CLT Сброс флага Т T = 0 1 T
SET Установка флага Т T = l 1 T
CLH Сброс флага половинного переноса H = 0 1 H
SEH Установка флага половинного переноса H = l 1 H
Группа команд пересылки данных
Мнемоника Описание Операция Циклы Флаги
MOV Rd,Rr Пересылка между РОН Rd = Rr 1
MOVW Rd,Rr Пересылка двухбайтовых значений Rd + l:Rd = Rr+l:Rr 1
LDI Rd,K Загрузка константы в РОН Rd = K 1
Мнемоника Описание Операция Циклы Флаги
LD Rd,X Косвенное чтение Rd=[X] 2
LD Rd,X+ Косвенное чтение с постинкрементом Rd = [X],X = X+I 2
LD Rd,-X Косвенное чтениес преддекрементом X = X-l,Rd = [X] 2
LD Rd,Y Косвенное чтение Rd=[Y] 2
LD Rd,Y+ Косвенное чтение с постинкрементом Rd = [Y],Y = Y+l 2
LD Rd,-Y Косвенное чтение с преддекрементом Y=Y-l,Rd=[Y] 2
LDD Rd,Y+q Косвенное относительное чтение Rd = [Y+q] 2
LD Rd,Z Косвенное чтение Rd = [Z] 2
LD Rd,Z+ Косвенное чтение с постинкрементом Rd = [Z],Z = Z+l 2
LD Rd,-Z Косвенное чтение с преддекрементом Z = Z - 1, Rd = [Z] 2
LDD Rd,Z+q Косвенное относительное чтение Rd = [Z + q] 2
LDS Rd,k Непосредственное чтение из ОЗУ Rd = [k] 2
ST X,Rr Косвенная запись [X] = Rr 2
ST X+,Rr Косвенная запись с постинкрементом [X] = Rr, X=X+1 2
ST -X,Rr Косвенная запись с преддекрементом X = X-l,[X] = Rr 2
ST Y,Rr Косвенная запись [Y] = Rr 2
ST Y+,Rr Косвенная запись с постинкрементом [Y] = Rr, Y=Y+1 2
ST –Y, Rr Косвенная запись с преддекрементом Y=Y-l,[X] = Rr 2
STD Y+q,Rr Косвенная относительная запись [Y+q] = Rr 2
ST Z,Rr Косвенная запись [Z] = Rr 2
ST Z+,Rr Косвенная запись с постинкрементом [Z] = Rr,Z = Z+l 2
ST –Z,Rr Косвенная запись с преддекрементом Z = Z-l,[Z] = Rr 2
STD Z+q,Rr Косвенная относительная запись [Z + q] = Rr 2
STS k,Rr Непосредственная запись в ОЗУ [k] = Rr 2
LPM Загрузка данных из памяти программ R0 = {Z} 3
LPM Rd,Z Загрузка данных из памяти программ Rb={Z} 3
LPM Rd,Z+ Загрузка данных из памяти программ с постинкрементом Rb = {Z},Z = Z+1 3
ELPM Расширенная загрузка данных из памяти программ RO = {RAMPZ:Z} 3
ELPM Rd,Z Расширенная загрузка данных из памяти программ Rb={RAMPZ:Z} 3
ELPM Rd,Z+ Расширенная загрузка данных из памяти программ с постинкрементом Rb = {RAMPZ:Z}, RAMPZ:Z = RAMPZ:Z+1 3
SPM Запись в память программ {Z} = RI:R0
IN Rd,A Пересьика из РВВ в РОН Rd = A 1
OUT A,Rr Пересылка из РОН в РВВ A=Rr 1
PUSH Rr Сохранение байта в стеке STACK - Rr 2
POP Rd Извлечение байта из стека Rd = STACK 2
Группа команд передачи управления
Мнемоника Описание Операция Циклы Флаги
RJMP k Относительный безусловный переход РС =РС + к+1 2
IJMP Косвенный безусловный переход РС=Z 2
Мнемоника Описание Операция Циклы Флаги
JMP к Абсолютный переход РС = к 3
RCALL к Этносительный вызов подпрограммы PC = PC + к + 1 3
ICALL Сосвенный вызов подпрограммы PC = Z 3
CALL к Абсолютный вызов подпрограммы РС = к 4
RET Возврат из подпрограммы PC = STACK 4
RETI Возврат из подпрограммы обработки прерывания PC = STACK 4
СР Rd,Rr Сравнение РОН Rd-Rr 1 Z,N,V,C,H
СРС Rd, Rr Сравнение РОН с учетом переноса Rd-Rr-C 1 Z,N,V,C,H
CPI Rd,K Сравнение РОН с константой Rd-K 1 Z,N,V,C,H
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=l, то PC = PC + 2 (3) 1/2/3
SBIC A,b Пропуск след. команды, если разряд РВВ сброшен Если A.b = 0, то PC = PC + 2 (3) 1/2/3
SBIS A,b Пропуск след. команды, если разряд РВВ установлен Если А.Ь= 1, то PC = PC + 2 (3) 1/2/3
BRBC s,k Переход, если флаг s регистра SREG сброшен Если SREG.s= 0, то РС = РС + к+1 1/2
BRBS s,k Переход, если флаг s регистра SREG установлен Если SREG.s =1, то РС = РС + к+1 1/2
BRCS к Переход по переносу Если С =1, то РС = РС + к+1 1/2
BRCC к Переход, если нет переноса Если С = 0, то РС = РС + к+1 1/2
BREQ к Переход по «равно» Если Z = l, то РС = РС + к+1 1/2
BRNE к Переход по «не равно» Если Z = 0, то РС = РС + к+1 1/2
BRSH к Переход по «выше или равно» Если С = 0, то РС = РС + к+1 1/2
BRLO к Переход по «меньше» Если С =1, то РС = РС + к+1 1/2
BRMI . Переход по «отрицательное значение» ЕслиN = 1, то РС = РС + к + 1/2
BRPL Переход по «положительное значение» Если N = 0, то РС = РС + к+1 1/2
BRGE Переход по «больше или равно» (числа со знаком) Если (N®V) = 0, то PC = PC + к + 1 1/2
BRLT Переход по «меньше нуля» (числа со знаком) Если (N®V)=l, то PC = PC + к + 1 1/2
BRHS Переход по половинному переносу Если Н = 1, то PC = PC + к + 1 1/2
BRHC Переход, если нет половинного переноса Если Н = 0, то PC = PC + к + 1 1/2
BRTS Переход, если флаг Т установлен Если Т= 1, то РС = РС + к+1 1/2
BRTC Переход, если флаг Т сброшен ЕслиТ = 0, тоРС = РС + к+1 1/2
BRVS Переход по переполнению доп. кода ЕслиУ=1, тоРС = РС + к+1 1/2
BRVC Переход, если нет переполнения доп. кода ЕслиУ = 0, тоРС = РС + к+1 1/2
BRID Переход, если прерывания запрещены Если I = 0, тоРС = РС + к+1 1/2
BRIE Переход, если прерывания разрешены Если1 = 1, тоРС = РС + к+1 1/2

Группа команд управления системой