Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Система команд та їх характеристика

Поиск

 

Усі команди AVR-контролерів можна умовно розділити на чотири групи:

- арифметичні і логічні команди;

- команди розгалуження;

- команди пересилки;

- команди роботи з бітами.

В табл.2.1. приведено вся система команд 8-розрядних AVR-контролерів.

Таблиця 2.1

Мнемоніка Операнди Описання Дія Прапорці Цикл
АРИФМЕТИЧНІ І ЛОГІЧНІ КОМАНДИ
ADD Rd, Rr Скласти два регістра Rd ← Rd + Rr Z,,N,V,H  
ADC Rd, Rr Скласти з переносом Rd ← Rd + Rr + C Z,C,N,V,H  
SUB Rd, Rr Відняти два регістра Rd ← Rd - Rr Z,C,N,V,H  
SUBI Rd, K Відняти константу Rd ← Rd - K Z,C,N,V,H  
SBC Rd, Rr Відняти з переносом Rd ← Rd - Rr - C Z,C,N,V,H  
SBCI Rd, K Відняти константу з переносом Rd ← Rd – K - C Z,C,N,V,H  
AND Rd, Rr Логічне “І” двох регістрів Rd ← Rd AND Rr Z, N, V  
ANDI Rd, K Логічне “І” регістра з константою Rd ← Rd AND K Z, N, V  
OR Rd, Rr Логічне “АБО” двох регістрів Rd ← Rd OR Rr Z, N, V  
ORI Rd, K Логічне “АБО” регістра з константою Rd ← Rd OR K Z, N, V  
EOR Rd, Rr Виключаюче “АБО” двох регістрів Rd ← Rd XOR Rr Z, N, V  
COM Rd Доповнення до 1 (зворотній код) Rd ← $FF - Rd Z, C, N, V  
NEG Rd Доповнення до 2 (додатковий код) Rd ← $00 - Rd Z,C,N,V,H  
SBR Rd, K Установка біта(-ів) в регістрі Rd ← Rd OR K Z, N, V  
CBR Rd, K Скидання біта(-ів) в регістрі Rd ← Rd AND (FFh - K) Z, N, V  
INC Rd Збільшити на 1 Rd ← Rd + 1 Z, N, V  
DEC Rd Зменшити на 1 Rd ← Rd – 1 Z, N, V  
TST Rd Перевірити на 0 або мінус Rd ← Rd AND Rd Z, N, V  
CLR Rd Очистити регістр (всі біти обнуляються) Rd ← Rd XOR Rd Z, N, V  
SER Rd Установити регістр (всі біти установлюються в 1) Rd ← $FF Не змінює  
КОМАНДИ РОЗГАЛУДЖЕННЯ
RJMP k Відносний перехід PC ← PC+k+1 Не змінює  
RCALL k Відносний виклик підпрограми PC ← PC+k+1 Не змінює  
RET   Вихід із підпрограми PC ← STACK Не змінює  
RETI   Вихід із переривання PC ← STACK I  
CPSE Rd, Rr Зрівняти, якщо рівні, пропуск наступної команди if(Rd=Rr) PC←PC+2 або 3 Не змінює 1/2
CP Rd, Rr Зрівняти два регістра Rd – Rr Z,N,V,C,H  
CPC Rd, Rr Зрівняти два регістра з переносом Rd – Rr – C Z,N,V,C,H  
CPI Rd, K Зрівняти два регістра з константою Rd – K Z,N,V,C,H  
SBRC Rr, b Якщо біт в регістрі скинутий, пропуск наступної команди if(Rr(b)=0) PC←PC+2 або 3 Не змінює 1/2
SBRS Rr, b Якщо біт в регістрі встановлений, пропуск наступної команди if(Rr(b)=1) PC←PC+2 або 3 Не змінює 1/2
SBIC P, b Якщо біт в регістрі вводу-виводу скинутий, пропуск наступної команди if(P(b)=0) PC←PC+2 або 3 Не змінює 1/2
SBIS P, b Якщо біт в регістрі вводу-виводу встановлений, пропуск наступної команди if(P(b)=1) PC←PC+2 або 3 Не змінює 1/2
BRBS s, k Перехід на мітку якщо встановлений прапорець s if(SREG(s)=1) PC←PC+k+1 Не змінює 1/2
BRBC s, k Перехід на мітку якщо скинутий прапорець s if(SREG(s)=0) PC←PC+k+1 Не змінює 1/2
BREQ k Перехід на мітку якщо рівно if(Z=1) PC←PC+k+1 Не змінює 1/2
BRNE k Перехід на мітку якщо не рівно if(Z=0) PC←PC+k+1 Не змінює 1/2
BRCS k Перехід на мітку якщо встановлений перенос if(C=1) PC←PC+k+1 Не змінює 1/2
BRCC k Перехід на мітку якщо скинутий перенос if(C=0) PC←PC+k+1 Не змінює 1/2
BRSH k Перехід на мітку якщо рівно або більше if(C=0) PC←PC+k+1 Не змінює 1/2
BRLO k Перехід на мітку якщо менше if(C=1) PC←PC+k+1 Не змінює 1/2
BRMI k Перехід на мітку якщо мінус if(N=1) PC←PC+k+1 Не змінює 1/2
BRPL k Перехід на мітку якщо плюс if(N=0) PC←PC+k+1 Не змінює 1/2
BRGE k Перехід на мітку якщо рівно або більше, зі знаком if(N XOR V=0) PC←PC+k+1 Не змінює 1/2
BRLT k Перехід на мітку якщо менше нуля, зі знаком if(N XOR V=1) PC←PC+k+1 Не змінює 1/2
BRHS k Перехід на мітку якщо встановлений прапорець H if(H=1) PC←PC+k+1 Не змінює 1/2
BRHC k Перехід на мітку якщо скинутий прапорець H if(H=0) PC←PC+k+1 Не змінює 1/2
BRTS k Перехід на мітку якщо встановлений прапорець T if(H=1) PC←PC+k+1 Не змінює 1/2
BRTC k Перехід на мітку якщо скинутий прапорець Т if(H=0) PC←PC+k+1 Не змінює 1/2
BRVS k Перехід на мітку якщо встановлений прапорець V (переповнення) if(H=1) PC←PC+k+1 Не змінює 1/2
BRVC k Перехід на мітку якщо скинутий прапорець V if(H=0) PC←PC+k+1 Не змінює 1/2
BRIE k Перехід на мітку якщо дозволено переривання if(I=1) PC←PC+k+1 Не змінює 1/2
BRID k Перехід на мітку якщо заборонено переривання if(I=1) PC←PC+k+1 Не змінює 1/2
КОМАНДИ ПЕРЕСИЛКИ
LD Rd, Z Загрузити регістр безпосередньо Rd ← (Z) Не змінює  
ST Z, Rr Записати регістр безпосередньо (Z) ← Rr Не змінює  
MOV Rd, Rr Пересилка з одного регістра в другий Rd ← Rr Не змінює  
LDI Rd, K Загрузити константу Rd ← K Не змінює  
IN Rd, P Ввід із порту Rd ← P Не змінює  
OUT P, Rr Вивід в порт P ← Rr Не змінює  
КОМАНДИ РОБОТИ З БІТАМИ
SBI P, b Установити біт в регістрі вводу-виводу I/O (P, b) ← 1 Не змінює  
CBI P,b Скинути біт в регістрі вводу-виводу I/O (P, b) ← 0 Не змінює  
LSL Rd Логічний зсув вліво Rd (n+1)←Rd (n), Rd (0)←0 Z, C, N, V  
LSR Rd Логічний зсув вправо Rd (n)←Rd (n+1), Rd (7)←0 Z, C, N, V  
ROL Rd Зсув вліво через C Rd (0) ←C, Rd (n+1)←Rd (n), C←Rd (7) Z, C, N, V  
ROR Rd Зсув вправо через C Rd (7) ← C, Rd (n)←Rd (n+1), C← Rd (0) Z, C, N, V  
ASR Rd Арифметичний зсув вправо Rd (n) ← Rd (n+1), n = 0..6 Z, C, N, V  
SWAP Rd Обмін нібблів (тетрадами) Rd (3-0)←Rd(7-4), Rd 7-4) ← Rd(3-0) Не змінює  
BSET s Встановити прапорець SREG(s) ← 1 SREG(s)  
BCLR s Скинути прапорець SREG(s) ← 0 SREG(s)  
BST Rr, b Запам’ятати біт в T T ← Rr (b) T  
BLD Rd, b Прочитати біт із T Rd (b) ← T Не змінює  
SEC   Встановити перенос C ← 1 C  
CLC   Скинути перенос C ← 0 C  
SEN   Встановити прапорець N N ← 1 N  
CLN   Скинути прапорець N N ← 0 N  
SEZ   Встановити прапорець Z Z ← 1 Z  
CLZ   Скинути прапорець Z Z ← 0 Z  
SEI   Дозволити переривання I ← 1 I  
CLI   Заборонити переривання I ← 0 I  
SES   Встановити прапорець S S ← 1 S  
CLS   Скинути прапорець S S ← 0 S  
SEV   Встановити прапорець V V ← 1 V  
CLV   Скинути прапорець V V ← 0 V  
SET   Встановити прапорець T T ← 1 T  
CLT   Скинути прапорець T T ← 0 T  
SEH   Встановити прапорець H H ← 1 H  
CLH   Скинути прапорець H H ← 0 H  
NOP   Немає операції   Не змінює  
SLEEP   Зупинка (сплячий режим)   Не змінює  
WDR   Скидання охоронного таймеру   Не змінює  

 

