8-разрядные КМОП RISC микроконтроллеры с внутрисистемно программируемым Flash ПЗУ
Как и микроконтроллеры остальных семейств, все микроконтроллеры семейства Mega имеют в своем составе сторожевой таймер, предназначенный для защиты микроконтроллера от сбоев в процессе работы. Исполнение сторожевого таймера одинаково для всех моделей семейства.
Сторожевой таймер имеет независимый тактовый генератор, поэтому он работает даже во время нахождения микроконтроллера в любом из спящих режимов. Типовое значение частоты этого генератора равно 1 МГц при Vcс=5.0В. Фактическая частота генератора зависит oт напряжения питания устройства, температуры, технологического разброса.
Если сторожевой таймер включен, то через промежутки времени равные его периоду, он выполняет сброс микроконтроллера. Чтобы избежать сброса при нормальном выполнении программы, сторожевой таймер необходимо регулярно сбрасывать через промежутки времени, меньшие его периода. Сброс сторожевого таймера осуществляется командой WDR.
Для управления сторожевым таймером предназначен регистр WDTCR, который во всех моделях расположен по адресу $21 ($41).
Назначение выводов таймеров/счетчиков
Каждый таймер/счетчик использует один или более выводов микрокон-троллера. Эти выводы -- линии портов ввода/вывода общего назначения, а функции, реализуемые этими выводами при работе совмест-но с таймерами/счетчиками, являются их альтернативными функциями.
Аналоговый компаратор
Модуль аналогового компаратора входит в состав всех без исключения микроконтроллеров семейства Mega. Будучи включенным, компаратор позволяет сравнивать значения напряжений, присутствующих на двух выводах микроконтроллера. Результатом сравнения является логическое значение, которое может быть прочитано из программы. По результату сравнения может быть сгенерировано прерывание, а также осуществлен захват состояния таймера/счетчика Т1. Последняя функция позволяет, в частности, измерять длительности аналоговых сигналов.
Используемые компаратором выводы являются контактами портов вво-да/вывода общего назначения
Чтобы указанные выводы могли использоваться аналоговым компаратором, они должны быть сконфигурированы как входы (соответствующий разряд регистра DDRx установлен в «1»). Кроме того, необходимо отключить внутренние подтягивающие резисторы записью лог. 0 в соответствующий разряд регистра PORTх.
Аналого-цифровой преобразователь
Модуль 10-разрядного АЦП последовательного приближения входящий в состав моделей имеет следующие основные параметры:
* абсолютная погрешность: ±2 МЗР;
* интегральная нелинейность: ±0.5 МЗР;
* быстродействие: до 15 тыс. выборок/с.
На входе модуля АЦП всех моделей имеется 8-канальный аналоговый мультиплексор, предоставляющий в распоряжение пользователя 8 каналов с несимметричными входами.
В качестве источника опорного напряжения для АЦП может использоваться как напряжение питания микроконтроллера, так и внутренний либо внешний источник опорного напряжения.
В процессе работы АЦП может функционировать в двух режимах:
* режим одиночного преобразования, когда запуск каждого преобразования инициируется пользователем;
* режим непрерывного преобразования, когда запуск преобразований выполняется непрерывно через определенные интервалы времени.
Все без исключения микроконтроллеры семейства Mega имеют в своем составе модули либо универсального асинхронного (UART), либо универсального синхронно/асинхронного (USART) приемопередатчика. Более того, в некоторых моделях имеется по два таких модуля. Заметим, что модули USART при работе в асинхронном режиме совместимы с модулями UART как по расположению разрядов управляющих регистров, так и по функционированию. Небольшие различия имеются только в работе схемы буферизации блока приемника модулей и в названии (но не в назначении) некоторых разрядов управляющих регистров.
Все модули приемопередатчиков обеспечивают полнодуплексный обмен по последовательному каналу, при этом скорость передачи данных может варьироваться в довольно широких пределах. В модулях UART посылка может быть 8- или 9-разрядной, а в модулях USART ее длина может составлять от 5 до 9 разрядов. Еще одной особенностью модулей USART является наличие схем формирования и контроля четности.
Модули USART/UART, реализованные в микроконтроллерах семейства, могут обнаруживать следующие внештатные ситуации:
* переполнение;
* ошибка кадрирования;
* неверный старт-бит.
Для уменьшения вероятности сбоев в модулях также реализована такая полезная функция, как фильтрация помех.
Для взаимодействия с программой в модулях предусмотрены 3 прерывания, запрос на генерацию которых формируется при наступлении следующих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен».
Как обычно, выводы микроконтроллера, используемые модулями USART/UART, являются линиями портов ввода/вывода общего назначения.
Последовательныйпериферийный интерфейс SPI
Последовательный периферийный интерфейс SPI (Serial Peripheral In-lerface), имеет двоякое назначение. Во-первых, с его помощью может осуществляться обмен данными между микроконтроллером и различными периферийными устройствами, такими, как цифровые потенциометры, ЦАП/АЦП, FLASH-ПЗУ и др. Посредством этого интерфейса также может производиться обмен данными между несколькими микроконтроллерами AVR. Кроме того, через интерфейс SPI может быть осуществлено программирование микроконтроллера (т. е. режим последовательного программирования). При обмене данными по интерфейсу SPI микроконтроллер AVR может работать как ведущий (режим «Master») либо как ведомый (режим «Slave»). При этом пользователь может задавать скорость передачи (семь программируемых значений) и формат передачи (от младшего разряда к старшему или наоборот).
Дополнительной возможностью подсистемы SPI является «пробуждение» микроконтроллера из режима Idle при поступлении данных.
Модуль SPI использует четыре вывода микроконтроллера. Как и для большинства прочих периферийных устройств, эти выводы являются линиями портов ввода/вывода общего назначения.
Последовательныйдвухпроводный интерфейс
Модуль двухпроводного последовательного интерфейса (Two-wire Serial Interface, TWI) является полным аналогом базовой версии интерфейса 12С фирмы «Philips». Интерфейс TWI позволяет объединить вместе до 128 различных устройств с помощью двунаправленной шины, состоящей всего из двух линий: линии тактового сигнала (SCL) и линии данных (SDA). Единственными дополнительными элементами для реализации шины являются два подтягивающих резистора, по одному на каждую линию.
Шинные формирователи всех TWI-совместимых устройств выполняются по схеме с открытым коллектором (стоком), что позволяет реализовать функцию «монтажное И». Соответственно, НИЗКИЙ уровень на линии устанавливается тогда, когда одно или более устройств выставляют на линию сигнала лог. 0, а ВЫСОКИЙ уровень на линии устанавливается тогда, когда все устройства, подключенные к ней, устанавливают свои выходы в третье состояние.
Общие сведения о системе команд
Введение в систему команд
Система команд микроконтроллеров весьма развита и насчитывает до 130 различных инструкций. Несмотря на то что микроконтроллеры AVR являются микроконтроллерами с RISC-архитектурой (процессор с сокращенным набором команд), по количеству реализованных инструкций и их разнообразию они больше похожи на микроконтроллеры с CISC-архитектурой (процессор с полным набором команд). Практически каждая из команд (за исключением команд, у которых одним из операндов является 16-разрядный адрес) занимает только одну ячейку памяти программ. Причем это достигнуто не за счет сокращения количества команд процессора, а за счет увеличения разрядности памяти программ.
Операнды
Программа для любого микроконтроллера представляет собой последовательность команд, записанных в памяти программ. Большинство команд при выполнении изменяют содержимое одного или нескольких регистров общего назначения, регистров ввода/вывода или ячеек ОЗУ.
Для обращения к различным областям адресного пространства памяти данных используются различные команды, реализующие, в свою очередь, различные способы адресации
Доступ к регистрам ввода/вывода осуществляется по их адресам, являющимися операндами команды. Вместе с тем при написании ассемблерных программ гораздо удобнее обращаться к регистрам, используя вместо числовых значений адресов их стандартные, принятые символические имена.
Чтобы задать соответствие этих имен реальным адресам необходимо подключить в начале программы (при помощи директивы ассемблера .INCLUDE) файл определения адресов регистров ввода/вывода. Помимо всего прочего, такое решение облегчит перенос программного обеспечения с одного типа кристалла на другой.
Эти файлы (для каждой модели микроконтроллеров семейства) сво-бодно распространяются фирмой «Atmel» вместе с документацией на микроконтроллеры (в частности, они, находятся на web-сайте фирмы). Для РОН, входящих в состав индексных регистров, в этих файлах определяются также дополнительные символические имена
Дополнительные символические имена индексных регистров
Регистр
Символическое имя
R26
XL
R27
ХН
R28
YL
R29
YH
R30
ZL
R31
ZH
Названия этих файлов унифицированы и определяются следующим образом:
<номер модели>def. inc
Например, программа для микроконтроллера ATtinyl5L должна со-держать следующую директиву ассемблера:
.include "tnl5def.inc"
а для микроконтроллера ATmega8535:
.include "m8535def.inc"
Необходимо только помнить, что если для обращения к регистру ввода/вывода используются команды обмена с ОЗУ, то к символическому имени требуется прибавить число $20.
Как уже было упомянуто, в микроконтроллерах память программ является 16-разрядной. Соответственно большинство команд описываются 16-разрядным словом, которое называется также кодом операции (КОП). Код операции -- это число, расположенное в памяти программ и определяющее действие, которое необходимо произвести между источником и приемником. Некоторые команды, у которых один из операндов является 16-разрядным адресом, занимают две ячейки памяти программ. Соответственно, код операции таких команд является 4-байтным числом.
В ряде случаев значение операнда-источника может содержаться непосредственно в коде операции, а не в регистре. Это происходит в том случае, когда операндом-источником является константа.
Типы команд
Все множество команд микроконтроллеров можно разбить на несколько групп:
* команды логических операций;
* команды арифметических операций и команды сдвига;
* команды операций с битами;
* команды пересылки данных;
* команды передачи управления;
* команды управления системой.
Далее подробно описана каждая группа команд.
Команды логических операций
Команды логических операций позволяют выполнять стандартные логические операции над байтами, такие, как логическое умножение (И), логическое сложение (ИЛИ), операцию «исключающее ИЛИ», а также вычисление обратного (дополнение до единицы) и дополнительного (дополнение до двух) кодов числа. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки тетрад. Операции производятся между регистрами общего назначения либо между регистром и константой; результат сохраняется в РОН. Все команды из этой группы выполняются за один машинный цикл.
Команды арифметических операций и команды сдвига
К данной группе относятся команды, позволяющие выполнять такие базовые операции, как сложение, вычитание, сдвиг (вправо и влево), инкремент и декремент. В микроконтроллерах семейства Mega также имеются команды, позволяющие осуществлять умножение 8-разрядных значений. Все операции производятся только над регистрами общего назначения. При этом микроконтроллеры AVR позволяют легко оперировать как знаковыми, так и без знаковыми числами, а также работать с числами, представленными в дополнительном коде.
Почти все команды рассматриваемой группы выполняются за один машинный цикл. Команды умножения и команды, оперирующие двухбайтовыми значениями, выполняются за два цикла.
Команды операций с битами
К данной группе относятся команды, выполняющие установку или сброс заданного разряда РОН или РВВ. Причем для изменения разрядов регистра состояния SREG имеются также дополнительные команды (точнее говоря, эквивалентные мнемонические обозначения общих команд), т. к. проверка состояния разрядов именно этого регистра производится чаще всего. Условно к этой группе можно отнести также две команды передачи управления типа «проверка/пропуск», которые пропускают следующую команду в зависимости от состояния разряда РОН или РВВ.
Все задействованные разряды РВВ имеют свои символические имена. Определения этих имен описаны в том же включаемом файле, что и определения символических имен адресов регистров. Таким образом, после включения в программу указанного файла в командах вместо числовых значений номеров разрядов можно будет указывать их символические имена.
Всем командам данной группы требуется один машинный цикл для выполнения, за исключением случаев, когда в результате проверки происходит пропуск команды. В этом случае команда выполняется за 2 или 3 машинных цикла в зависимости от пропускаемой команды.
Команды пересылки данных
Команды этой группы предназначены для пересылки содержимого ячеек, находящихся в адресном пространстве памяти данных. Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных, выполняемая командами группы, может производиться в следующих направлениях:
* РОН <=> РОН;
* РОН <=> РВВ;
* РОН <=> память данных.
Также к данной группе можно отнести стековые команды PUSH и POP, позволяющие сохранять в стеке и восстанавливать из стека содержимое РОН.
На выполнение команд данной группы, требуется в зависимости от команды от одного до трех машинных циклов.
Команды передачи управления
В эту группу входят команды перехода, вызова подпрограмм и воз-врата из них и команды типа «проверка/пропуск», пропускающие сле-дующую за ними команду при выполнении некоторого условия. Также к этой группе относятся команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода.
В системе команд микроконтроллеров семейства имеются команды как безусловного, так и условного переходов. Команды относительного перехода (RJMP), а в микроконтроллерах семейства Mega также косвенного (IJMP) и абсолютного (JMP) безусловного перехода являются самыми простыми в этой группе. Их функция заключается только в записи нового адреса в счетчик команд. Команды условного перехода также изменяют содержимое счетчика команд, однако это изменение происходит только при выполнении некоторого условия или, точнее, при определенном состоянии различных флагов регистра SREG.
Все команды условного перехода можно разбить на две подгруппы. Первая подгруппа -- команды условного перехода общего назначения. В эту подгруппу входят две команды BRBS s,k HBRBC s,k, в которых явно задается номер тестируемого флага регистра SREG. Соответственно, переход осуществляется при SREG.s = 0 (brbc) или SREG.S = I (brbs). Другую подгруппу составляют 18 специализированных команд, каждая из которых выполняет переход по какому-либо конкретному условию («равно», «больше или равно», «был перенос» и т. п.). Причем одни команды используются после сравнения без знаковых чисел, другие -- после сравнения чисел со знаком. Возможные проверяемые условия, а также соответствующие им команды условного перехода приведены в таблице.
* Для перехода по этому условию операнды предшествующей команды сравнения должны быть записаны в обратном порядке, т. е. вместо СР Rd.Rr-->CP Rr.Rd.
Вообще говоря, команды, указанные в таблице, являются всего лишь эквивалентными мнемоническими обозначениями команд BRBS s, к и BRBC s , к с определенными значениями операнда «s». Команда BREQ имеет, например, такой же код операции, что и команда BRBS 1,к, а команда BRGE k - BRBC 4,к.
Команды вызова подпрограммы (icall, rcall, call) работают практически так же, как и команды безусловного перехода. Отличие заключается в том, что, перед тем как выполнить переход, значение счетчика команд сохраняется в стеке. Кроме того, подпрограмма должна заканчиваться командой возврата RET.
Очевидно, что команды передачи управления нарушают нормаль-ное (линейное) выполнение основной программы. Каждый раз, когда выполняется команда из этой группы (кроме команд сравнения), нормальное функционирование конвейера нарушается. Перед загрузкой в конвейер нового адреса производится остановка и очистка выполняемой последовательности команд. Соответственно, реинициализация конвейера приводит к необходимости использования нескольких машинных циклов для выполнения таких команд.
Команды управления системой
В эту группу входят всего 3 команды:
* NOP -- пустая команда;
* SLEEP -- перевод микроконтроллера в режим пониженного энер-гопотребления;
* wdr -- сброс сторожевого таймера.
Все команды этой группы выполняются за один машинный цикл.
Сводные таблицы команд
В Таблице указаны все команды, которыми располагают микроконтроллеры. В каждой таблице команды сгруппированы по функциональному признаку. В таблицах приведены такие основные сведения о командах, как мнемоническое обозначение команды, ее описание, число машинных циклов, необходимых для ее выполнения, а также флаги регистра SREG, на которые воздействует эта команда.
Группа команд логических операций
Мнемоника
Описание
Операция
Циклы
Флаги
AND Rd, Rr
«Логическое И» двух РОН
Rd = Rd * Rr
1
Z,N,V
ANDI Rd, K
«Логическое И» РОН и константы
Rd = Rd * К
1
Z,N,V
EOR Rd, Rr
«Исключающее ИЛИ» двух РОН
Rd = Rd ® Rr
1
Z,N,V
OR Rd, Rr
«Логическое ИЛИ» двух РОН
Rd = Rd v Rr
1
Z,N,V
ORI Rd, K
«Логическое ИЛИ» РОН и константы
Rd = Rd v К
1
Z,N,V
COM Rd
Перевод в обратный код
Rd = $FF-Rd
1
Z,C,N,V
NEG Rd
Перевод в дополнительный код
Rd = $00-Rd
1
Z,C,N,V,H
CLR Rd
Сброс всех разрядов РОН
Rd = Rd ® Rd
1
Z,N,V
SER Rd
Установка всех разрядов РОН
Rd = $FF
1
TST Rd
Проверка РОН на отрицательное или нулевое значение
Rd * Rd
1
Z,N,V
SWAP Rd
Обмен местами тетрад в РОН
Rd(3...O) = Rd(7...4),
Rd(7...4) = Rd(3...O)
1
Группа команд арифметических операций
Мнемоника
Описание
Операция
Циклы
Флаги
ADD Rd. Rr
Сложение двух РОН
Rd = Rd + Rr
1
Z,C,N,V,H
ADC Rd. Rr
Сложение двух РОН с переносом
Rd = Rd + Rr + C
1
Z,C,N,V,H
ADIW Rd, K
Сложение регистровой пары с константой
Rdh:RdI = Rdh:Rdl + К
2
Z,C,N,V,S
SUB Rd, Rr
Вычитание двух РОН
Rd = Rd-Rr
1
Z,C,N,V,H
SUBI Rd, K
Вычитание константы из РОН
Rd = Rd-K
1
Z,C,N,V,H
SBC Rd, Rr
Вычитание двух РОН с заемом
Rd=Rd-Rr-C
1
Z,C,N,V,H
SBCI Rd, K
Вычитание константы из РОН с заемом
Rd = Rd-K-C
1
Z,C,N,V,H
SBIW Rd, K
Вычитание константы из регистровой пары
Rdh:Rdl = Rdh:Rdt-K
2
Z,C,N,V,S
DEC Rd
Декремент РОН
Rd = Rd-l
1
Z,N,V
INC Rd
Инкремент РОН
Rd = Rd + 1
1
Z,N,V
ASR Rd
Арифметический сдвиг вправо
Rd(n) = Rd(n+ 1), n = 0...6
1
Z,C,N,V
LSL Rd
Логический сдвиг влево
Rd(n+l) = Rd(n), Rd(0) = 0
1
Z,C,N,V
LSR Rd
Логический сдвиг вправо
Rd(n) = Rd(n+l),Rd(7) = 0
1
Z,C,N,V
Мнемоника
Описание
Операция
Циклы
Флаги
ROL Rd
Сдвиг влево через перенос
Rd(0) = C, Rd(n+l) = Rd(n), С = Rd(7)
1
Z,C,N,V
ROR Rd
Сдвиг вправо через перенос
Rd(7) = C, Rd(n) = Rd(n+l), С = Rd(0)
1
Z,C,N,V
MUL Rd, Rr
Умножение беззнаковых чисел
Rl:RO = RdXRr
2
Z,C
MULS Rd, Rr
Умножение чисел со знаком
Rl:RO = RdXRr
2
Z,C
MULSU
Rd, Rr
Умножение беззнакового чис-ла на число со знаком
Rl:RO = RdXRr
2
Z,C
FMDL Rd, Rr
Умножение дробных беззнаковых чисел
Rl:RO = (RdXRr)«l
2
Z,C
FMULS
Rd, Rr
Умножение дробных чисел со знаком
Rl:RO = (RdXRr)«l
2
Z,C
FMULSU
Rd, Rr
Умножение дробного беззнакового числа и дробного числа со знаком
Rl:RO = (RdXRr)«1
2
Z,C
Группа команд операций с битами
Мнемоника
Описание
Операция
Циклы
Флаги
CBR Rd, K
Сброс разряда(ов) РОН
Rd = Rd»($FF-K)
1
Z,N,V
SBR Rd, K
Установка разрада(ов) РОН
Rd=RdvK
1
Z, N,V
CBI A, b
Сброс разряда РВВ
A.b = 0
2
SBI A, b
Установка разряда РВВ
A.b=l
2
BCLR s
Зброс флага
SREG.S - 0
1
SREG.S
BSET s
Установка флага
SREG.S=l
1
SREG.S
BLD Rd, b
Загрузка разряда РОН из флага Т (SREG)
Rd.b = T
1
BST Rr, b
Запись разряда РОН в флаг Т (SREG)
T = Rr.b
1
T
CLC
Сброс флага переноса
С = 0
1
С
SEC
Установка флага переноса
C = l
1
С
CLN
Сброс флага отр. числа
N = 0
1
N
SEN
Установка флага отр. числа
N = 1
1
N
CLZ
Сброс флага нуля
Z = 0
1
Z
SEZ
Установка флага нуля
Z = l
1
Z
CLI
Общее запрещение прерываний
1 = 0
1
I
SEI
Общее разрешение прерываний
1 = 1
1
I
CLS
Сброс флага знака
S = 0
1
S
SES
Установка флага знака
S = l
1
S
CLV
Сброс флага переполнения доп. кода
V = 0
1
V
SEV
Установка флага переполнения доп. кода
V = l
1
V
CLT
Сброс флага Т
T = 0
1
T
SET
Установка флага Т
T = l
1
T
CLH
Сброс флага половинного переноса
H = 0
1
H
SEH
Установка флага половинного переноса
H = l
1
H
Группа команд пересылки данных
Мнемоника
Описание
Операция
Циклы
Флаги
MOV Rd, Rr
Пересылка между РОН
Rd = Rr
1
MOVW
Rd, Rr
Пересылка двухбайтовых значений
Rd + l:Rd = Rr+l:Rr
1
LDI Rd, K
Загрузка константы в РОН
Rd = K
1
Мнемоника
Описание
Операция
Циклы
Флаги
LD Rd, X
Косвенное чтение
Rd=[X]
2
LD Rd, X+
Косвенное чтение с постинкрементом
Rd = [X],X = X+I
2
LD Rd,-X
Косвенное чтение
с преддекрементом
X = X-l,Rd = [X]
2
LD Rd, Y
Косвенное чтение
Rd=[Y]
2
LD Rd, Y+
Косвенное чтение с постинкрементом
Rd = [Y],Y = Y+l
2
LD Rd,-Y
Косвенное чтение с преддекрементом
Y=Y-l,Rd=[Y]
2
LDD Rd, Y+q
Косвенное относительное чтение
Rd = [Y+q]
2
LD Rd,Z
Косвенное чтение
Rd = [Z]
2
LD Rd, Z+
Косвенное чтение с постинкрементом
Rd = [Z],Z = Z+l
2
LD Rd,-Z
Косвенное чтение с преддекрементом
Z = Z - 1, Rd = [Z]
2
LDD Rd, Z+q
Косвенное относительное чтение
Rd = [Z + q]
2
LDS Rd, k
Непосредственное чтение из ОЗУ
Rd = [k]
2
ST X, Rr
Косвенная запись
[X] = Rr
2
ST X+, Rr
Косвенная запись с постинкрементом
[X] = Rr, X=X+1
2
ST -X, Rr
Косвенная запись с преддекрементом
X = X-l,[X] = Rr
2
ST Y, Rr
Косвенная запись
[Y] = Rr
2
ST Y+, Rr
Косвенная запись с постинкрементом
[Y] = Rr, Y=Y+1
2
ST -Y, Rr
Косвенная запись с преддекрементом
Y=Y-l,[X] = Rr
2
STD Y+ q, Rr
Косвенная относительная запись
[Y+q] = Rr
2
ST Z, Rr
Косвенная запись
[Z] = Rr
2
ST Z+, Rr
Косвенная запись с постинкрементом
[Z] = Rr,Z = Z+l
2
ST -Z ,Rr
Косвенная запись с преддекрементом
Z = Z-l,[Z] = Rr
2
STD Z+ q, Rr
Косвенная относительная запись
[Z + q] = Rr
2
STS k, Rr
Непосредственная запись в ОЗУ
[k] = Rr
2
LPM
Загрузка данных из памяти программ
R0 = {Z}
3
LPM Rd, Z
Загрузка данных из памяти программ
Rb={Z}
3
LPM Rd, Z+
Загрузка данных из памяти программ с постинкрементом
Rb = {Z},Z = Z+1
3
ELPM
Расширенная загрузка данных из памяти программ
RO = {RAMPZ:Z}
3
ELPM Rd, Z
Расширенная загрузка данных из памяти программ
Rb={RAMPZ:Z}
3
ELPM Rd, Z+
Расширенная загрузка данных из памяти программ с постинкрементом
Rb = {RAMPZ:Z}, RAMPZ:Z = RAMPZ:Z+1
3
SPM
Запись в память программ
{Z} = RI:R0
IN Rd, A
Пересьика из РВВ в РОН
Rd = A
1
OUT A, Rr
Пересылка из РОН в РВВ
A=Rr
1
PUSH Rr
Сохранение байта в стеке
STACK - Rr
2
POP Rd
Извлечение байта из стека
Rd = STACK
2
Группа команд передачи управления
Мнемоника
Описание
Операция
Циклы
Флаги
RJMP k
Относительный безусловный переход
РС =РС + к+1
2
IJMP
Косвенный безусловный переход
РС =Z
2
Мнемоника
Описание
Операция
Циклы
Флаги
JMP к
Абсолютный переход
РС = к
3
RCALL к
Этносительный вызов подпрограммы
PC = PC + к + 1
3
ICALL
Сосвенный вызов подпрограммы
PC = Z
3
CALL к
Абсолютный вызов подпрограммы
РС = к
4
RET
Возврат из подпрограммы
PC = STACK
4
RETI
Возврат из подпрограммы обработки прерывания
PC = STACK
4
СР Rd, Rr
Сравнение РОН
Rd-Rr
1
Z,N,V,C,H
СРС Rd, Rr
Сравнение РОН с учетом переноса
Rd-Rr-C
1
Z,N,V,C,H
CPI Rd, K
Сравнение РОН с константой
Rd-K
1
Z,N,V,C,H
CPSE
Rd, Rr
Сравнение и пропуск следующей команды при равенстве
Если Rd = Rr, то PC = PC + 2 (3)
1/2/3
SBRC Rr, b
Пропуск след. команды, если разряд РОН сброшен
Если Rr.b = 0, то PC = PC + 2 (3)
1/2/3
SBRS Rr, b
Пропуск след. команды, если разряд РОН установлен
Если Rr.b=l, то PC = PC + 2 (3)
1/2/3
SBIC A, b
Пропуск след. команды, если разряд РВВ сброшен
Если A.b = 0, то PC = PC + 2 (3)
1/2/3
SBIS A ,b
Пропуск след. команды, если разряд РВВ установлен
Если А.Ь= 1, то PC = PC + 2 (3)
1/2/3
BRBC s, k
Переход, если флаг s регистра SREG сброшен
Если SREG.s = 0, то РС = РС + к+1
1/2
BRBS s, k
Переход, если флаг s регистра SREG установлен
Если SREG.s =1, то РС = РС + к+1
1/2
BRCS к
Переход по переносу
Если С =1, то РС = РС + к+1
1/2
BRCC к
Переход, если нет переноса
Если С = 0, то РС = РС + к+1
1/2
BREQ к
Переход по «равно»
Если Z = l, то РС = РС + к+1
1/2
BRNE к
Переход по «не равно»
Если Z = 0, то РС = РС + к+1
1/2
BRSH к
Переход по «выше или равно»
Если С = 0, то РС = РС + к+1
1/2
BRLO к
Переход по «меньше»
Если С =1, то РС = РС + к+1
1/2
BRMI .
Переход по «отрицательное значение»
Если N = 1, то РС = РС + к +
1/2
BRPL
Переход по «положительное значение»
Если N = 0, то РС = РС + к+1
1/2
BRGE
Переход по «больше или равно» (числа со знаком)
Если (N®V) = 0, то PC = PC + к + 1
1/2
BRLT
Переход по «меньше нуля» (числа со знаком)
Если (N®V)=l, то PC = PC + к + 1
1/2
BRHS
Переход по половинному переносу
Если Н = 1, то PC = PC + к + 1
1/2
BRHC
Переход, если нет половинного переноса
Если Н = 0, то PC = PC + к + 1
1/2
BRTS
Переход, если флаг Т установлен
Если Т= 1, то РС = РС + к+1
1/2
BRTC
Переход, если флаг Т сброшен
ЕслиТ = 0, тоРС = РС + к+1
1/2
BRVS
Переход по переполнению доп. кода
ЕслиУ=1, тоРС = РС + к+1
1/2
BRVC
Переход, если нет переполнения доп. кода
ЕслиУ = 0, тоРС = РС + к+1
1/2
BRID
Переход, если прерывания запрещены
Если I = 0, тоРС = РС + к+1
1/2
BRIE
Переход, если прерывания разрешены
Если1 = 1, тоРС = РС + к+1
1/2
Группа команд управления системой
Мнемоника
Описание
Операция
Циклы
Флаги
NOP
Нет операции
пустая команда
1
SLEEP
Переход в «спящий» режим
перевод микроконтроллера в режим пониженного энер-гопотребления