
- •5.3. Микроконтроллер avr at90s8515 семейства Classic
- •Организация памяти микроконтроллера
- •Память программ
- •Память данных
- •Использование внешнего озу
- •Регистры общего назначения
- •Регистры ввода/вывода
- •Энергонезависимая память данных
- •Сторожевой таймер
- •Последовательный периферийный интерфейс spi
- •Прерывания
- •Обработка прерываний
- •Программирование микроконтроллеров
- •Защита программного кода и данных
- •Система команд и способы адресации памяти данных
- •Прямая адресация
- •Прямая адресация одного регистра общего назначения
- •Прямая адресация двух регистров общего назначения
- •Прямая адресация регистра ввода/вывода
- •Прямая адресация озу
- •Косвенная адресация
- •Простая косвенная адресация
- •Относительная косвенная адресация
- •Косвенная адресация с преддекрементом
- •Косвенная адресация с постинкрементом
- •Система команд
- •Операнды
- •Типы команд
- •Команды арифметических и логических операций
- •Команды пересылки данных
- •Команды передачи управления
- •Команды операций с битами
- •Команды управления системой
- •Пример программы и её оформление
- •Микропроцессорная система управления на базе мк at90s8515
- •7. Микроконтроллер экр1847вг6
- •8. Частотно-регулируемые привода
- •Режимы управления асинхронными электродвигателями
- •Преобразователь частоты 1336Plus
Команды операций с битами
К данной группе относятся команды (табл. 5.34), выполняющие установку или сброс заданного разряда РОН или РВВ. Причем для изменения состояния разрядов регистра состояния SREG имеются также дополнительные команды (точнее, эквивалентные мнемонические обозначения общих команд), т.к. проверка состояния разрядов именно этого регистра производится чаще всего. Условно к этой группе можно отнести также две команды передачи управления типа «провека/пропуск», которые пропускают следующую команду в зависимости от состояния разряда РОН или РВВ.
Все задействованные разряды РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров. Таким образом, после включения в программу указанного файла в командах вместо числовых значений номеров разрядов можно будет указывать их символические имена.
sbr
r16,
(1<<SE)+(1<<SM)
out
MCUUR,r16 ;
установить флаги SE
и SM
; регистра MCUUR
Следует обратить внимание, что приоритет оператора «+» выше, чем оператора «<<», для получения требуемого результата слагаемые заключены в скобки.
Всем командам данной группы требуется один машинный цикл для выполнения, за исключением случаев, когда в результате проверки происходит пропуск команды. В этом случае команда выполняется за два или три машинных цикла в зависимости от пропускаемой команды.
Команды управления системой
В эту группу входят 3 команды, показанные в табл. 5.34:
NOP- пустая команда;
SLEEP - перевод микроконтроллера в режим пониженного энергопотребления;
WDR - сброс сторожевого таймера.
Таблица 5.31. Группа команд арифметических и логических операций МК AT90S8515
Мнемокод |
Операнды |
Команды арифметических и логических операций |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
ADD |
Rd, Rr |
Rd Rd + Rr, d = 0 31, r = 0 31 |
ADD R2, R0 |
R2 R2 +R0; сложение |
Z, C, N, V, H |
1 |
ADC |
Rd, Rr |
Rd Rd + Rr + C, d = 0 31, r = 0 31 |
ADC R3, R1 |
R3 R3 + R1 + C; сложение с переносом |
Z, C, N, V, H |
1 |
ADIW |
RdL, K |
RdH : RdL RdH : RdL + K; dL {24, 26, 28, 30}; K = 0 63 |
ADIW R24, 63 |
R25:R24 R25:R24 + 63; сложение слова R24:R25 и константы 63 |
Z, C, N, V, S |
2 |
SUB |
Rd, Rr |
Rd Rd – Rr, d = 0 ¸ 31, r = 0 ¸ 31 |
SUB R13, R12 |
R13 R13 – R12; вычитание |
Z, C, N, V, H |
1 |
SUBI |
Rd, K |
Rd Rd – K, d = 16 ¸ 31, K = 0 ¸ 255 |
SUBI R22, $11 |
R22¬R22-$11; вычесть константу 11 из R22 |
Z, C, N, V, H |
1 |
SBC |
Rd, Rr |
Rd Rd - Rr – C, d = 0 ¸ 31, r = 0 ¸ 31 |
SBC R3, R1 |
R3 ¬ R3 – R1 - C; вычитание с заемом |
Z, C, N, V, H |
1 |
SBCI |
Rd, K |
Rd Rd - K – C, d = 16 ¸ 31, K = 0 ¸ 255 |
SBCI R18, $3F |
R18¬R18-$3F-C; вычесть 63 из R18 с заемом |
Z, C, N, V, H |
1 |
SBIW |
RdL,K |
RdH : RdL RdH : RdL – K; dL {24, 26, 28, 30}; K = 0 63 |
SBIW R30, 61 |
R30:R31 ¬ R30:R31 – 61; вычитание из слова R30:R31 константы 61 |
Z, C, N, V, S |
2 |
AND |
Rd, Rr |
Rd Rd Rr; d = 0 ¸ 31, r = 0 ¸ 31 |
AND R1, R2 |
R1 ¬ R1 R2, поразрядное “И” R1 и R2 |
Z, N, V, S |
1 |
ANDI |
Rd, K |
Rd Rd Ù K; d = 16 ¸ 31, K = 0 ¸ 255 |
ANDI R18, $0F |
R18¬R18Ù$0F, поразрядное “И” R18 и числа 15 |
Z, N, V |
1 |
OR |
Rd, Rr |
Rd Rd v Rr; d = 0 ¸ 31, r = 0 ¸ 31 |
OR R3, R15 |
R3¬R3 v R15, поразрядное “ИЛИ” R3 и R15 |
Z, N, V |
1 |
ORI |
Rd, K |
Rd Rd v K; d = 16 ¸ 31, K = 0 ¸ 255 |
ORI R25, $0F0 |
R25¬R25v$0F0, поразрядное “ИЛИ” R25 и числа 240 |
Z, N, V |
1 |
EOR |
Rd, Rr |
Rd
Rd
|
EOR R12, R28 |
R12¬R12 R28, поразрядное “Исключающее ИЛИ” |
Z, N, V |
1 |
COM |
Rd |
Rd $FF – Rd; d = 0 ¸ 31 |
COM R5 |
R5¬$FF-R5, побитная инверсия R5 |
Z, C, N, V |
1 |
NEG |
Rd |
Rd $00 – Rd; d = 0 ¸ 31 |
NEG R3 |
R3¬$00-R3, изменение знака (дополнительный код) R3 |
Z, C, N, V, H |
1 |
INC |
Rd |
Rd Rd + 1; d = 0 ¸ 31 |
INC R3 |
R3¬R3+1, инкрементировать значение R3 |
Z, N, V |
1 |
DEC |
Rd |
Rd Rd – 1; d = 0 ¸ 31 |
DEC R2 |
R2¬R2-1, декрементирование значения R2 |
Z, N, V |
1 |
TST |
Rd |
Rd Rd Ù Rd; d = 0 ¸ 31 |
TST R15 |
R15¬R15ÙR15; проверка на ноль либо отрицательное |
Z, N, V |
1 |
CLR |
Rd |
Rd Rd Rd; d = 0 ¸ 31 |
CLR R11 |
R11R11 R11; сбросить в 0 все биты R11 |
Z, N, V |
1 |
SER |
Rd |
Rd $FF; d = 16 ¸ 31 |
SER R18 |
R18$FF; установить в 1 все биты R18 |
None |
1 |
Таблица 5.32. Группа команд пересылки данных МК AT90S8515
Мнемокод |
Операнды |
Команды пересылки данных |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
MOV |
Rd, Rr |
Rd Rr; d = 0 31, r = 0 31 |
MOV R5, R0 |
Скопировать R0 в R5 |
None |
1 |
LDI |
Rd, K |
Rd K, d = 16 31, K = 0 255 |
LDI R28, $0F |
Загрузить константу $0F в R28 |
None |
1 |
LD |
Rd, X |
Rd (X), d = 0 ¸ 31 |
LD R3, X |
Косвенная загрузка из памяти в R3 через X |
None |
2 |
LD |
Rd, X+ |
Rd (X), X X + 1; d = 0 ¸ 31 |
LD R4, X+ |
Косвенная загрузка в R4 через X с постинкрементом X |
None |
2 |
LD |
Rd,-X |
X X-1, Rd (X); d = 0 ¸ 31 |
LD R5, -X |
Предекремент X, косвенная загрузка в R5 через X |
None |
2 |
LD |
Rd, Y |
Rd (Y), d = 0 ¸ 31 |
LD R3, Y |
Косвенная загрузка из памяти в R3 через Y |
None |
2 |
LD |
Rd, Y+ |
Rd (Y), Y Y + 1; d = 0 ¸ 31 |
LD R4, Y+ |
Косвенная загрузка в R4 через Y с постинкрементом Y |
None |
2 |
LD |
Rd, -Y |
Y Y - 1, Rd (Y); d = 0 ¸ 31 |
LD R5, -Y |
Предекремент Y, косвенная загрузка в R5 через Y |
None |
2 |
LDD |
Rd,Y+q |
Rd (Y + q); d = 0¸31, q= 0 ¸ 63 |
LD R3, Y+4 |
Косвенная загрузка из памяти в R3 через Y+4 |
None |
2 |
LD |
Rd, Z |
Rd (Z), d = 0 ¸ 31 |
LD R3, Z |
Косвенная загрузка из памяти в R3 через Z |
None |
2 |
LD |
Rd, Z+ |
Rd (Z), Z Z+1; d = 0 ¸ 31 |
LD R4, Z+ |
Косвенная загрузка в R4 через Z с постинкрементом Z |
None |
2 |
LD |
Rd, -Z |
Z Z- 1, Rd (Z); d = 0 ¸ 31 |
LD R5, -Z |
Предекремент Z, косвенная загрузка из памяти в R5 через Z |
None |
2 |
LDD |
Rd, Z+q |
Rd (Z + q); d = 0 ¸ 31, q =0¸63 |
LD R7, Z+20 |
Косвенная загрузка из памяти в R7 через Z+20 |
None |
2 |
LDS |
Rd, k |
Rd(k); d = 0 ¸ 31, k = 0¸65535 |
LDS R23, $0FF0 |
Прямая загрузка в R23 из ячейки $0FF0 внутренней SRAM |
None |
2 |
ST |
X, Rr |
(X) Rr, r = 0 ¸ 31 |
ST X, R3 |
Косвенное сохранение R3 в память через X |
None |
2 |
ST |
X+, Rr |
(X) Rr, X X + 1; r = 0 ¸ 31 |
ST X+, R4 |
Косвенное сохранение R4 через X с постинкрементом X |
None |
2 |
ST |
-X, Rr |
X X- 1, (X) Rr; r = 0 ¸ 31 |
ST –X, R5 |
Предекремент X, косвенная загрузка R5 в память через X |
None |
2 |
ST |
Y, Rr |
(Y) Rr, r= 0 ¸ 31 |
ST Y, R3 |
Косвенное сохранение R3 в память через Y |
None |
2 |
ST |
Y+, Rr |
(Y) Rr, Y Y + 1; r = 0 ¸ 31 |
ST Y+, R4 |
Косвенное сохранение R4 через Y с постинкрементом Y |
None |
2 |
ST |
-Y, Rr |
YY-1, (Y) Rr; r = 0 ¸ 31 |
ST –Y, R5 |
Предекремент Y, косвенное сохранение R5 в память через Y |
None |
2 |
STD |
Y+q, Rr |
(Y + q) Rr; r = 0 ¸ 31, q=063 |
ST Y+10, R2 |
Косвенное сохранение R3 в память через Y+10 |
None |
2 |
ST |
Z, Rr |
(Z) Rr, r = 0 ¸ 31 |
ST Z, R3 |
Косвенное сохранение R3 в память через Z |
None |
2 |
ST |
Z+, Rr |
(Z) Rr, Z Z + 1; r = 0 ¸ 31 |
ST Z+, R4 |
Косвенное сохранение R4 через Z с постинкрементом Z |
None |
2 |
ST |
-Z, Rr |
Z Z- 1, (Z) Rr; r= 0 ¸ 31 |
ST –Z, R5 |
Предекремент Z, косвенное сохранение R5 в память через Z |
None |
2 |
STD |
Z+q, Rr |
(Z + q) Rr; r = 0 ¸ 31, q=063 |
ST Z+4, R15 |
Косвенное сохранение R15 в память через Z+4 |
None |
2 |
Мнемокод |
Операнды |
Операции |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
STS |
k, Rr |
(k)Rr, r = 0 ¸ 31, k = 0¸65535 |
STS $0FF0, R8 |
Прямое сохранение из R8 в ячейку $0FF0 SRAM |
None |
2 |
LPM |
|
R0 (Z) |
LPM |
Загрузка в R0 из FLASH памяти по адресу в Z (R31:R30) |
None |
2 |
IN |
Rd, P |
RdP(I/O); d =0¸31, P(I/O)=0¸63 |
IN R18, $16 |
Ввод из регистров I/O (ввод из порта В в R18) |
None |
1 |
OUT |
P, Rr |
P(I/O)Rr; r=0¸31, P(I/O)=0¸63 |
OUT $18, R13 |
Вывод в регистры I/O (вывод из R13 в порт В) |
None |
1 |
PUSH |
Rr |
STACK Rr, r = 0 ¸ 31 |
PUSH R12 |
Занесение содержимого регистра R12 в стек |
None |
2 |
POP |
Rd |
Rd STACK, d = 0 ¸ 31 |
POP R14 |
Извлечение из стека в регистр R14 |
None |
2 |
SWAP |
Rd |
Rd(3..0) Rd(7..4), Rd(7..4) Rd(3..0); d = 0 ¸ 31 |
SWAP R3 |
Перестановка тетрад в регистре |
None |
1 |
Таблица 5.33. Группа команд передачи управления МК AT90S8515
Мнемокод |
Операнды |
Команды передачи управления |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
|
RJMP |
k |
PC PC + k +1; – 2K ≤ k ≤ +2K |
RJMP error |
Относительный переход к метке error (k=error) |
None |
2 |
|
IJMP |
|
PC Z |
IJMP |
Косвенный переход на Z R31:R30 |
None |
2 |
|
RCALL |
k |
PC PC + k + 1; – 2K ≤ k ≤ +2K |
RCALL sampl |
Относительный вызов подпрограммы sampl |
None |
3 |
|
ICALL |
|
PC Z |
ICALL |
Косвенный вызов подпрограммы по Z R31:R30 |
None |
3 |
|
RET |
|
PC(21:0)STACK - 8M |
RET |
Возврат из подпрограммы (21:0 – биты STACK) |
None |
4 |
|
RETI |
|
PC(21:0)STACK - 8M |
RETI |
Возврат из подпрограммы прерывания |
I |
4 |
|
CPSE |
Rd, Rr |
Если (Rd = Rr) тогда PC PC + 2 или 3; d = 0 ¸ 31, r = 0 ¸ 31 |
CPSE R3, R4 |
Если R3=R4, то РСРС+2 (3) - пропустить 1 (2) слово инструкции; иначе - PC=PC+1 |
None |
1/2/3 |
|
CP |
Rd, Rr |
Rd - Rr; d = 0 ¸ 31, r = 0 ¸ 31 |
CP R4, R18 |
R4-R18; cравнить R4 и R18, результат - установка флагов |
Z, N, V, C, H |
1 |
|
CPC |
Rd, Rr |
Rd - Rr – C; d = 0 ¸ 31, r = 0 ¸ 31 |
CPC R3, R25 |
R3-R25-C; сравнить R3 и R25 с учётом предыдущего переноса С, результат – установка флагов |
Z, N, V, C, H |
1 |
|
CPI |
Rd, K |
Rd – K; d = 16 ¸ 31, K = 0 ¸ 255 |
CPI R18, 10 |
R18-10; сравнить R18 с константой 10, результат – установка флагов |
Z, N, V, C, H |
1 |
|
Мнемокод |
Операнды |
Команды передачи управления |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
|
SBRC |
Rr, b |
Если Rr(b)=0, тогда PC PC + 2 (3); r = 0 ¸ 31, b (бит) = 0 7 |
SBRC R1, 6 |
Если бит 6 в R1 сброшен, то РС=РС+2 (3), пропустить 1 (2) слово инструкции, иначе - РС=РС+1 |
None |
1/2/3 |
|
SBRS |
Rr, b |
Если Rr(b)=1, тогда PC PC+2 (3); r = 0 ¸ 31, b(бит) = 0 7 |
SBRS R2, 7 |
Если бит 7 в R2 установлен, то РС=РС+2 (3), пропустить 1 (2) слово инструкции, иначе - РС=РС+1 |
None |
1/2/3 |
|
SBIC |
P, b |
Если P(b)=0, тогда PC PC + 2 (3); P (порт I/O) = 0 ¸ 31, b (бит) = 0 ¸ 7 |
SBIC $1C,1 |
Если бит EEWE в регистре I/O (EECR) сброшен, пропустить 1 (2) слово инструкции, иначе – РС=РС+1 |
None |
1/2/3 |
|
SBIS |
P, b |
Если P(b)=1, тогда PC PC + 2(3); P (порт I/O) = 0 ¸ 31, b (бит) = 0 ¸ 7 |
SBIS $10, 0 |
Если бит 0 в регистре I/O (порт D) установлен, то пропустить 1 (2) слово инструкции, иначе – РС=РС+1 |
None |
1/2/3 |
|
BRBS |
s, k |
Если SREG(s) = 1, тогда PC PC+k + 1; s= 0 ¸ 7, –64 ≤ k ≤ +63
|
BRBS 6, brst |
Перейти к метке brst, если флаг Т (бит 6) в SREG установлен, иначе РС = РС + 1 |
None |
1/2 |
|
BRBC |
s, k |
Если SREG(s) = 0, тогда PC PC+k + 1; s = 0 ¸ 7, – 64 ≤ k ≤ + 63 |
BRBC 1, brst |
Перейти к метке brst, если флаг Z (бит 1) в SREG сброшен, иначе РС = РС + 1 |
None |
1/2 |
|
BREQ |
k |
Если Z= 1, тогда PC PC + k + 1; – 64 ≤ k ≤ +63 |
BREQ eql |
Перейти к метке egl, если “равно”, иначе РС = РС+1. |
None |
1 /2 |
|
BRNE |
k |
Если Z = 0, тогда PC PC + k + 1; – 64 ≤ k ≤ +63 |
BRNE sprei |
Перейти к метке sprei, если “не равно”, иначе РС=РС+1. |
None |
1 /2 |
|
BRCS |
k |
Если C= 1, тогда PC PC + k + 1; – 64 ≤ k ≤ +63 |
BRCS sprei |
Перейти к метке sprei, если флаг переноса (C) установлен, иначе РС = РС+1. |
None |
1 /2 |
|
BRCC |
k |
Если C = 0 тогда, PC PC + k + 1; – 64 ≤ k ≤ +63 |
BRCS sprei |
Перейти к метке sprei, если флаг переноса (C) сброшен, иначе РС = РС+1. |
None |
1 /2 |
|
BRSH |
k |
Если, например, Rd Rr (C = 0), тогда PC PC + k + 1; – 64 ≤ k ≤ +63 – 64 ≤ k ≤ +63 |
BRSH sprei |
Перейти к метке sprei, если “равно или больше”, иначе РС = РС+1. |
None |
1 /2 |
|
BRLO |
k |
Если, например, Rd < Rr (C=1), тогда PC PC + k + 1; – 64 ≤ k ≤ +63 |
BRLO sprei |
Перейти к метке если “меньше”, иначе РС = РС+1. |
None |
1 /2 |
|
BRMI |
k |
Если N=1, тогда PC PC + k + 1, – 64 ≤ k ≤ +63 |
BRMI sprei |
Перейти к метке sprei, если “минус”, иначе РС = РС+1. |
None |
1 /2 |
|
BRPL |
k |
Если N = 0, тогда PC PC + k + 1; – 64 ≤ k ≤ +63 |
BRPL sprei |
Перейти к метке sprei, если “плюс”, иначе РС = РС+1. |
None |
1 /2 |
|
BRGE |
k |
Если, например, Rd Rr (N V= 0), тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRGE sprei |
Перейти к метке sprei, если “больше или равно со знаком”, иначе РС = РС+1. |
None |
1/2 |
|
Мнемокод |
Операнды |
Команды передачи управления |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
|
BRLT |
k |
Если, например, Rd Rr (N V= 1), тогда PC ¬ PC + k + 1, – 64 ≤ k ≤ +63 |
BRLT sprei |
Перейти к метке sprei, если “меньше со знаком”, иначе РС = РС+1. |
None |
1 /2 |
|
BRHS |
k |
Если H= 1, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRHS sprei |
Перейти к метке sprei, если флаг внутреннего переноса “H” установлен, иначе РС = РС+1. |
None |
1 /2 |
|
BRHC |
k |
Если H = 0, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRHC sprei |
Перейти к метке sprei, если флаг внутреннего переноса “H” сброшен, иначе РС = РС+1. |
None |
1 /2 |
|
BRTS |
k |
Если T=1, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRTS sprei |
Перейти к метке sprei, если флаг “T” установлен, иначе РС = РС+1. |
None |
1 /2 |
|
BRTC |
k |
Если T = 0, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRTC sprei |
Перейти к метке sprei, если флаг “T” сброшен, иначе РС = РС+1. |
None |
1 /2 |
|
BRVS |
k |
Если V= 1, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRVS sprei |
Перейти к метке sprei, если флаг переполнения “V” установлен, иначе РС = РС+1. |
None |
1 /2 |
|
BRVC |
k |
Если V = 0, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 sprei - метка |
BRVC sprei |
Перейти к метке sprei, если флаг переполнения “V” сброшен, иначе РС = РС+1. |
None |
1 /2 |
|
BRIE |
k |
Если I = 1, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRIE sprei |
Перейти к метке sprei, если флаг прерывания “I” установлен, иначе РС = РС+1. |
None |
1 /2 |
|
BRID |
k |
Если I = 0, тогда PC ¬ PC + k + 1; – 64 ≤ k ≤ +63 |
BRID sprei |
Перейти к метке sprei, если флаг прерывания “I” сброшен, иначе РС = РС+1. |
None |
1 /2 |
Таблица 5.34. Группа команд работы с битами МКAT90S8515
Мнемокод |
Операнды |
Команды работы с битами |
Примеры записи команд |
Описание команд |
Флаги |
Циклы |
SBI |
P, b |
I/O(P,b) 1; b=0¸7, P(I/O)=0¸31 |
SBI $1C, 0 |
Установка бита (0 - EERE) в регистре I/O (EECR) |
None |
2 |
CBI |
P, b |
I/O(P,b) 0; b=0¸7, P(I/O)=0¸31 |
CBI $12, 6 |
Сброс бита (6) в регистре I/O (порт D) |
None |
2 |
SBR |
Rd, K |
Rd Rd v K; d = 16 ¸ 31, K = 0 ¸ 255 |
SBR R17, 6 SBR R19, $0F0 |
R17¬R17 v 6; установить биты 2 и 3 в R17 R19¬R19 v $0F0; установить биты 5, 6, 7, 8 в R19 |
Z, N, V |
1 |
CBR |
Rd, K |
Rd Rd Ù ($FF - K); d = 16 ¸ 31, K = 0 ¸ 255 |
CBR R20, $0F0 CBR R19, 1 |
R20¬R20Ù($0FF-$0F0), сброс бит 5¸8 в R20 R19¬R19Ù(255-1), сброс 0 бита в R19 |
Z, N, V |
1 |
LSL |
Rd |
Rd(n+1)Rd(n), Rd(0)0; d=0¸31 |
LSL R3 |
Логический сдвиг влево. |
Z,C,N,V |
1 |
LSR |
Rd |
Rd(n)Rd(n+l), Rd(7)0; d=0¸31 |
LSR R3 |
Логический сдвиг вправо |
Z,C,N,V |
1 |
ROL |
Rd |
Rd(0) C, Rd(n+1) Rd(n), C Rd(7); d = 0 ¸ 31 |
ROL R2 |
Циклический сдвиг влево через С |
Z,C,N,V |
1 |
ROR |
Rd |
Rd(7) C, Rd(n) Rd(n+1), C Rd(0); d = 0 ¸ 31 |
ROR R4 |
Циклический сдвиг вправо через С |
Z,C,N,V |
1 |
ASR |
Rd |
Rd(n)Rd(n+1), n=0..6; d = 0 ¸ 31 |
ASR R15 |
Арифметический сдвиг вправо |
Z,C,N,V |
1 |
BSET |
s |
SREG(s) 1; s = 0 ¸ 7 |
BSET 7 |
Установка флага "s" в SREG (например, бит 7 I=1) |
SREG(s) |
1 |
BCLR |
s |
SREG(s) 0; s = 0 ¸ 7 |
BCLR 0 |
Сброс флага "s" в SREG (например C=0) |
SREG(s) |
1 |
BST |
Rr, b |
T Rr(b); r = 0 ¸ 31, b = 0 ¸ 7 |
BST R3, 3 |
Сохранить бит из регистра в Т (например, бит 3 из R3) |
T |
1 |
BLD |
Rd, b |
Rd(b) T; d = 0 ¸ 31, b = 0 7 |
BLD R0, 4 |
Загрузить флаг Т в регистр (например в бит 4 регистра R0) |
None |
1 |
SEC |
|
C 1 |
SEC |
Установить флаг С в SREG |
C |
1 |
CLC |
|
C 0 |
CLC |
Сбросить флаг переноса С |
C |
1 |
SEN |
|
N 1 |
SEN |
Установить флаг отрицательного числа N |
N |
1 |
CLN |
|
N 0 |
CLN |
Сбросить флаг отрицательного числа N |
N |
1 |
SEZ |
|
Z 1 |
SEZ |
Установить флага нуля Z |
Z |
1 |
CLZ |
|
Z 0 |
CLZ |
Сбросить флаг нуля Z |
Z |
1 |
SEI |
|
I 1 |
SEI |
Установить флаг прерываний I |
I |
1 |
CLI |
|
I 0 |
CLI |
Сбросить флаг прерываний I |
I |
1 |
SES |
|
S 1 |
SES |
Установить флаг числа со знаком S |
S |
1 |
CLS |
|
S 0 |
CLS |
Сбросить флаг числа со знаком S |
S |
1 |
SEV |
|
V 1 |
SEV |
Установить флаг переполнения V |
V |
1 |
CLV |
|
\/ 0 |
CLV |
Сбросить флаг переполнения V |
V |
1 |
SET |
|
T 1 |
SET |
Установить флаг Т |
T |
1 |
CLT |
|
T 0 |
CLT |
Сбросить флаг Т |
T |
1 |
SEH |
|
H 1 |
SHE |
Установить флаг внутреннего переноса Н |
H |
1 |
CLH |
|
H 0 |
CLH |
Сбросить флаг внутреннего прерывания Н |
H |
1 |
NOP |
|
|
NOP |
Нет операции (пустой цикл, используется как задержка) |
None |
1 |
SLEEP |
|
Смотри специальное описание |
SLEEP |
Спать (перевод в режим пониженного энергопотребления) |
None |
3 |
WDR |
|
Смотри специальное описание |
WDR |
Сброс сторожевого таймера |
None |
1
|
Ниже приведён пример программы, написанной на языке АССЕМБЛЕР микроконтроллера AT90S8515.
Задание. Составить программу, реализующую действие А-В. Если в результате выполнения операции бит заёма установлен, то вызвать подпрограмму START, в которой результат записать в ячейку 160 ОЗУ. Если не установлен, то выполнить действие А+В и результат вывести в порт D (А находится в R2, В находится в R5).