Микроконтроллеры семейства AVR фирмы Atmel
Таблица 4
№ |
Операция |
Мнемокод команды |
Признаки результата |
H |
S |
V |
N |
Z |
C |
32 |
(Rd+1, Rd)+K→ Rd+1,Rd |
ADIWRd, K |
|
+ |
+ |
+ |
+ |
+ |
33 |
(Rd+1,Rd)-K→ Rd+1,Rd |
SBIW Rd, K |
|
+ |
+ |
+ |
+ |
+ |
d=24, 26, 28,30; K=0-63 |
6.2 Система команд
Таблица 5
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
34 |
(Ячk) → Rd |
LDS Rd, K |
35 |
(Rr) →Ячk |
STS k, Rr |
d, r=0-31; k – адрес из адресного
пространства SRAM |
|
|
|
|
|
|
|
|
Таблица 6
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
36 |
(Яч(X)) → Rd |
LD Rd, X |
37 |
(Rr) →Яч(X) |
ST X, Rr |
38 |
(Яч(Y)) → Rd |
LD Rd, Y |
39 |
(Rr) →Яч(Y) |
ST Y, Rr |
40 |
(Яч(Z)) → Rd |
LD Rd, Z |
41 |
(Rr) →Яч(Z) |
ST Z, Rr |
42 |
1.(Яч(X)) → Rd2. (X)+1→X |
LD Rd, X+ |
43 |
1.(Rr)→Яч(X) 2.(X)+1→X |
ST X+, Rr |
44 |
1.(Яч(Y)) → Rd2. (Y)+1→Y |
LD Rd, Y+ |
45 |
1.(Rr)→Яч(Y) 2.(Y)+1→Y |
ST Y+, Rr |
46 |
1.(Яч(Z)) → Rd2. (Z)+1→Z |
LD Rd, Z+ |
47 |
1.(Rr)→Яч(Z) 2.(Z)+1→Z |
ST Z+, Rr |
48 |
1.(X)-1→X 2.
(Яч(X))→ Rd |
LD Rd, -X |
49 |
1.(X)-1 →X 2.(Rr)→Яч(X) |
ST -X, Rr |
50 |
1.(Y)-1→Y 2.
(Яч(Y))→ Rd |
LD Rd, -Y |
51 |
1.(Y)-1 →Y 2.(Rr)→Яч(Y) |
ST -Y, Rr |
52 |
1.(Z)-1→Z 2.
(Яч(Z))→ Rd |
LD Rd, -Z |
53 |
1.(Z)-1 →Z 2.(Rr)→Яч(Z) |
ST -Z, Rr |
54 |
(Яч(Y)+q) → Rd |
LDD Rd, Y+q |
55 |
(Rr)→Яч(Y)+q |
STDY+q, Rr |
56 |
(Яч(Z)+q) → Rd |
LDD Rd, Z+q |
57 |
(Rr)→Яч(Z)+q |
STDZ+q, Rr |
58 |
1.(SP)+1→SP 2.
(СТЕК)→ Rd |
POP Rd |
59 |
1.(Rr)-1→СТЕК 2.(SP)-1→SP |
PUSH Rr |
d, r = 0-31; q=0-63 |
Таблица 7
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
60 |
(PrP) → Rd |
IN Rd, P |
61 |
(Pr) →PrP |
OUT P,Pr |
d, r = 0-31; P=0-63=S00-$3F |
|
|
|
|
|
|
|
|
Таблица 8
№ |
Операция |
Мнемокод команды |
(Z.15-1) – адрес в FlashROM
Z.0 = 0 – мл. байт; Z.0 =1 –ст. байт
|
62 |
(Яч(Z))→ R0 |
LPM |
Таблица 9
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
63 |
T→ Rd.b |
BLD Rd, b |
64 |
Rr.b →T |
BSTRr, b |
65 |
0→ PrP.b |
CBI P, b |
66 |
1→PrP.b |
SBI P, b |
67 |
0→ SREG.b |
BLSR b |
68 |
1→SREG.b |
SSET b |
d, r = 0-31; P=0-31 (!); b= 0-7 |
|
|
|
|
|
|
|
|
Таблица 10
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
69 |
0→I |
CLI Rd, X |
70 |
1 →I |
SEI |
71 |
0 →T |
CLT |
72 |
1 →T |
SET |
73 |
0→H |
CLH |
74 |
1 →H |
SEH |
75 |
0→S |
CLS |
76 |
1→S |
SES |
77 |
0→V |
CLV |
78 |
1→V |
SEV |
79 |
0→N |
CLN |
80 |
1→N |
SEN |
81 |
0→Z |
CLZ |
82 |
1→Z |
SEZ |
83 |
0→C |
CLC |
84 |
1→C |
SEC |
Таблица 11
№ |
Операция |
Мнемокод команды |
№ |
Операция |
Мнемокод команды |
85 |
(PC)+1+k→PC |
RJMP k |
86 |
(Z) →PC |
IJMP |
87 |
(PC)+→СТЕК
(SP)-2→SP
(PC)+1+k→PC
|
RCALL k |
88 |
(PC)+1→СТЕК
(SP)-2→SP
(Z) →PC
|
ICALL |
89 |
(SP)+2→ SP
(СТЕК) →PC
|
RET |
90 |
(SP)+2→SP
(СТЕК) →PC
1→I
|
RETI |
k= -2048 - +2047 |
|
|
|
|
|
|
|
|
Таблица 12
№ |
Условие |
Мнемокод команды |
№ |
Условие |
Мнемокод команды |
91 |
I = 0 |
BRID k |
92 |
I = 1 |
BRIE k |
93 |
T = 0 |
BRTC k |
94 |
T = 1 |
BRTS k |
95 |
H = 0 |
BRHC k |
96 |
H = 1 |
BRHS k |
97 |
S = 02. (X)+1→X |
BRGE k |
98 |
S = 1 |
BRLT k |
99 |
V = 0 |
BRVC |
100 |
V = 1 |
BRVS k |
101 |
N = 0 |
BRPL k |
102 |
N = 1 |
BRMI k |
103 |
Z = 0 |
BRNE k |
104 |
Z = 1 |
BREQ k |
105 |
C = 0 |
BRCC k |
106 |
C = 1 |
BRCS k |
107 |
C = 0 |
BRSH k |
108 |
C = 1 |
BRLO k |
109 |
SREG.b = 0 |
BRBC b, k |
110 |
SREG.b = 1 |
BRBS b, k |
k= -64 - +63; b = 0 - 7 |
Таблица 13
№ |
Условие |
Мнемокод команды |
№ |
Условие |
Мнемокод команды |
111 |
Rr.b = 0 |
SBRC Rr, b |
112 |
Rrb = 1 |
SBRS Rr, b |
113 |
PrP.b = 0 |
SBIC P, b |
114 |
PrP.b = 1 |
SPIS P, b |
115 |
(Rd) = (Rr) |
CPSE Rd, Rr |
|
|
|
d, r= 0 – 31; P = 0 – 31 (!); b = 0 -
7 |
Таблица 14
№ |
Операция |
Мнемокод команды |
116 |
MK → режим энергосбережения |
SLEEP |
117 |
Перезапуск WDT |
WDR |
118 |
Нет |
NOP |
6.3 Команды регистровых
операций
В группу регистровых
операций входят пересылочные, арифметические и логические операции. Команды
регистровых операций описаны в табл. 2, 3 и 4 Машинные коды всех команд
регистровых операций имеют формат «слово», команды №№ 1 – 31 выполняются за
один такт, а команды №№ 32 и 33 – за два такта.
При описании операций в
табл. 2 – 4 используются следующие обозначения:
▪ Rd, Rr –
регистры общего назначения с номерами d и r соответственно;
▪ (Rd), (Rr) –
байты в регистрах Rd и Rr соответственно;
▪ Rd.b – разряд b
(b = 0 – 7) регистра Rd, бит в разряде Rd.b;
▪ $ - указатель
шестнадцатеричного кода;
▪ ^, ˅,
- знаки логических операций И, ИЛИ, исключающее ИЛИ соответственно;
▪
( ), ( ), ( ) – знаки операций НЕ, сдвиг кода вправо, сдвиг кода влево
соответственно.
Арифметические операции
– сложение и вычитание – могут выполняться с числами без знака в двоичном коде
и с числами со знаком в дополнительном двоичном коде. В отличие от
микроконтроллеров многих других семейств, в которых вычитание сводится к
сложению с числом с изменённым знаком (X–Y = X + (-Y)), в микроконтроллерах
семейства AVR вычитание выполняется с помощью аппаратного двоичного вычитателя.
При выполнении
арифметических и логических операций кроме кода результата формируются значения
признаков результата. При выполнении операций сравнения (команды №№ 18, 19 и
27) формируются только значения признаков результата.
Значения признаков
результата представлены состоянием разрядов регистра состояния SREG (№$33F).
Используются шесть признаков результата, которым присвоены имена C (SREG.0),
Z(SREG.1) N (SREG.2), V (SREG.3, S (SREG.4) и H (SREG.5). В табл. 2.1 – 2.3
признаки, значения которых формируются при выполнении команд, отмечены знаком
«+» или указано их название.
При выполнении разных
операций значение признаков формируется по разным правилам.
Признак C принимает
единичное значение:
▪ при появлении
единицы переноса из старшего разряда при выполнении операции сложения (команды
№№ 14, 15 и 32);
▪ при появлении
единицы займа в старший разряд при выполнении операции сложения (команды №№ 4,
16, 17, 18, 19, 25, 26, 27 и 33);
▪ при выходе
единицы за пределы разрядной сетки при выполнении операции сдвига (команды №№
7, 8, 9, 10 и 11).
Единичное значение
признака C при выполнении операций сложения и вычитания с числами без знака
свидетельствует о получении неправильного результата операции вследствие
переполнения разрядной сетки.
Признак Z принимает
единичное значение при получении нулевого результата операции. При выполнении
операции вычитания с учётом займа (команды №№ 17, 19 и 26) Z = 1, если нулевой
результат получен при выполнении данной и предшествующей операций.
Признак N имеет
значение, равное значению старшего разряда кода результата. При выполнении
арифметических операций с числами со знаком и отсутствии переполнения разрядной
сетки он представляет знак результата.
Признак V принимает
единичное значение, если при выполнении арифметической операции с числами со
знаком возникло переполнение разрядной сетки.
Признак S = NV представляет
знак результата при выполнении арифметических операций с числами со знаком вне
зависимости от переполнения разрядной сетки. При переполнении разрядной сетки
(V = 1) знак результата противоположен значению в старшем разряде кода
результата.
Признак H принимает
единичное значение при наличии единицы переноса из разряда D3 в разряд D4 при
выполнении операции вычитания и при передаче единицы из разряда D3 в разряд D4
при выполнении операции кода влево.
6.4 Команды с
обращением по адресу SRAM
По командам с
обращением по адресу в адресном пространстве SRAM выполняются операции
пересылки (копирования) байта между регистром общего назначения и элементом,
которому соответствует адрес в адресном пространстве SRAM. Таким элементом
может быть регистр общего назначения (адреса от $00 до $1F), регистр
ввода-вывода (адреса от $20 до $5F), ячейка памяти в SRAM (адреса от $60 до
максимального адреса в SRAM), ячейка памяти в ERAM(адреса от максимального
адреса в SRAM +1 до максимального адреса в ERAM).
Команды с обращением по
адресу в адресном пространстве SRAM описаны в табл. 2.4 и 2.5.
Машинные коды команд №№
34 и 35 имеют формат «2 слова», машинные коды остальных команд – формат
«слово». Команды выполняются за 2 такта, а при обращении к ячейкам в ERAM–за 3
такта. В случае необходимости в цикл выполнения команды при обращении к ERAM может
быть введён дополнительный такт ожидания.
В табл.2.4 и 2.5
используются следующие новые обозначения:
▪ ЯчА – регистр
общего назначения, регистр ввода-вывода, ячейка памяти в SRAM, ячейка памяти в
ERAM, к которым производится обращение с использованием адреса А из адресного
пространства SRAM;
▪ (ЯчА) – байт в
ЯчА;
▪X, Y, Z – пара
регистров общего назначения X (R26, R27), Y (R28, R29), Z (R30, R31)
соответственно;
▪ (X), (Y), (Z) –
слово в паре регистров X, Y, Z соответственно;
▪ СТЕК – ЯчА, к
которой производится обращение с использованием адреса, хранящегося в регистре
– указателе стека SP;
▪ (СТЕК) – байт в
СТЕК, е;
▪ (SP) – код
числа в регистре SP.
В командах №№ 34 и 35
реализуется прямая адресация. Адрес байта (A = k) указывается в коде команды.
В командах №№ 36 – 57
реализуется косвенная адресация. Адрес байта находится в паре регистров X, Y или
Z. При выполнении команд №№ 48 – 53 до выполнения пересылки адрес в паре
регистров аппаратно уменьшается на единицу. При выполнении команд №№ 54 – 57
адрес, по которому производится обращение, равен адресу в паре регистров Y или
Z, увеличенному на единицу q, которое указано в коде команды. Адрес в паре
регистров остаётся без изменения.
В командах №№ 58 и 59 в
качестве кода адреса используется код, находящейся в регистре-указателе стека.
При запуске микроконтроллера в регистр-указатель стека заносится код числа 0.
Для нормальной работы стека в регистр – указатель стека в начале программы
необходимо занести код другого числа. Обычно в качестве такого числа используют
старший адрес в SRAM. Например, для микроконтроллера типа 8515 таким адресом
является число $025F.
6.5 Команды с
обращением к регистрам ввода-вывода
По командам с
обращением к регистрам ввода-вывода выполняются операции пересылки
(копирования) байта между регистром общего назначения и регистром ввода-вывода
с использованием для выбора регистра ввода-вывода его номера ($00 - $3F).
Команды с обращением к регистрам ввода-вывода описаны в табл. 6. Машинные коды
команд имеют формат «слово». Команды выполняются за один такт.
В табл. 6 используются
следующие новые обозначения:
▪ PrP – регистр
ввода-вывода с номером P;
▪ (PrP) – байт в
регистре PrP.
При записи мнемокода
команды вместо конкретного номера регистра может использоваться его
символическое имя. Все регистры ввода-вывода имеют штатные имена. У
микроконтроллеров разных типов регистры ввода-вывода, имеющие одинаковые имена,
могут иметь разные имена. При записи в мнемокодах имён регистров вместо их
номера необходимо использовать версию AVR-Ассемблера для микроконтроллера
данного типа.
6.6 Команда с
обращением к FlashROM
По команде с обращением
к FlashROM выполняется пересылка (копирование) байта из половины ячейки памяти
в FlashROM в регистр общего назначения R0. Команда описана в табл. 2.7.
Машинный код команды имеет формат «слово». Команда выполняется за три такта.
До выполнения команды
необходимо адрес, соответствующий ячейке памяти в FlashROM, в которой хранится
константа, умножить на 2 и записать в пару регистров Z (№№ $30, $31).
При умножении на 2
(сдвиг кода влево на один разряд) в младшем разряде регистра ZL ($30)
оказывается цифра 0. При нулевом значении младшего разряда выбирается байт из
младшей половины ячейки FlashROM. Для выбора байта из старшей половины ячейки
необходимо число, код которого находится в паре регистров Z, увеличить на 1 с
использованием команды № 33 с мнемокодом ADIWR30, 1 или ADIWZL, 1.
Запись констант в
FlashROM выполняется при программировании микроконтроллера.
6.7 Команды операций с
битами
Команды операций с
битами описаны в табл. 2.8 и 2.9. Машинные коды всех команд имеют формат
«слово». Команды №№ 65 и 66 выполняются за 2 такта, остальные команды – за 1
такт.
В табл. 2.8
используется следующее новое обозначение:
▪ PrP.b – разряд
b (b = 0 – 7) регистра ввода-вывода с номером P (P = $00 - $1F (!)), бит в разряде
PrP.b.
По командам №№ 63 и 64
выполняется пересылка (копирование) бита между указанным разрядом регистра
общего назначения и разрядом Tрегистра SREG.
По командам №№ 65 и 66
устанавливается в требуемое состояние (0 или 1 соответственно) указанный разряд
регистра ввода-вывода, а по командам №№ 67 и 68 – указанный разряд регистра
SREG.
При записи мнемокода
команд №№ 65 и 66 вместо номера регистра (P) может быть указанно его
символическое имя, а вместо номера разряды (b) –символическое имя разряда. В микроконтроллерах
семейства AVR разряды многих регистров ввода-вывода имеют штатные имена. Эти
имена приводятся в тексте при рассмотрении устройств, в которых эти разряды
используются.
В микроконтроллерах
некоторых типов разряды одноимённых регистров с одинаковыми именами имеют
разные номера. При использовании штатных имён регистров ввода-вывода в штатных
имён разрядов в них необходимо использовать версию AVR Ассемблера для
микроконтроллера соответствующего типа.
При назначении штатного
имени разряда подразумевалось, что этот разряд принадлежит определённому
регистру ввода-вывода, однако в мнемокоде команд №№ 65 и 66 необходимо
указывать и имя/номер регистра и имя разряда.
Требуемое значение бита
(0 или 1) в разрядах регистров ввода-вывода с номерами от $20 до
$3Fустанавливается с использованием команд регистровых операций с мнемокодами
CBR (№ 29) и SBR (№ 31) соответственно.
В табл. 10 приведены
мнемокоды команд, по которым устанавливаются в определённое состояние (0 или 1)
разряды регистра SREG без указания в мнемокоде команды номера разряда.
6.8 Команды управления
ходом программы
В группу команд
управления ходом программы входят команды безусловного и условного переходов,
перехода в энергосберегающий режим, перезапуска сторожевого таймера и
«холостая» команда.
В табл. 11 описаны
команды безусловного перехода (№№ 85 и 86), безусловного перехода с возвратом
(№№ 87 и 88), возврата из подпрограммы (№89) и возврата из прерывающей
программы (№90). В таблице используются следующие новые обозначения:
▪ PC – счётчик команд;
▪ (PC) – код
числа в счётчике команд;
▪ k – приращение
числа в счётчике команд.
При записи программы на
языке ассемблера в мнемокодах команд №№85 и 87 вместо приращения k указывается
метка (символический адрес), записанная перед мнемокодом команды, к выполнению
которой нужно перейти. Приращение вычисляется и помещается в машинный код
команды в процессе ассемблирования.
Машинные коды команд,
описанные в табл. 11, имеют формат «слово». Команды безусловного перехода (№№
85 и 86) выполняются за 2 такта, команды безусловного перехода а возвратом (№№
87 и88) – за 3 такта, команды возврата (№№89 и 90) – за 4 такта.
Группа команд условного
перехода делится на две группы. В командах первой подгруппы в качестве условия
используется равенство нулю или равенство единице одного из битов в регистре
SREG. Условия и мнемокоды команд первой подгруппы приведены в табл. 12. Если
условие выполняется, совершается переход по адресу, который формируется с
использованием приращения k, указанного в коде команды ((PC) + 1 +k→PC;
-64 ≤k≤ 63).
Если условие не
выполняется, происходит переход к следующей команде в программе ((PC) + 1→PC).
При записи программы на
языке ассемблера в мнемокоде команд вместо приращения k указывается метка
(символический адрес), записанная перед мнемокодом команды, к выполнению
которой нужно перейти, если условие выполняется.
Машинные коды команд
первой подгруппы имеют формат «слово». При выполнении условия команда
выполняется за 2 такта, при выполнении условия – за 1 такт.
Если условие не
выполняется, совершается переход к очередной команде в программе ((PC) +1→PC).
Если условие выполняется, происходит переход к выполнению команды, следующей за
очередной ((PC) + 1 + 1/2→PC). Приращение числа в счётчике команд (1 или
2) определяется форматом машинного кода очередной команды (1 слово или 2 слова
соответственно).
Машинные коды команд
условного перехода второй подгруппы имеют формат «слово». Команды выполняются
за один такт, если условие не выполняется, за 2 такта, если условие выполняется
и очередная команда (K1) имеет формат «слово», или за 3 такта, если условие не
выполняется и очередная команда (K1) имеет формат «2 слова».
Список литературы
1.
Белов
А.В. Самоучитель разработчика устройств на микроконтроллерах AVR . –
Санкт-Петербург, «Наука и техника» 2010 г.
2.
http://www.atmel.ru/
3.
ATtiny
2313 Data Sheet.
4.
Гребнев
В.В. Микроконтроллеры семейства AVRфирмы Atmel. –М. «ИП РадиоСофт» 2002 г.
|