Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Система команд 8-ми разрядных RISC микроконтроллеров AVR

.pdf
Скачиваний:
81
Добавлен:
02.05.2014
Размер:
703.96 Кб
Скачать

ÊÒÖ-ÌÊ

Наши координаты:

Москва, 1-й Щемиловский пер, 16, 2 подъезд, 2 этаж Тел.: (095) 972 3416, 973 1855, 973 1923, факс 973 1864 E-mail: cec-mc@mega.ru

Наш сервер http://www.cec-mc.ru

ПОЛНЫЙ КОМПЛЕКС РАЗРАБОТКИ ЭЛЕКТРОННЫХ ИЗДЕЛИЙ ЛЮБОЙ СЛОЖНОСТИ, ВКЛЮЧАЮЩИЙ В СЕБЯ ИЗГОТОВЛЕНИЕ ОПЫТНОГО ОБРАЗ ЦА

ПРОИЗВОДСТВО ИЗДЕЛИЙ ПО ТЕХНИЧЕСКОЙ ДОКУМЕНТАЦИИ ЗАКАЗ ЧИКА

ПРОЕКТИРОВАНИЕ ПЕЧАТНЫХ ПЛАТ ЛЮБОЙ СЛОЖНОСТИ КАК С ПРИНЦИПИАЛЬНОЙ СХЕМЫ, ТАК И ИСПОЛНЕНИЕ ПРОЕКТА С ТЕХНИЧЕСКОГО ЗАДАНИЯ

ИЗГОТОВЛЕНИЕ ПЕЧАТНЫХ ПЛАТ ДО 5 КЛАССА, ДО 24 СЛОЕВ, С ПОЛНЫМ ЭЛЕКТРОКОНТРОЛЕМ

МОНТАЖ ПЕЧАТНЫХ ПЛАТ ЛЮБОЙ СЛОЖНОСТИ ВКЛЮЧАЯ ПОВЕРХНОСТНЫЙ, В ТОМ ЧИСЛЕ КОРПУСОВ BGA

ИЗГОТОВЛЕНИЕ ШТАМПОВАННЫХ И ФРЕЗЕРОВАННЫХ КОРПУСОВ ДЛЯ ПРОМЫШЛЕННОЙ АППАРАТУРЫ

КОМПЛЕКСНЫЕ ПОСТАВКИ ЭЛЕКТРОННЫХ КОМПОНЕНТОВ ДЛЯ ВЫПУСКАЕМЫХ ИЗДЕЛИЙ

165

ATMEL

ÊÒÖ-ÌÊ

СИСТЕМА КОМАНД

8-РАЗРЯДНЫХ RISC МИКРОКОНТРОЛЛЕРОВ

СЕМЕЙСТВА AVR

166

ÊÒÖ-ÌÊ

Система команд 8-разрядных RISC микроконтроллеров семейства AVR.

Принятые обозначения

Регистр статуса (SREG): SREG: Регистр статуса

C:Флаг переноса

Z:Флаг нулевого значения

N:Флаг отрицательного значения

V:Флаг-указатель переполнения дополнения до двух

S:NV, Для проверок со знаком

H:Флаг полупереноса

T:Флаг пересылки, используемый

командами BLD и BST

I:Флаг разрешения/запрещения глобального прерывания

Регистры и операнды:

Rd:

Регистр назначения (и источник) в

 

регистровом файле

Rr:

Регистр источник в регистровом файле

R:Результат выполнения команды

K:Литерал или байт данных (8 бит)

k:Данные адреса константы для счетчика программ

b:Бит в регистровом файле или I/O

регистр (3 бита)

s:Бит в регистре статуса (3 бита)

Сводная таблица условных переходов

X, Y, Z: Регистр косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30)

P:Адрес I/O порта

q:Смещение при прямой адресации (6 бит)

I/O регистры

RAMPX, RAMPY, RAMPZ: Регистры связанные с X, Y и Z регистрами, обеспечивающие косвенную адресацию всей области СОЗУ микроконтроллера с объемом СОЗУ более 64 Кбайт.

Ñòåê:

STACK: Стек для адреса возврата и опущенных в стек регистров

SP: Указатель стека

Флаги:

<=> Флаг, на который воздействует команда

0: Очищенный командой Флаг

1: Установленный командой флаг -: Флаг, на который не воздействует

команда

Тестирование

Булево

 

 

Мнемоника

Комплементарное

Булево

Мнемоника

Комментарий

условия

выражение

 

условие

выражение

 

 

Rd > Rr

Z (N

 

 

 

V)=0

BRLT*

Rd < Rr

Z+(N

 

 

 

V)=1

BRGE*

Со знаком

Rd > Rr

(N

 

 

V)=0

BRGE

Rd < Rr

(N

 

 

V)=1

BRLT

Со знаком

 

 

 

 

 

 

 

 

 

Rd = Rr

Z=1

 

 

 

 

 

 

 

 

 

BREQ

Rd = Rr

Z=0

 

 

 

 

BRNE

Со знаком

Rd

<

Rr

Z+(N

 

 

 

 

 

 

 

V)=1

BRGE*

Rd > Rr

Z N

 

 

 

V)=0

BRLT*

Со знаком

Rd < Rr

(N

 

 

V)=1

BRLT

Rd > Rr

(N

 

 

 

 

V)=0

BRGE

Со знаком

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rd > Rr

C+Z=0

BRLO*

Rd < Rr

C+Z=1

BRSH*

Без знака

Rd > Rr

C=0

 

 

 

 

 

 

 

 

 

BRSH/BRCC

Rd < Rr

C=1

 

 

 

 

BRLO/BRCS

Без знака

Rd = Rr

Z=1

 

 

 

 

 

 

 

 

 

BREQ

Rd = Rr

Z=0

 

 

 

 

BRNE

Без знака

Rd

<

Rr

C+Z=1

BRSH*

Rd > Rr

C+Z=0

BRLO*

Без знака

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rd < Rr

C=1

 

 

 

 

 

 

 

 

 

BRLO/BRCS

Rd > Rr

C=0

 

 

 

 

BRSH/BRCC

Без знака

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перенос

C=1

 

 

 

 

 

 

 

 

 

BRCS

Нет переноса

C=0

 

 

 

 

BRCC

Простой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отрицательное

N=1

 

 

 

 

 

 

 

 

 

BRMI

Положительное

N=0

 

 

 

 

BRPL

Простой

значение

 

 

 

 

 

 

 

 

 

 

 

 

значение

 

 

 

 

 

 

 

 

 

 

 

Переполнение

V=1

 

 

 

 

 

 

 

 

 

BRVS

Нет переполнения

V=0

 

 

 

 

BRVC

Простой

Нулевое значение

Z=1

 

 

 

 

 

 

 

 

 

BREQ

Не нулевое значение

Z=0

 

 

 

 

BRNE

Простой

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* Смена Rd и Rr при операции перед тестированием, т.е. CP Rd,Rr > CP Rr,Rd

167

ATMEL

 

 

 

 

 

 

 

 

 

 

 

 

 

ÊÒÖ-ÌÊ

Арифметические и логические команды

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ìíåì-

Îïåð-

Описание

Операция

Флаги

Ê-âî

оника

àíäû

 

 

 

 

 

 

 

 

 

 

 

 

öèê-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ëîâ

 

 

 

 

 

 

 

ADD

Rd,Rr

Add without Carry -

Rd<

Rd + Rr

Z,C,N,V,H

1

 

 

Сложить без переноса

 

 

 

 

 

 

 

 

 

 

 

 

ADC

Rd,Rr

Add with Carry - Сложить с переносом

Rd<

Rd + Rr + C

Z,C,N,V,H

1

ADIW

Rd,K

Add Immediate to WordСложить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непосредственное значение со словом

Rdh:Rdl<

Rdh:Rdl + K

Z,C,N,V

2

SUB

Rd,Rr

Subtract without Carry -

Rd<

Rd - Rr

Z,C,N,V,H

1

 

 

Вычесть без переноса

 

 

 

 

 

 

 

 

 

 

 

 

SUBI

Rd,K

Subtract Immediate - Вычесть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непосредственное значение

Rd< Rd - K

Z,C,N,V,H

1

SBC

Rd,Rr

Subtract with Carry - Вычесть с переносом

Rd<

Rd - Rr - C

Z,C,N,V,H

1

SBCI

Rd,K

Subtract Immediate with Carry - Вычесть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непосредственное значение с переносом

Rd<

Rd - K - C

Z,C,N,V,H

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SBIW

Rd,K

Subtract Immediate from WordВычесть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непосредственное значение из слова

Rdh:Rdl< Rdh:Rdl - K

Z,C,N,V

2

 

 

 

 

 

 

 

 

 

AND

Rd,Rr

Logical ANDВыполнить логическое AND

Rd<

Rd

 

Rr

Z,N,V

1

ANDI

Rd,K

Logical AND with Immediate-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнить логическое AND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c непосредственным значением

Rd<

Rd

 

K

Z,N,V

1

 

 

 

 

 

 

 

OR

Rd,Rr

Logical OR - Выполнить логическое OR

Rd<

Rd v Rr

Z,N,V

1

ORI

Rd,K

Logical OR with Immediate -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнить логическое OR с

 

 

 

 

 

 

 

 

 

 

 

 

 

 

непосредственным значением

Rd<

Rd v K

Z,N,V

1

EOR

Rd,Rr

Exclusive OR - Выполнить

Rd<

Rd

 

 

 

 

 

Rr

Z,N,V

1

 

 

исключающее OR

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

COM

Rd

One’s Complement - Выполнить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дополнение до единицы

Rd< $FF - Rd

Z,C,N,V

1

NEG

Rd

Two’s Complement - Выполнить

Rd<

$00 - Rd

Z,C,N,V,H

1

 

 

дополнение до двух

 

 

 

 

 

 

 

 

 

 

 

 

SBR

Rd,K

Set Bits in Register-

Rd<

Rd v K

Z,N,V

1

 

 

Установить биты в регистре

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CBR

Rd,K

Clear Bits in Register -

Rd<

Rd

($FF - K)

Z,N,V

1

 

 

Очистить биты в регистре

 

 

 

 

 

 

 

 

 

 

 

 

INC

Rd

Increment - Инкрементировать

Rd<

Rd + 1

Z,N,V

1

DEC

Rd

Decrement - Декрементировать

Rd< Rd - 1

Z,N,V

1

TST

Rd

Test for Zero or Minus -

Rd<

Rd

 

 

 

 

 

Rd

Z,N,V

1

 

 

Проверить на ноль или минус

 

 

 

 

 

 

 

 

 

 

 

 

CLR

Rd

Clear Register- Очистить регистр

Rd<

Rd

 

 

 

 

 

 

Rd

Z,N,V

1

 

 

 

 

 

 

 

SER

Rd

Set all bits in Register-

Rd<

$FF

Íåò

1

 

 

Установить все биты регистра

 

 

 

 

 

 

 

 

 

 

 

 

CP

Rd,Rr

CompareСравнить

Rd

- Rr

 

 

 

 

 

 

 

Z,C,N,V,H

1

CPC

Rd,Rr

Compare with Carry -

Rd - Rr - C

Z,C,N,V,H

1

 

 

Сравнить с учетом переноса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPI

Rd,K

Compare with Immediate-

Rd - K

 

 

 

 

 

 

 

Z,C,N,V,H

1

 

 

Сравнить c константой

 

 

 

 

 

 

 

 

 

 

 

 

168

ÊÒÖ-ÌÊ

Команды переходов

Ìíå-

Îïå-

Описание

Операция

 

Ôëà-

Ê-âî

ìîíè-

ðàí-

 

 

 

 

ãè

öèê-

êà

äû

 

 

 

 

 

ëîâ

RJMP

k

RelativeJump-Перейтиотносительно

PC< PC + k + 1

 

Íåò

2

IJMP

 

Indirect JumpПерейти косвенно

PC<

Z

 

Íåò

2

JMP

k

JumpПерейти

PC<

k

 

Íåò

3

RCALL

k

Relative Call to Subroutine - Вызвать

 

 

 

 

 

 

 

подпрограмму относительно

PC<

PC + k + 1

 

Íåò

3

ICALL

 

Indirect Call to Subroutine - Вызвать

 

 

 

 

 

 

 

подпрограмму косвенно

PC<

Z

 

Íåò

3

CALL

k

Long Call to a Subroutine - Выполнить

 

 

 

 

 

 

 

длинный вызов подпрограммы

PC<

k

 

Íåò

4

RET

 

Return from Subroutine -

PC<

STACK

 

Íåò

4

 

 

Вернуться из подпрограммы

 

 

 

 

 

RETI

 

Return from InterruptВернуться из прерывания

PC<

STACK

 

I

4

CPSE

Rd,Rr

Compare Skip if EqualСравнить и

If Rd = Rr then

 

 

 

 

 

пропустить если равно

PC<

PC + 2 (or 3),

 

Íåò

1/2/3

SBRC

Rr,b

Skip if Bit in Register is ClearedПропустить

If Rr (b) = 0 then PC<

PC

 

 

 

 

если бит в регистре очищен

+ 2 (or 3)

 

Íåò

1/2/3

SBRS

Rr,b

Skip if Bit in Register is SetПропустить

If Rr(b) = 1 then PC<

PC

 

 

 

 

если бит в регистре установлен

+ 2 (or 3)

 

Íåò

1/2/3

SBIC

P,b

Skip if Bit I/O Register is Cleared - Пропустить

If I/O(P,b) = 0 then PC<

 

 

 

 

если бит в регистре I/O очищен

PC + 2 (or 3)

 

Íåò

1/2/3

SBIS

P,b

Skip if Bit I/O Register is SetПропустить

If I/O(P,b) = 1 then PC<

 

 

 

 

если бит в регистре I/O установлен

PC + 2 (or 3)

 

Íåò

1/2/3

BRBS

s,k

Branch if Bit in SREG is SetПерейти если

If SREG(s) = 1 then

 

 

 

 

 

бит в регистре статуса установлен

PC<

PC + k +1

 

Íåò

1/2

BRBC

s,k

Branch if Bit in SREG is Cleared - Перейти

If SREG(s) = 0 then

 

 

 

 

 

если бит в регистре статуса очищен

PC<

PC + k +1

 

Íåò

1/2

BREQ

k

Branch if EqualПерейти если равно

If Rd = Rr (Z = 1) then

 

 

 

 

 

 

PC<

PC + k +1

 

Íåò

1/2

BRNE

k

Branch if Not EqualПерейти если не равно

If Rd = Rr (Z = 0) then

 

 

 

 

 

 

PC<

PC + k +1

 

Íåò

1/2

BRCS

k

Branch if Carry SetПерейти если флаг

If Ñ= 1 then

 

 

 

 

 

переноса установлен

PC<

PC + k +1

 

Íåò

1/2

BRCC

k

Branch if Carry ClearedПерейти если

If Ñ= 0 then

 

 

 

 

 

флаг переноса очищен

PC<

PC + k +1

 

Íåò

1/2

BRSH

k

Branch if Same or Higher (Unsigned) - Перейти

If Rd > Rr (C = 0) then

 

 

 

 

 

если равно или больше (без знака)

PC<

PC + k +1

 

Íåò

1/2

BRLO

k

Branch if Lower (Unsigned) - Перейти если

If Rd < Rr (C = 1) then

 

 

 

 

 

меньше (без знака)

PC<

PC + k +1

 

Íåò

1/2

BRMI

k

Branch if Minus - Перейти если минус

If N = 1 then

 

Íåò

1/2

 

 

 

PC<

PC + k +1

 

 

 

BRPL

k

Branch if PlusПерейти если плюс

If N = 0 then

 

Íåò

1/2

 

 

 

PC<

PC + k +1

 

 

 

BRGE

k

Branch if Greater or Equal (Signed)- Перейти

f Rd > Rr (N V = 0) then

 

 

 

 

еслибольшеилиравно(сучетомзнака)

PC< PC + k +1

 

Íåò

1/2

 

 

 

 

 

 

 

 

169

ATMEL

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÊÒÖ-ÌÊ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BRLT

 

k

 

BranchifLessThen(Signed)-Перейти

 

If Rd < Rr (N

V

 

= 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

еслименьшечем(сознаком)

 

then PC< PC + k +1

 

 

Íåò

1/2

BRHS

 

k

 

Branch if Half Carry Flag is SetПерейти если

 

If H = 1 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

флагполупереносаустановлен

 

PC< PC + k +1

 

 

Íåò

1/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BRHC

 

k

 

Branch if Half Carry Flag is Cleared - Перейти

 

If H = 0 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

еслифлагполупереносаочищен

 

PC< PC + k +1

 

 

Íåò

1/2

BRTS

 

k

 

Branch if T Flag is SetПерейти если

 

If T = 1 then

 

 

 

 

 

 

 

Íåò

1/2

 

 

 

 

флагTустановлен

 

PC< PC + k +1

 

 

 

 

 

 

BRTC

 

k

 

Branch if T Flag is ClearedПерейти

 

If T = 0 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

если флаг T очищен

 

PC< PC + k +1

 

 

Íåò

1/2

BRVS

 

k

 

BranchifOverflowSet-Перейтиесли

 

If V = 1 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переполнениеустановлено

 

PC< PC + k +1

 

 

Íåò

1/2

BRVC

 

k

 

BranchifOverflowCleared-Перейтиесли

 

If V = 0 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переполнениеочищено

 

PC< PC + k +1

 

 

Íåò

1/2

BRIE

 

k

 

Branch if Global Interrupt is Enabled - Перейти

 

If I = 1 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

еслиглобальноепрерываниеразрешено

 

PC< PC + k +1

 

 

Íåò

1/2

BRID

 

k

 

Branch if Global Interrupt is Disabled - Перейти

 

If I = 0 then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

еслиглобальноепрерываниезапрещено

 

PC< PC + k +1

 

 

Íåò

1/2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Команды пересылки данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ìíå-

 

Îïåð-

Описание

 

 

 

 

 

Операция

 

Ôëà-

Ê-âî

ìîíè-

àíäû

 

 

 

 

 

 

 

 

 

 

 

 

ãè

 

öèê-

êà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ëîâ

ELPM

 

 

 

Extended Load ProgramMemoryРасширенная загрузка

 

 

 

R0

<

(Z+RAMPZ)

Íåò

 

3

 

 

 

 

 

памяти программ

 

 

 

 

 

 

 

 

 

 

 

 

MOV

Rd,Rr

 

CopyRegister-Копироватьрегистр

 

 

 

 

Rd<

Rr

 

Íåò

 

1

LDI

Rd,K

 

LoadImmediate-Загрузитьнепосредственноезначение

 

 

 

 

Rd<

K

 

Íåò

 

1

LDS

Rd,k

 

Load Direct from RAM -

 

 

 

 

Rd<

(k)

 

Íåò

 

3

 

 

 

 

 

ЗагрузитьнепосредственноизСОЗУ

 

 

 

 

 

 

 

 

 

 

 

 

LD

Rd,X

 

LD-LoadIndirect-Загрузитькосвенно

 

 

 

 

Rd<

(X)

 

Íåò

 

2

LD

Rd,X+

 

LoadIndirectandPost-Increment-Загрузить

 

 

 

 

Rd<

(X),

 

 

 

 

 

 

 

 

 

косвенноинкрементироваввпоследствии

 

 

 

 

 

X<

X + 1

 

Íåò

 

2

LD

Rd,-X

 

LoadIndirectandPre-Decrement-Загрузить

 

 

 

 

X< X - 1,

 

 

 

 

 

 

 

 

 

косвеннодекрементировавпредварительно

 

 

 

 

Rd<

(X)

 

Íåò

 

2

LD

Rd,Y

 

LoadIndirect-Загрузитькосвенно

 

 

 

 

Rd<

(Y)

 

Íåò

 

2

LD

Rd,Y+

 

LoadIndirectandPost-Increment-Загрузить

 

 

 

 

Rd<

(Y),

 

 

 

 

 

 

 

 

 

косвенноинкрементироваввпоследствии

 

 

 

 

 

Y<

Y + 1

 

Íåò

 

2

LD

Rd,-Y

 

LoadIndirectandPre-Decrement-Загрузить

 

 

 

 

Y< Y - 1,

 

 

 

 

 

 

 

 

 

косвеннодекрементировавпредварительно

 

 

 

 

Rd<

(Y)

 

Íåò

 

2

LDD

Rd,Y+q

 

LoadIndirectwithDisplacement-

 

 

 

 

Rd<

(Y + q)

 

Íåò

 

2

 

 

 

 

 

Загрузитькосвеннососмещением

 

 

 

 

 

 

 

 

 

 

 

 

LD

Rd,Z

 

LoadIndirect-Загрузитькосвенно

 

 

 

 

Rd<

(Z)

 

Íåò

 

2

LD

Rd,Z+

 

LoadIndirectandPost-Increment-Загрузить

 

 

 

 

Rd<

(Z),

 

 

 

 

 

 

 

 

 

косвенноинкрементироваввпоследствии

 

 

 

 

 

Z<

Z + 1

 

Íåò

 

2

LD

Rd,-Z

 

LoadIndirectandPre-Decrement-Загрузить

 

 

 

 

Z< Z - 1,

 

 

 

 

 

 

 

 

 

косвеннодекрементировавпредварительно

 

 

 

 

Rd<

(Z)

 

Íåò

 

2

LDD

Rd,Z+q

 

LoadIndirectwithDisplacement-

 

 

 

 

Rd<

(Z + q)

 

Íåò

 

2

 

 

 

 

 

Загрузитькосвеннососмещением

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

170

ÊÒÖ-ÌÊ

STS

k,Rr

 

StoreDirecttoRAM-ЗагрузитьнепосредственновСОЗУ

 

 

 

 

 

(k)< Rr

 

 

 

Íåò

3

ST

X,Rr

 

StoreIndirect-Записатькосвенно

 

 

 

 

 

(X)< Rr

 

 

 

Íåò

2

ST

X+,Rr

 

StoreIndirectandPost-Increment-Записать

 

 

 

 

 

(X)< Rr,

 

 

 

 

 

 

 

 

 

 

косвенно инкрементировав впоследствии

 

 

 

 

 

X<

X + 1

 

Íåò

2

ST

-X,Rr

 

Store Indirect and Pre-Decrement - Записать

 

 

 

 

 

X<

X - 1,

 

 

 

 

 

 

 

 

косвенно декрементировав предварительно

 

 

 

 

 

(X)<

Rr

 

 

 

Íåò

2

ST

Y,Rr

 

Store Indirect - Записать косвенно

 

 

 

 

 

(Y)<

Rr

 

 

 

Íåò

2

ST

Y+,Rr

 

Store Indirect and Post-Increment - Записать

 

 

 

 

 

(Y) <

Rr,

 

 

 

 

 

 

 

 

 

 

косвенно инкрементировав впоследствии

 

 

 

 

 

Y<

Y + 1

 

Íåò

2

ST

-Y,Rr

 

Store Indirect and Pre-Decrement - Записать

 

 

 

 

 

Y< Y - 1,

 

 

 

 

 

 

 

 

 

 

косвенно декрементировав предварительно

 

 

 

 

 

(Y)<

Rr

 

 

 

Íåò

2

STD

Y+q,Rr

 

Store Indirect with Displacement -

 

 

 

 

 

(Y + q)<

Rr

 

Íåò

2

 

 

 

 

Записать косвенно со смещением

 

 

 

 

 

 

 

 

 

 

 

 

 

ST

Z,Rr

 

Store Indirect - Записать косвенно

 

 

 

 

 

(Z)<

Rr

 

 

 

Íåò

2

ST

Z+,Rr

 

Store Indirect and Post-Increment - Записать

 

 

 

 

 

(Z)<

Rr,

 

 

 

 

 

 

 

 

 

 

косвенно инкрементировав впоследствии

 

 

 

 

 

Z<

Z + 1

 

Íåò

2

ST

-Z,Rr

 

Store Indirect and Pre-Decrement - Записать

 

 

 

 

 

Z< Z - 1,

 

 

 

 

 

 

 

 

 

 

косвенно декрементировав предварительно

 

 

 

 

 

(Z)<

Rr

 

 

 

Íåò

2

STD

Z+q, Rr

 

Store Indirect with Displacement -

 

 

 

 

 

(Z + q)<

Rr

 

Íåò

2

 

 

 

 

Записать косвенно со смещением

 

 

 

 

 

 

 

 

 

 

 

 

 

LPM

 

 

Load Program Memory - Загрузить байт памяти программ

 

 

 

R0<

(Z)

 

 

 

Íåò

3

IN

Rd,P

 

Load an I/O Port to Register - Загрузить данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

из порта I/O в регистр

 

 

 

 

 

Rd<

P

 

 

 

Íåò

1

OUT

P,Rr

 

Store Register to I/O port - Записать данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

из регистра в порт I/O

 

 

 

 

 

P<

Rr

 

 

 

Íåò

1

PUSH

Rr

 

Push Register on Stack - Поместить регистр в стек

 

 

 

 

 

STACK<

Rr

 

Íåò

2

POP

Rd

 

Pop Register from Stack - Загрузить регистр из стека

 

 

 

 

Rd<

STACK

 

Íåò

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

По-битовые команды и команды тестирования битов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ìíå-

 

Опера

Описание

Операция

 

 

Флаги

 

Ê-âî

ìî-

 

íäû

 

 

 

 

 

 

 

 

 

 

 

 

 

 

öèê-

íèêà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ëîâ

 

 

 

 

 

 

 

 

 

 

 

 

 

LSL

 

Rd

Logical Shift LeftЛогически сдвинуть влево

Rd(n+1)<

 

 

Rd(n),

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rd(0)<

0, C<

Rd(7)

 

Z,C,N,V,H

1

LSR

 

Rd

Logical Shift RightЛогически сдвинуть вправо

Rd(n)<

Rd(n+1),

 

 

 

 

 

 

 

 

 

 

 

Rd(7)<

0, C<

Rd(0)

 

Z,C,N,V

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ROL

 

 

Rotate Left trough CarryСдвинуть влево через

Rd(0)<

C,

 

 

 

 

 

 

 

 

 

 

перенос

Rd(n+1)<

Rd(n),

 

 

 

 

 

 

 

 

 

 

 

C<

Rd(7)

 

 

 

 

Z,C,N,V,H

1

ROR

 

Rd

Rotate Right trough CarryСдвинуть вправо

Rd(7)<

C,

 

 

 

 

 

 

 

 

 

 

через перенос

Rd(n)<

Rd(n+1),

 

 

 

 

 

 

 

 

 

 

 

C<

Rd(0)

 

 

 

 

Z,C,N,V

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ASR

 

Rd

Arithmetic Shift RightАрифметически

Rd(n)<

 

Rd(n+1),

 

 

 

 

 

 

 

 

 

сдвинуть вправо

n=0...6

 

 

 

 

 

 

Z,C,N,V

 

1

SWAP

Rd

Swap Nibbles - Поменять нибблы местами

Rd(3...0)< >Rd(7...4)

Íåò

 

1

BSET

 

s

Flag Set -Установить флаг

SREG(s)<

1

 

 

SREG(s)

 

1

BCLR

 

s

Flag Clear -Очистить флаг

SREG(s)<

0

 

 

SREG(s)

 

1

SBI

 

P,b

Set bit to I/O Register - Установить бит в регистр I/O

I/O (P,b)<

1

 

 

Íåò

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

171

ATMEL

 

 

 

 

ÊÒÖ-ÌÊ

 

 

 

 

 

 

 

CBI

P,b

Clear Bit in I/O Register - Очистить бит в

 

 

 

 

 

 

регистреI/O

I/O(P,b)< 0

Íåò

2

BST

Rd,b

Bit Store from Register to T - Переписать бит из

 

 

 

 

 

 

регистра во флаг T

T<

Rd(b)

T

1

BLD

Rd,b

Bit Load from T to Register -Загрузить T флаг в

 

 

 

 

 

 

бит регистра

Rd(b)< T

Íåò

1

SEC

 

Set Carry FlagУстановить флаг переноса

Ñ<

1

C

1

 

 

 

 

 

 

 

CLC

 

Clear Carry Flag -Очистить флаг переноса

C<

0

C

1

 

 

 

 

 

 

 

SEN

 

Set Negative FlagУстановить флаг

N<

1

N

1

 

 

отрицательного значения

 

 

 

 

 

 

 

 

 

 

 

CLN

 

Clear Negative Flag -Очистить флаг

 

 

 

 

 

 

отрицательного значения

N<

0

N

1

SEZ

 

Set Zero FlagУстановить флаг нулевого

 

 

 

 

 

 

значения

Z<

1

Z

1

 

 

 

 

 

 

 

CLZ

 

Clear Zero Flag - Очистить флаг нулевого

 

 

 

 

 

 

значения

Z<

0

Z

1

SEI

 

Set Global Interrupt FlagУстановить флаг

 

 

 

 

 

 

глобального прерывания

I<

1

I

1

CLI

 

Clear Global Interrupt Flag -Очистить флаг

 

 

 

 

 

 

глобального прерывания

I<

0

I

1

SES

 

Set Signed FlagУстановить флаг знака

S<

1

S

1

 

 

 

 

 

 

 

CLS

 

Clear Signed Flag - Очистить флаг знака

S<

0

S

1

SEV

 

Set Overflow FlagУстановить флаг

 

 

 

 

 

 

переполнения

V<

1

V

1

CLV

 

Clear Overflow Flag - Очистить флаг

 

 

 

 

 

 

переполнения

V<

0

V

1

 

 

 

 

 

 

 

SET

 

Set T FlagУстановить флаг T

T<

1

T

1

 

 

 

 

 

 

 

CLT

 

Clear T Flag - Очистить флаг T

T<

0

T

1

 

 

 

 

 

 

 

SEH

 

Set Half Carry FlagУстановить флаг полу

 

 

 

 

 

 

переноса

H<

1

H

1

 

 

 

 

 

 

 

CLH

 

Clear Half Carry Flag -Очистить флаг полу

 

 

 

 

 

 

переноса

H<

0

H

1

NOP

 

No Operation - Выполнить холостую команду

 

 

Íåò

1

 

 

 

 

 

 

SLEEP

 

Sleep - Установить режим SLEEP

См. описание

Íåò

1

 

 

 

команды

 

 

 

 

 

 

 

 

WDR

 

Watchdog ResetСбросить сторожевой таймер

См. описание

Íåò

1

 

 

 

команды

 

 

 

 

 

 

 

 

 

172

ÊÒÖ-ÌÊ

ADC - Add with Carry - Сложить с переносом

Описание:

Сложение двух регистров и содержимого флага переноса (С), размещение результата в регистре назначения Rd.

Операция:

(i) Rd < Rd + Rr + C

 

Синтаксис

 

 

Операнды:

 

 

 

 

Счетчик программ:

(i)

ADC Rd,Rr

 

 

0

<

d

<

31, 0

<

r

<

31

PC <

PC + 1

 

 

 

 

 

 

 

16-разрядный код операции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0001

 

 

11rd

 

 

 

 

 

dddd

 

 

 

 

rrrr

 

 

 

Булевы выражения регистра статуса (SREG)

 

 

 

I

T

H

S

V

 

 

 

N

Z

 

C

 

 

 

-

-

<=>

<=>

 

<=>

 

<=>

 

<=>

 

<=>

 

 

 

H:Rd3Rr3+Rr3+R3+R3Rd3

Устанавливается если есть перенос из бита 3, в ином случае о чищается

S:

N V, Äëÿ ïðîâерок со знаком

V:

Rd7 Rr7 R7+Rd7 Rr7 R7

 

Устанавливается если в результате операции образуется п ереполнение

 

дополнения до двух, в ином случае очищается

N:R7

Устанавливается если в результате установлен MSB, в ином слу чае

очищается

Z:Rd7 Rr7R7R7 R7 Rd7

Устанавливается если результат $00, в ином случае очищается

C:Rd7Rr7+Rr7+R7+R7Rd7

Устанавливается если есть перенос из MSB результата, в ином случае очищается

R: (Результат) соответствует Rd после выполнения команды

Пример:

 

;

СложитьR1 : R0 с R3 : R2

add r2, r0

;

Сложить младший байт

adc r3, r1

;

Сложить старший байт с переносом

Ñëîâ: 1 (2 байта)

Циклов: 1

173

ATMEL

ÊÒÖ-ÌÊ

ADD - Add without Carry - Сложить без переноса

Описание:

Сложение двух регистров без добавления содержимого флаг а переноса (С), размещение результата в регистре назначения Rd.

Операция:

(i) Rd< Rd + Rr

 

Синтаксис

 

 

 

Операнды:

 

 

 

 

 

 

Счетчик программ:

(i)

ADD Rd,Rr

 

 

0

<

d

 

<31, 0

<

r

<31

PC< PC + 1

 

 

 

 

 

 

 

16-разрядный код операции:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0000

 

11rd

 

 

 

 

 

dddd

 

 

 

 

 

rrrr

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Булевы выражения регистра статуса (SREG)

I

T

H

S

V

 

 

N

 

Z

C

-

-

<=>

 

<=>

 

<=>

 

<=>

 

<=>

 

 

<=>

 

 

H:Rd3Rr3+Rr3+R3+R3Rd3

Устанавливается если есть перенос из бита 3, в ином случае о чищается

S:N V, Для проверок со знаком

V:Rd7Rr7R7+Rd7Rr7R7

Устанавливается если в результате операции образуется п ереполнение

дополнения до двух, в ином случае очищается

N:R7 Устанавливается если в результате установлен MSB, в ином случае очищается

Z:R7 R6R5R4R3R2 R1R0

Устанавливается если результат $00, в ином случае очищается

C:Rd7Rr7+Rr7 R7+R7Rd7

Устанавливается если есть перенос из MSB результата, в ином случае очищается

R (Результат) соответствует Rd после выполнения команды Пример:

add r1,r2

; Сложить r2 с r1 (r1=r1+r2)

adc r28,r28

; Сложить r28 с самим собой

 

(r28=r28+r28)

Ñëîâ: 1 (2 байта) Циклов: 1

174