Главная /
Микроконтроллеры /
AVR /
|
Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2015 года составляет 80 000 рублей).
Подробнее...
|
Система команд микроконтроллеров AVR
Микроконтроллеры (далее - МК) серии AVR имеют от 90 до 120 команд в зависимости от модели.
Здесь рассмотрены только те команды, которые использованы в
нашей программе.
ADD
Синтаксис: ADD reg1, reg2
Эта команда складывает содержимое регистров reg1 и reg2, сохраняя результат в регистре reg1.
Изменяет состояние флагов H, S, V, N, Z, C.
AND
Синтаксис: AND reg1, reg2
Эта команда выполняет операцию «Логическое И» между регистрами reg1 и reg2, сохраняя результат в регистре reg1.
Изменяет состояние флагов S, V, N, Z.
ANDI
Синтаксис: ANDI hreg, number
Эта команда выполняет операцию «Логическое И» между содержимым старшего регистра hreg и константой number (0…255), сохраняя результат в регистре.
Изменяет состояние флагов S, V, N, Z.
BRBC
Синтаксис: BRBC bit, label
Эта команда проверяет состояние бита регистра SREG ($3F) и переходит к метке label, если бит сброшен.
Метка должна находиться в пределах 63 команд от команды brbc.
BRBS
Синтаксис: BRBS bit, label
Эта команда проверяет состояние бита регистра SREG ($3F) и переходит к метке label, если бит установлен.
Метка должна находиться в пределах 63 команд от команды brbs.
BRCC
Синтаксис: BRCC bit, label
Эта команда проверяет флаг переноса (С) и переходит к метке label, если он сброшен.
BRCS
Синтаксис: BRCS bit, label
Эта команда проверяет флаг переноса (С) и переходит к метке label, если он установлен.
BREQ
Синтаксис: BREQ bit, label
Эта команда проверяет флаг нуля (Z) и переходит к метке label, если он установлен.
BRNE
Синтаксис: BRNE bit, label
Эта команда проверяет флаг нуля (Z) и переходит к метке label, если он сброшен.
CBI
Синтаксис: CBI ioreg, bit
Эта команда сбрасывает в 0 бит регистра ввода-вывода ioreg ($00…$1F).
Номер бита определяет операнд bit.
CLR
Синтаксис: CLR reg
Эта команда сбрасывает все биты регистра reg в 0. Изменяет состояние флагов S, V, N, Z.
CP
Синтаксис: CP reg1, reg2
Эта команда сравнивает содержимое регистров reg1 и reg2 путем вычитания reg2 из reg1. Содержимое регистров не изменяется.
Изменяет состояние флагов H, S, V, N, Z, C.
CPI
Синтаксис: CPI hreg, number
Эта команда сравнивает содержимое регистра hreg с константой number путем вычитания константы из регистра. Содержимое регистров не изменяется. Изменяет состояние флагов H, S, V, N, Z, C.
Команда работает только с регистрами R16…R31.
DEC
Синтаксис: DEC reg
Эта команда уменьшает на единицу содержимое регистра reg, записывая результат обратно в регистр.
Изменяет состояние флагов S, V, N, Z.
IN
Синтаксис: IN reg, ioreg
Эта команда пересылает содержимое регистра ввода-вывода ioreg в РОН reg.
INC
Синтаксис: INC reg
Эта команда увеличивает на единицу содержимое регистра reg, записывая результат обратно в регистр.
Изменяет состояние флагов S, V, N, Z.
LD
Синтаксис: LD reg, longreg
Эта команда загружает один байт из памяти данных (адрес ячейки памяти содержится в регистре longer) в регистр reg (для модели 1200).
LDI
Синтаксис: LDI hreg, number
Эта команда загружает непосредственное значение number в старший регистр hreg (команда может работать только с регистрами R16…R31). Число number должно находиться в пределах 0…255.
LSR
Синтаксис: LSR reg
Эта команда выполняет логический сдвиг вправо содержимого регистра reg. При этом 0-й бит копируется в флаг C, 7-й бит сбрасывается в 0. Изменяет состояние флагов S, V, N, Z, C.
ORI
Синтаксис: ORI hreg, number
Эта команда выполняет операцию «Логическое ИЛИ» между содержимым старшего регистра hreg и константой number (0…255), сохраняя результат в регистре. Изменяет состояние флагов S, V, N, Z.
OUT
Синтаксис: OUT ioreg, reg
Эта команда пересылает содержимое регистра общего назначения reg в регистр ввода-вывода ioreg.
RCALL
Синтаксис: RCALL label
Эта команда вызывает подпрограмму, обозначенную меткой label, которая должна находиться в пределах 2048 команд от команды rcall (относительный вызов).
RET
Синтаксис: RET
Эта команда выполняет возврат из подпрограммы, переходя на команду, которая следует за исходной командой call.
RETI
Синтаксис: RETI
Эта команда выполняет возврат из подпрограммы и устанавливает флаг общего разрешения прерываний.
RJMP
Синтаксис: RJMP label
Относительный переход. Выполняет переход к участку программы, обозначенному меткой label, которая должна находиться в пределах 2048 от команды RJMP.
SBI
Синтаксис: SBI ioreg, bit
Эта команда устанавливает в 1 бит регистра ввода-вывода ioreg ($00…$1F). Номер бита определяет операнд bit.
SBIC
Синтаксис: SBIC ioreg, bit
Эта команда проверяет бит регистра ввода-вывода ioreg ($00…$1F) и пропускает следующую команду, если этот бит сброшен. Номер бита определяет операнд bit.
SBIS
Синтаксис: SBIS ioreg, bit
Эта команда проверяет бит регистра ввода-вывода ioreg ($00…$1F) и пропускает следующую команду, если этот бит установлен. Номер бита определяет операнд bit.
SEI
Синтаксис: SEI
Эта команда устанавливает флаг общего разрешения прерываний.
SER
Синтаксис: SER reg
Эта команда устанавливает все биты регистра reg в 1. Изменяет состояние флагов S, V, N, Z. Команда может работать только с регистрами R16…R31.
ST
Синтаксис: ST reg, longreg
Для модели 1200 эта команда сохраняет содержимое регистра reg в памяти данных (адрес ячейки памяти содержится в регистре longer), т.е. косвенно пересылает содержимое РОН reg по адресу, хранящемуся в регистре longer.
SUBI
Синтаксис: SUBI hreg, number
Вычитает из старшего регистра hreg константу number. Результат сохраняется в этом же регистре. Изменяет состояние флагов H, S, V, N, Z, C. Команда может работать только с регистрами R16…R31.