Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





ПРИЛОЖЕНИЕ 2
Команды Atmel AVR
Система команд микроконтроллеров Atmel AVR довольно обширна и включает в себя от 90 до 133 команд, в зависимости от разновидности микроконтроллера. Далее основные команды перечислены по группам. Приведенных команд в принципе достаточно для того, чтобы составить большинство законченных программ для МК AVR, хотя многие полезные, но редко употребляемые команды здесь отсутствуют. Потому для полноценной работы следует иметь полный справочник по командам. Краткие таблицы команд прилагаются ко всем описаниям МК, полный перечень команд на русском имеется в пособиях [1] и [2] (берегитесь неточностей, которые встречаются в первых изданиях этих пособий!). Официальный перечень команд на английском (AVR Instruction Set) можно скачать с сайта atmel.com в виде PDF-документа.

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

В таблицах приняты следующие сокращения и обозначения:
□ РОН— регистр общего назначения, обозначается Rd (приемник) или Rr (источник), где d или г— номер регистра;
□ РВВ — регистр ввода-вывода обозначается Р;
□ PC — счетчик команд (программный счетчик, Program Counter);
□ К — константа (в том числе адрес);
□ ь или п — номер бита;
□ s — произвольный флаг в регистре флагов SREG;
□ с — флаг переноса в регистре флагов SREG (устанавливается при возникновении переноса при арифметических операциях);
□ z — флаг нуля (устанавливается по равенству операндов при сравнении). Здесь он обозначен маленькой буквой, чтобы не путать этот флаг с парой регистров R3l:R30, которые задействованы в командах переноса данных и также обозначаются буквой z;
□ х — пара регистров R27: R26; П Y — пара регистров R29: R28;
ПА— означает, что участвует любой из двухбайтовых регистров R27:R26 (X), R29:R28 (Y) ИЛИ R31:R30 (Z).

Арифметические и логические команды
Команда Операнды Описание Операция
ADD Rd, Rr Сложение двух РОН без учета переноса Rd <- Rd + Rr d = 0..31 г = 0..31
ADC Rd, Rr Сложение двух РОН с учетом переноса Rd <- Rd + Rr + с d = 0..31 r = 0..31
ADIW Rd, К Сложение регистровой пары с константой Rd+l:Rd <- Rd+l:Rd + К d = 24,26,28,30 К = 0..63
SUB Rd, Rr Вычитание двух РОН без учета переноса Rd <- Rd - Rr d = 0..31 r = 0..31
SBC Rd, Rr Вычитание двух РОН с учетом переноса Rd <- Rd - Rr - с d = 0..31 r = 0..31
SBIW Rd, К Вычитание константы из регистровой пары Rd+l:Rd <- Rd+l:Rd - К d = 24,26,28,30 К = 0..63
SUBI Rd, К Вычитание константы из регистра Rd <— Rd — К d = 16..31 К = 0..255
SBCI Rd, К Вычитание константы из регистра с учетом переноса Rd <— Rd — К — с d = 16..31 К = 0..255
INC Rd Увеличить на единицу Rd <- Rd + 1 d = 0..31

Команды сравнения
В операциях сравнения с регистрами выполняются те же действия, что и в соответствующих арифметических и логических операциях, однако результат никуда не помещается (и, соответственно, операнды не портятся), лишь устанавливаются флаги (с и z) в регистре флагов SREG. Значением этих флагов в дальнейшем определяется работа тех команд условного перехода, которые употребляются в паре с командами сравнения (исключение составляет команда CPSE, которая содержит сравнение и переход "в одном флаконе" — см. перечень команд условного перехода далее).

Команда Операнды Описание Операция
CP Rd,Rr Сравнение двух регистров Rd <- Rd - Rr d = 0..31 г = 0..31
СРС Rd,Rr Сравнение двух регистров с учетом переноса Rd <— Rd — Rr — С d = 0..31 r = 0..31
СР1 Rd, К Сравнение регистра с константой Rd - К d = 16..31 К = 0..255
TST Rd Проверка на 0 или отрицательное значение (операция "логическое И" регистра с самим собой) Rd <— Rd л Rd ' d = 0..31

Команды передачи управления
Команды передачи управления делятся на команды безусловного перехода и похожие на них команды вызова подпрограмм (последние от первых отличаются тем, что автоматически размещают в стеке содержимое счетчика команд для последующего возврата из подпрограммы), и на команды условного перехода, т. е. нарушения последовательности выполнения операторов по какому-то условию. Большинство таких команд оперируют с адресом в памяти (К) оператора, на который производится переход. В тексте ассемблерных программ абсолютные или относительные числа, обозначающие адрес, в команды передачи управления не подставляются, вместо них указывают метки, которые затем компилятор интерпретирует, как абсолютный адрес. Команды, начинающиеся с букв "BR" (от Branch— "ветка"), предполагают предварительный вызов одной из команд, модифицирующих флаги z или с (обычно это команды сравнения).