Регістри та їх операнди:

Rd – регістр призначення (і джерело) в регістровому файлі;

Rr – регістр джерело в регістровому файлі;

K – константа;

k – мітка;

b – біт в регістровому файлі або біт в регістрі вводу-виводу;

s – біт в регістрі статусу;

X, Y, Z – регістри непрямої адресації (X=R27:R26, Y=R29:R28, Z=R31:R30);

Р – адрес порту вводу-виводу;

 

 

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

 

Позначення прапорців, які будуть використовуватись:

Û Прапорець, на який впливає команда
0: Очищений командою прапорець
1: Встановлений командою прапорець
-: Прапорець, на який не впливає команда

 

Команда ADD - Скласти без переносу

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

Операція:

(i) Rd < Rd + Rr
  Синтаксис Операнди: Лічильник програм:
(i) ADD Rd, Rr 0 < Rd < 31, 0 <Rr < 31 PC < PC + 1

 

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - <=> <=> <=> <=> <=> <=>

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16;налаштування порту В на вивід

ldi r17,5; записуємо десяткове число 5 в регістр R17

ldi r18,9; записуємо десяткове число 9 в регістр R18

add r17,r18;додаємо регістри R17 і 18

out portb,r17; вивід значення регістра R17 в порт B

 

Команда ADC - Скласти з переносом

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

Операція:

(i) Rd < Rd + Rr + C
  Синтаксис Операнди: Лічильник програм:
(i) ADC Rd, Rr 0 < Rd < 31, 0 < Rr < 31 PC < PC + 1

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - <=> <=> <=> <=> <=> <=>

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16;налаштування порту В на вивід

ldi r17,58; записуємо десяткове число 58 в регістр R17

adc r17,r17;додаємо регістр R17 з самим собою

out portb,r17; вивід значення регістра R17 в порт B

 

 

Команда SUB - відняти без переносу

Описання: Віднімання вмісту регістра-джерела Rr із вмісту регістра Rd, розміщення результату в регістрі призначення Rd.

Операція:

(i) Rd < Rd – Rr
  Синтаксис Операнди: Лічильник програм:
(i) SUB Rd, Rr 16 < Rd < 31, 0 < Rr < 31 PC < PC + 1

Булеві вирази регістра статусу (SREG)

I T H S V N Z C
- - Û Û Û Û Û Û

Приклад:

.device AT90S1200

.include "1200def.inc"

ser r16;всі біти регістра R16 встановлюються в одиницю

out ddrb,r16;налаштування порту В на вивід

ldi r17,10; записуємо десяткове число 10 в регістр R17

ldi r18,9; записуємо десяткове число 9 в регістр R18

sub r17,r18;віднімаємо від регістра R17 регістр 18

out portb,r17; вивід значення регістра R17 в порт B

 

Команда SUBI - Відняти константу

Описання: Віднімання константи із вмісту регістра, розміщення результату в регістрі призначення Rd.

Операція:

(i) Rd < Rd – K
  Синтаксис Операнди: Лічильник програм:
(i) SUBI Rd, K 16 < Rd < 31, 0 < K < 255 PC < PC + 1


Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 195; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.248.105 (0.007 с.)