Команды безусловного перехода и вызова подпрограмм
Команда Операнды Описание Операция
CALL к Абсолютный вызов подпрограммы STACK <— PC + 2 PC <— К
К = 0..655361
RCALL к Относительный вызов подпрограммы STACK <— PC + 1 PC <— PC + К + 1 К = -2048..2048
JMP к Абсолютный переход PC <— k К = 0..4 M
RJMP к Относительный переход PC <— PC + К + 1 К = -2048..2048
RET - Возврат из подпрограммы PC <- STACK
RETI - Возврат из подпрограммы обработки прерывания PC <- STACK * Для устройств с максимально возможным объемом памяти программ до 64 К слов (128 кбайт).

Команды проверка-пропуск и команды условного перехода
Команда Операнды Описание Операция
SBRC Rr,b Пропустить след. команду, если разряд РОН сброшен If Rr(b) = 0 then PC <—. PC + 2 (or 3*) else PC ч-.РС + 1
r = 0..31 b = 0..7
(продолжение)

Команда Операнды ' Описание Операция
SBRS Rr,b Пропустить след. команду, если разряд РОН установлен If Rr(b) = 1 then PC <—.PC + 2 (or 3) else PC <—.PC + 1
r = 0..31 b = 0..7
SBIC P,b Пропустить след. команду, если разряд РВВ сброшен If A(b) =0 then PC <—. PC + 2 (or 3*) else PC <-.PC + 1
P = 0..31** b = 0..7
SBIS P,b Пропустить след. команду, если разряд РВВ установлен If A(b) = 1 then PQ Ч-.РС + 2 (or 3-) else PC 4-.PC + 1
P = 0. .31— b = 0. .7
CPSE Rd,Rr Пропустить, если равно if (Rd = Rr) then PC <— PC + 2 or 3 else PC <- PC + 1
d = 0..31 r = 0..31
BRNE К Перейти, если не равно If Rd * Rr (z = 0) then PC'<- PC + k + 1, else PC <- PC + 1
К = -63...63
BREQ К Перейти, если равно If Rd = Rr (z = 1) then PC <-PC + k + 1, else PC <— PC + 1
К = -64...63
BRSH К Перейти, если больше или равно If Rd >.Rr (c = 0) then PC <— PC + k + 1, else PC -f- PC + 1
К = -64...63
BRLO К Перейти, если меньше If Rd <.Rr (c = 1) then PC <— PC + k + 1, else PC <- PC + 1
К = -64...63
BRCC К Перейти, если нет переноса If с = 0 then PC <— PC + k + 1, else PC <— PC + 1
К = -64...63
BRBS s,K Перейти, если флаг в SREG установлен If s = 1 then PC <— PC + k + 1, else PC s = 0..7 К = -64 ... 63
* Значение 2 — если следующая команда занимает одно слово (два байта) и 3 — если следующая команда занимает два слова (четыре байта).

Команды SBIC и SBIS действительны только для РВВ по первым 32 адресам (0..31).

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

Команда Операнды Описание Операция
MOV Rd,Rr Перенос данных между РОН Rd <- .Rr
d = 0..31 г = 0..31
LDI Rd, К Загрузка константы в РОН Rd <— К
d = 16..31 К = 0..255
LD (1) Rd, А Чтение значения в РОН из памяти данных (SRAM) по адресу, содержащемуся в А Rd <-. (А)
d = 0..31 (исключая А)
LD (2) Rd, А+ Чтение значения в РОН из памяти данных (SRAM) по адресу, содержащемуся в А, с постинкрементом адреса Rd <- . (А) , А = А + 1 d = 0..31 (исключая А) А = X, Y, Z
LD (3) Rd, -А Чтение значения в РОН из памяти данных (SRAM) по адресу, содержащемуся в А, с преддекрементом адреса А = А — 1, Rd <—. (А) d = 0..31 (исключая А) А = X, Y, Z
ST (1) A, Rr Запись значения в память данных (SRAM) из РОН по адресу, содержащемуся в А (А) <- .Rr
г = 0..31 (исключая А) А = X, Y, Z
ST (2) А+, Rr Запись значения в память данных (SRAM) из РОН по адресу, содержащемуся в А, с постинкрементом адреса (А) <- .Rr, А = А + 1 г = 0..31 (исключая А) А = X, Y, Z
ST (3) -A, Rr Запись значения в память данных (SRAM) из РОН по адресу, содержащемуся в А, с преддекрементом адреса А = А - 1, (А) <- .Rr г = 0..31 (исключая А) А = X, Y, Z

Команды управления системой
Команда Операнды Описание Операция
NOP - Нет операции -
SLEEP - Переход в "спящий" режим -
WDR - Сброс сторожевого таймера



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru