Общая характеристика микроконтроллеров AVR, ПРОГРАММНАЯ МОДЕЛЬ И СИСТЕМА КОМАНД

 

В настоящее время в серийном производстве находятся два семейства AVR – Tiny и Mega. Микроконтроллеры семейства Tiny имеют небольшой объем памяти программ и весьма ограниченную периферию. Они выпускаются в 8-выводных корпусах и являются самыми дешевыми. Наиболее развитую периферию, наибольшие объемы памяти данных и программ имеют микроконтроллеры семейства Mega.

AVR, пожалуй, одно из самых интересных направлений, развиваемых корпорацией Atmel. Они представляют собой мощный инструмент для создания современных высокопроизводительных и экономичных многоцелевых контроллеров. На настоящий момент соотношение «цена – производительность –энергопотребление» для AVR является одним из лучших на мировом рынке 8-разрядных микроконтроллеров. Объемы продаж AVR в мире удваиваются ежегодно. В геометрической прогрессии растет число сторонних фирм, разрабатывающих и выпускающих разнообразные программные и аппаратные средства поддержки разработок для них. Можно считать, что AVR становится еще одним индустриальным стандартом среди 8-разрядных микроконтроллеров общего назначения.

Сама идея создания нового RISC-ядра родилась в 1994 году в Норвегии. В 1995 году два его изобретателя Альф Боген (Alf-Egil Bogen) и Вегард Воллен (Vegard Wollen) предложили корпорации Atmel выпускать новый 8-разрядный RISC-микроконтроллер как стандартное изделие и снабдить его Flash-памятью программ на кристалле. Руководство Atmel Corp. приняло решение инвестировать данный проект. В 1996 году был основан исследовательский центр в городе Тронхейм (Норвегия). Оба изобретателя стали директорами нового центра, а микроконтроллерное ядро было запатентовано и получило название AVR (Alf-Egil Bogen + Vegard Wollen + RISC). Первый опытный кристалл 90S1200 был выпущен на стыке 1996–1997 годов, а с 3 квартала 1997 года корпорация Atmel приступила к серийному производству нового семейства микроконтроллеров и к их рекламной и технической поддержке.

AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 вольт. Энергопотребление в активном режиме зависит от величины напряжения питания, от частоты, на которой работает AVR и от конкретного типа микроконтроллера. Подробные спецификации обычно приводятся в оригинальной технической документации Atmel Corp. Температурные диапазоны работы микроконтроллеров AVR – коммерческий (0С...70С) и индустриальный (-40С...+85С).

Все микроконтроллеры AVR имеют Flash-память программ, которая может быть загружена как с помощью обычного программатора, так и с помощью SPI-интерфейса, в том числе непосредственно на целевой плате (рис. 1.1). Число циклов перезаписи – не менее 1000.

Все AVR имеют также блок энергонезависимой электрически стираемой памяти данных EEPROM. Этот тип памяти, доступный программе микроконтроллера непосредственно в ходе ее выполнения, удобен для хранения промежуточных данных, различных констант, таблиц перекодировок, калибровочных коэффициентов и т.п. EEPROM также может быть загружена извне как через SPI-интерфейс, так и с помощью обычного программатора. Число циклов перезаписи – не менее 100000. Два программируемых бита секретности позволяют защитить память программ и энергонезависимую память данных EEPROM от несанкционированного считывания.

Следующая отличительная черта архитектуры микроконтроллеров AVR – регистровый файл быстрого доступа (рис. 1.2). Каждый из 32-х регистров общего назначения длиной 1 байт непосредственно связан с арифметико-логическим устройством (ALU) процессора. Другими словами, в AVR существует 32 регистра-аккумулятора (сравните, например, с MCS-51). Это обстоятельство позволяет в сочетании с конвейерной обработкой выполнять одну операцию в ALU за один машинный цикл. Так, два операнда извлекаются из регистрового файла, выполняется команда и результат записывается обратно в регистровый файл в течение только одного машинного цикла, причем этот цикл равен периоду тактового генератора. Старшие регистры объединены парами и образуют три 16-разрядных регистра X, Y и Z, предназначенных для косвенной адресации ячеек памяти (AVR без RAM имеют только один 16-битный регистр Z).

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

Программная модель AVR-микроконтроллеров приведена на рис.1.3. Для хранения оперативных данных программист, кроме регистрового файла, может использовать внутреннюю и внешнюю (если они имеются) блоки RAM. Поскольку внутренняя и внешняя RAM входят в единое адресное пространство (вместе с оперативными регистрами и регистрами ввода/вывода), то для доступа к ячейкам внутренней и внешней памяти используются одни и те же команды. Внутренняя оперативная память RAM отсутствует у кристаллов семейства Tiny, но имеется у всех AVR семейства Mega. Для некоторых микроконтроллеров возможна организация подключения внешней памяти данных объемом до 64Кб.

 

 

Рис. 1.3 – Программная модель AVR-микроконтроллеров

 

Регистровый файл, блок регистров ввода/вывода и память данных образуют единое адресное пространство, что дает возможность при программировании обращаться к 32 оперативным регистрам и к регистрам ввода/вывода как к ячейкам памяти, используя команды доступа к RAM (в том числе и с косвенной адресацией). Младшие 32 адреса ($0 — $1F) соответствуют оперативным регистрам. Следующие 64 адреса ($20 — $5F) зарезервированы для регистров ввода/вывода. Внутренняя RAM начинается с адреса $60 (знак $ указывает на шестнадцатеричную систему счисления).

Таким образом, регистры ввода/вывода имеют двойную нумерацию. Если используются команды IN, OUT, SBI, CBI, SBIC, SBIS, то следует использовать нумерацию регистров ввода/вывода, начинающуюся с нуля (назовем ее основной). Если же к регистрам ввода/вывода доступ осуществляется как к ячейкам памяти, то необходимо использовать нумерацию единого адресного пространства оперативной памяти данных AVR. Очевидно, что адрес в едином адресном пространстве памяти данных получается путем прибавления числа $20 к основному адресу регистра ввода/вывода. Кроме оперативной памяти программно доступными ресурсами микроконтроллера являются энергонезависимые, электрически программируемые FLASH и EEPROM блоки памяти, которые имеют отдельные адресные пространства.

Так как все команды AVR представляют собой 16-раз-рядные слова, FLASH-память организована как последовательность 16-разрядных ячеек и имеет емкость от 512 слов до 128K слов в зависимости от типа кристалла.

Во FLASH-память, кроме программы, могут быть записаны постоянные данные, которые не изменяются во время функционирования микропроцессорной системы. Это различные константы, таблицы знакогенераторов, таблицы линеаризации датчиков и т.п. Данные из FLASH памяти могут быть программным образом считаны в регистровый файл при помощи команды LPM (см. группу команд передачи данных).

EEPROM-блок электрически стираемой памяти данных AVR предназначен для хранения энергонезависимых данных, которые могут изменяться непосредственно на объекте. Это калибровочные коэффициенты, различные уставки, конфигурационные параметры системы и т.п. EEPROM-память данных может быть программным путем как прочитана, так и записана. Однако специальных команд обращения к EEPROM-памяти нет. Чтение и запись ячеек EEPROM выполняются через регистры ввода/вывода EEAR (регистр адреса), EEDR (регистр данных) и EECR (регистр управления).

Сторожевой (WATCHDOG) таймер предназначен для защиты микроконтроллера от сбоев в процессе работы. Он имеет свой собственный RC-генератор, работающий на частоте 1 МГц. Эта частота является приближенной и зависит прежде всего от величины напряжения питания микроконтроллера и от температуры. WATCHDOG-таймер снабжен своим собственным предделителем входной частоты с программируемым коэффициентом деления, что позволяет подстраивать временной интервал переполнения таймера и сброса микроконтроллера. WATCHDOG-таймер может быть отключен программным образом во время работы микроконтроллера как в активном режиме, так и в любом из режимов пониженного энергопотребления. В последнем случае это приводит к значительному снижению потребляемого тока.

Микроконтроллеры AVR имеют в своем составе от 1 до 4 таймеров/счетчиков общего назначения с разрядностью 8 или 16 бит, которые могут работать и как таймеры от внутреннего источника опорной частоты, и как счетчики внешних событий с внешним тактированием. Общие черты всех таймеров/счетчиков следующие:

· наличие программируемого предделителя входной частоты с различными градациями деления. Отличительной чертой является возможность работы таймеров/счетчиков на основной тактовой частоте микроконтроллера без предварительного ее понижения, что существенно повышает точность генерации временных интервалов системы;

· независимое функционирование от режима работы процессорного ядра микроконтроллера (т.е. они могут быть как считаны, так и загружены новым значением в любое время);

· возможность работы или от внутреннего источника опорной частоты, или в качестве счетчика событий. Верхний частотный порог определен в этом случае как половина основной тактовой частоты микроконтроллера. Выбор перепада внешнего источника (фронт или срез) программируется пользователем;

· наличие различных векторов прерываний для нескольких различных событий (переполнение, захват, сравнение).

 

Система реального времени (RTC) реализована во всех микроконтроллерах семейства Mega. Таймер/счетчик RTC имеет свой собственный предделитель, который может быть программным способом подключен или к основному внутреннему источнику тактовой частоты микроконтроллера, или к дополнительному асинхронному источнику опорной частоты (кварцевый резонатор или внешний синхросигнал). Для этой цели зарезервированы два внешних вывода микроконтроллера. Внутренний осциллятор, нагруженный на счетный вход таймера/счетчика RTC, оптимизирован для работы с внешним «часовым» кварцевым резонатором 32,768 кГц.

Порты ввода/вывода AVR имеют число независимых линий «Вход/Выход» от 3 до 53. Каждый разряд порта может быть запрограммирован на ввод или на вывод информации. Мощные выходные драйверы обеспечивают токовую нагрузочную способность 20 мА на линию порта (втекающий ток) при максимальном значении 40 мА, что позволяет, например, непосредственно подключать к микроконтроллеру светодиоды и биполярные транзисторы. Общая токовая нагрузка на все линии одного порта не должна превышать 80 мА (все значения приведены для напряжения питания 5 В).

Аналоговый компаратор входит в состав большинства микроконтроллеров AVR. Типовое напряжение смещения равно 10 мВ, время задержки распространения составляет 500 нс и зависит от напряжения питания микроконтроллера. Так, например, при напряжении питания 2,7 вольт оно равно 750 нс. Аналоговый компаратор имеет свой собственный вектор прерывания в общей системе прерываний микроконтроллера. При этом тип перепада, вызывающий запрос на прерывание при срабатывании компаратора, может быть запрограммирован пользователем как фронт, срез или переключение. Логический выход компаратора может быть программным образом подключен ко входу одного из 16-разрядных таймеров/счетчиков, работающего в режиме захвата. Это дает возможность измерять длительность аналоговых сигналов, а также максимально просто реализовывать АЦП двухтактного интегрирования.

Аналого-цифровой преобразователь (АЦП) построен по классической схеме последовательных приближений с устройством выборки/хранения (УВХ). Каждый из аналоговых входов может быть соединен со входом УВХ через аналоговый мультиплексор. Устройство выборки/хранения имеет свой собственный усилитель, гарантирующий, что измеряемый аналоговый сигнал будет стабильным в течение всего времени преобразования. Разрядность АЦП составляет 10 бит при нормируемой погрешности +/– 2 разряда. АЦП может работать в двух режимах – однократное преобразование по любому выбранному каналу и последовательный циклический опрос всех каналов. Время преобразования выбирается программно с помощью установки коэффициента деления частоты специального предделителя, входящего в состав блока АЦП. Важной особенностью аналого-цифрового преобразователя является функция подавления шума при преобразовании. Пользователь имеет возможность, выполнив короткий ряд программных операций, запустить АЦП в то время, когда центральный процессор находится в одном из режимов пониженного энергопотребления. При этом на точность преобразования не будут оказывать влияние помехи, возникающие при работе процессорного ядра.

Выполнять арифметико-логические операции и операции сдвига непосредственно над содержимым ячеек памяти нельзя. Нельзя также записать константу или очистить содержимое ячейки памяти. Система команд AVR позволяет лишь выполнять операции обмена данными между ячейками RAM и оперативными регистрами. Достоинством системы команд можно считать разнообразные режимы адресации ячеек памяти. Кроме прямой адресации (см. группу команд передачи данных) имеются следующие режимы: косвенная, косвенная с пост-инкрементом, косвенная с предекрементом и косвенная со смещением.

Регистры ввода/вывода располагаются в так называемом адресном пространстве ввода/вывода размером 64 байт. Их можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к периферийным устройствам (в том числе порты ввода/вывода). Изучение данных регистров удобно выполнять одновременно с изучением конкретного периферийного узла.

Среди регистров ввода/вывода есть регистр, используемый наиболее часто в процессе выполнения программы. Это регистр статуса SREG. Он располагается по адресу $3F и содержит набор флагов (табл. 1.1), показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавливаются в соответствии с результатом выполнения команд. Все разряды SREG доступны как для записи, так и для чтения. После сброса микроконтроллера регистр обнулен.

Все регистры ввода/вывода могут считываться и записываться через оперативные регистры при помощи команд IN, OUT (см. группу команд передачи данных). Регистры ввода/вывода, имеющие адреса в диапазоне $00 — $1F, обладают возможностью побитовой адресации. Непосредственная установка и сброс отдельных разрядов этих регистров выполняется командами SBI и CBI (см. группу команд работы с битами). Для признаков результата операции, которые являются битами регистра ввода/вывода SREG, имеется целый набор команд установки и сброса. Команды условных переходов в качестве своих операндов могут иметь как биты-признаки результата операции, так и отдельные разряды побитно адресуемых регистров ввода/вывода.

 

Следует также иметь в виду, что у разных типов AVR одни и те же регистры ввода/вывода могут иметь различные адреса. Для того, чтобы обеспечить переносимость программного обеспечения с одного типа кристалла на другой, следует использовать в программе стандартные, принятые в оригинальной фирменной документации, символические имена регистров ввода/вывода, а соответствие этих имен реальным адресам задавать, подключая в начале своей программы (при помощи директивы ассемблера .INCLUDE) файл определения адресов регистров ввода/вывода. Файлы определения адресов регистров ввода/вывода имеют расширение .inc. Они уже созданы разработчиками фирмы ATMEL и свободно распространяются вместе с документацией на AVR-микроконтроллеры. В этих файлах задается соответствие символических имен основным адресам регистров ввода/вывода.

Таблица 1.1 – Разряды регистра состояния SREG

     
Разряд Название Описание
I Общее разрешение прерываний. Для разрешения прерываний этот флаг должен быть установлен в 1. Флаг сбрасывается аппаратно после входа в подпрограмму обслуживания прерываний и восстанавливается командой RETI для разрешения обработки следующих прерываний
T Хранение копируемого бита.Заданный разряд любого РОН может быть скопирован в этот разряд командой BST или установлен в соответствии с содержимым данного разряда командой BLD
H Флаг потетрадного переноса. Этот флаг устанавливается в 1, если произошел перенос из младшей тетрады байта (из 3-го разряда в 4-й) или заем из старшей тетрады при выполнении некоторых арифметических операций
S Флаг знака. Этот флаг равен результату операции «Исключающее ИЛИ» между флагами N и V. Он устанавливается в 1, если результат выполнения арифметической операции меньше нуля
V Флаг переполнения дополнительного кода. Этот флаг устанавливается в 1 при переполнении разрядной сетки знакового результата
N Флаг отрицательного значения. Этот флаг устанавливается в 1, если старший разряд результата операции (7 разряд) равен 1
Z Флаг нуля. Этот флаг устанавливается в 1 при нулевом результате выполнения операции
C Флаг переноса. Этот флаг устанавливается в 1, если в результате выполнения операции произошел выход за границы байта

 

Младшие адреса памяти программ имеют специальное назначение. Адрес $000 является адресом, с которого начинает выполняться программа после сброса процессора. Начиная со следующего адреса ячейки памяти программ образуют область векторов прерывания. В этой области для каждого возможного источника прерывания отведен свой адрес, по которому (в случае использования данного прерывания) размещают команду относительного перехода RJMP на подпрограмму обработки прерывания. Следует помнить, что адреса векторов прерывания одних и тех же аппаратных узлов для разных типов AVR могут иметь разное значение. Поэтому для обеспечения переносимости программного обеспечения удобно, так же как и в случае с регистрами ввода/вывода, использовать символические имена адресов векторов прерывания, которые определены в соответствующем inc-файле.

В ячейках оперативной памяти организуется системный стек, который используется автоматически для хранения адресов возврата при выполнении подпрограмм, а также может использоваться программистом для временного хранения содержимого оперативных регистров (команды PUSH и POP). Стек растет от старших адресов к младшим, поэтому, учитывая, что начальное значение указателя стека после сброса равно нулю, программист AVR обязательно должен в инициализирующей части программы позаботиться об установке указателя стека, если он предполагает использовать хотя бы одну подпрограмму. Микроконтроллеры, не имеющие RAM (семейства Tiny), содержат трехуровневый аппаратный стек.

Система команд AVR представлена в табл. 1.2.

Операнды могут быть таких видов:

Rd: Результирующий (и исходный) регистр в регистровом файле;

Rr: Исходный регистр в регистровом файле;

b: Константа (3 бита), может быть константное выражение;

s: Константа (3 бита), может быть константное выражение;

P: Константа (5-6 бит), может быть константное выражение;

K6; Константа (6 бит), может быть константное выражение;

K8: Константа (8 бит), может быть константное выражение;

k: Константа (размер зависит от инструкции), может быть константное выражение;

q: Константа (6 бит), может быть константное выражение;

Rdl: R24, R26, R28, R30. Для инструкций ADIW и SBIW;

X,Y,Z: Регистры косвенной адресации (X=R27:R26, Y=R29:R28, Z=R31:R30).

Ассемблер не различает регистр символов.

Таблица 1.2 — Инструкции процессоров AVR

 

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

 
Мнемоника Операнды Описание Операция Флаги Циклы
ADD Rd,Rr Суммирование без переноса Rd = Rd + Rr Z,C,N,V,H,S
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C Z,C,N,V,H,S
SUB Rd,Rr Вычитание без переноса Rd = Rd - Rr Z,C,N,V,H,S
SUBI Rd,K8 Вычитание константы Rd = Rd - K8 Z,C,N,V,H,S
SBC Rd,Rr Вычитание с переносом Rd = Rd - Rr - C Z,C,N,V,H,S
SBCI Rd,K8 Вычитание константы с переносом Rd = Rd - K8 - C Z,C,N,V,H,S
AND Rd,Rr Логическое И Rd = Rd · Rr Z,N,V,S
ANDI Rd,K8 Логическое И с константой Rd = Rd · K8 Z,N,V,S
OR Rd,Rr Логическое ИЛИ Rd = Rd V Rr Z,N,V,S
ORI Rd,K8 Логическое ИЛИ с константой Rd = Rd V K8 Z,N,V,S
EOR Rd,Rr Логическое исключающее ИЛИ Rd = Rd EOR Rr Z,N,V,S
COM Rd Побитная Инверсия Rd = $FF - Rd Z,C,N,V,S
NEG Rd Изменение знака (Доп. код) Rd = $00 - Rd Z,C,N,V,H,S
SBR Rd,K8 Установить бит (биты) в регистре Rd = Rd V K8 Z,C,N,V,S
CBR Rd,K8 Сбросить бит (биты) в регистре Rd = Rd · ($FF - K8) Z,C,N,V,S
INC Rd Инкрементировать значение регистра Rd = Rd + 1 Z,N,V,S
DEC Rd Декрементировать значение регистра Rd = Rd -1 Z,N,V,S
TST Rd Проверка на ноль либо отрицательность Rd = Rd · Rd Z,C,N,V,S
CLR Rd Очистить регистр Rd = 0 Z,C,N,V,S
SER Rd Установить регистр Rd = $FF None
ADIW Rdl,K6 Сложить константу и слово Rdh:Rdl = Rdh:Rdl + K6 Z,C,N,V,S
Продолжение табл. 1.2
SBIW

Rdl,K6 Вычесть константу из слова Rdh:Rdl = Rdh:Rdl - K 6 Z,C,N,V,S
MUL Rd,Rr Умножение чисел без знака R1:R0 = Rd * Rr Z,C
MULS Rd,Rr Умножение чисел со знаком R1:R0 = Rd * Rr Z,C
MULSU Rd,Rr Умножение числа со знаком с числом без знака R1:R0 = Rd * Rr Z,C
FMUL Rd,Rr Умножение дробных чисел без знака R1:R0 = (Rd * Rr) << 1 Z,C
FMULS Rd,Rr Умножение дробных чисел со знаком R1:R0 = (Rd *Rr) << 1 Z,C
FMULSU Rd,Rr Умножение дробного числа со знаком с числом без знака R1:R0 = (Rd * Rr) << 1 Z,C

Команды ветвления

 
Мнемоника Операнды Описание Операция Флаги Циклы
RJMP k Относительный переход PC = PC + k +1 None
IJMP Нет Косвенный переход на (Z) PC = Z None
EIJMP Нет Расширенный косвенный переход на (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND None
JMP k Переход PC = k None
RCALL k Относительный вызов подпрограммы STACK = PC+1, PC = PC + k + 1 None 3/4*
ICALL Нет Косвенный вызов (Z) STACK = PC+1, PC = Z None 3/4*
EICALL Нет Расширенный косвенный вызов (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND None 4*
CALL k Вызов подпрограммы STACK = PC+2, PC = k None 4/5*
RET Нет Возврат из подпрограммы PC = STACK None 4/5*
RETI Нет Возврат из прерывания PC = STACK I 4/5*
Продолжение табл. 1.2  
CPSE

Rd,Rr Сравнить, пропустить если равны if (Rd ==Rr) PC = PC 2 or 3 None 1/2/3
CP Rd,Rr Сравнить Rd -Rr Z,C,N,V,H,S
CPC Rd,Rr Сравнить с переносом Rd - Rr - C Z,C,N,V,H,S
CPI Rd,K8 Сравнить с константой Rd - K Z,C,N,V,H,S
SBRC Rr,b Пропустить если бит в регистре очищен if(Rr(b)==0) PC = PC + 2 or 3 None 1/2/3
SBRS Rr,b Пропустить если бит в регистре установлен if(Rr(b)==1) PC = PC + 2 or 3 None 1/2/3
SBIC P,b Пропустить если бит в порту очищен if(I/O(P,b)==0) PC = PC + 2 or 3 None 1/2/3
SBIS P,b Пропустить если бит в порту установлен if(I/O(P,b)==1) PC = PC + 2 or 3 None 1/2/3
BRBC s,k Перейти если флаг в SREG очищен if(SREG(s)==0) PC = PC + k + 1 None 1/2
BRBS s,k Перейти если флаг в SREG установлен if(SREG(s)==1) PC = PC + k + 1 None 1/2
BREQ k Перейти если равно if(Z==1) PC = PC + k + 1 None 1/2
BRNE k Перейти если не равно if(Z==0) PC = PC + k + 1 None 1/2
BRCS k Перейти если перенос установлен if(C==1) PC = PC + k + 1 None 1/2
BRCC k Перейти если перенос очищен if(C==0) PC = PC + k + 1 None 1/2
BRSH k Перейти если равно или больше if(C==0) PC = PC + k + 1 None 1/2
BRLO k Перейти если меньше if(C==1) PC = PC + k + 1 None 1/2
BRMI k Перейти если минус if(N==1) PC = PC + k + 1 None 1/2
BRPL k Перейти если плюс if(N==0) PC = PC + k + 1 None 1/2
BRGE k Перейти если больше или равно (со знаком) if(S==0) PC = PC + k + 1 None 1/2
BRLT k Перейти если меньше (со знаком)   if(S==1) PC = PC + k + 1 None 1/2
Продолжение табл. 1.2  
BRHS

k Перейти если флаг внутреннего переноса установлен if(H==1) PC = PC + k + 1 None 1/2
BRHC k Перейти если флаг внутреннего переноса очищен if(H==0) PC = PC + k + 1 None 1/2
BRTS k Перейти если флаг T установлен if(T==1) PC = PC + k + 1 None 1/2
BRTC k Перейти если флаг T очищен if(T==0) PC = PC + k + 1 None 1/2
BRVS k Перейти если флаг переполнения установлен if(V==1) PC = PC + k + 1 None 1/2
BRVC k Перейти если флаг переполнения очищен if(V==0) PC = PC + k + 1 None 1/2
BRIE k Перейти если прерывания разрешены if(I==1) PC = PC + k + 1 None 1/2
BRID k Перейти если прерывания запрещены if(I==0) PC = PC + k + 1 None 1/2

* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций CALL, ICALL, EICALL, RCALL, RET и RETI необходимо добавить три цикла плюс по два цикла для каждого ожидания в контроллерах с PC, меньшим 16 бит (128KB памяти программ). Для устройств с памятью программ свыше 128KB добавьте пять циклов плюс по три цикла на каждое ожидание.

Команды передачи данных

 
Мнемоника Операнды Описание Операция Флаги Циклы
MOV Rd,Rr Скопировать регистр Rd = Rr None
MOVW Rd,Rr Скопировать пару регистров Rd+1:Rd = Rr+1:Rr None
LDI Rd,K8 Загрузить константу Rd = K None
LDS Rd,k Прямая загрузка Rd = (k) None 2*
LD Rd,X Косвенная загрузка Rd = (X) None 2*
LD Rd,X+ Косвенная загрузка с пост-инкрементом Rd = (X), X=X+1 None 2*
Продолжение табл. 1.2  
LD

Rd,-X Косвенная загрузка с пре-декрементом X=X-1, Rd = (X) None 2*
LD Rd,Y Косвенная загрузка Rd = (Y) None 2*
LD Rd,Y+ Косвенная загрузка с пост-инкрементом Rd = (Y), Y=Y+1 None 2*
LD Rd,-Y Косвенная загрузка с пре-декрементом Y=Y-1, Rd = (Y) None 2*
LDD Rd,Y+q Косвенная загрузка с замещением Rd = (Y+q) None 2*
LD Rd,Z Косвенная загрузка Rd = (Z) None 2*
LD Rd,Z+ Косвенная загрузка с пост-инкрементом Rd = (Z), Z=Z+1 None 2*
LD Rd,-Z Косвенная загрузка с пре-декрементом Z=Z-1, Rd = (Z) None 2*
LDD Rd,Z+q Косвенная загрузка с замещением Rd = (Z+q) None 2*
STS k,Rr Прямое сохранение (k) = Rr None 2*
ST X,Rr Косвенное сохранение (X) = Rr None 2*
ST X+,Rr Косвенное сохранение с пост-инкрементом (X) = Rr, X=X+1 None 2*
ST -X,Rr Косвенное сохранение с пре-декрементом X=X-1, (X)=Rr None 2*
ST Y,Rr Косвенное сохранение (Y) = Rr None 2*
ST Y+,Rr Косвенное сохранение с пост-инкрементом (Y) = Rr, Y=Y+1 None
ST -Y,Rr Косвенное сохранение с пре-декрементом Y=Y-1, (Y) = Rr None
ST Y+q,Rr Косвенное сохранение с замещением (Y+q) = Rr None
ST Z,Rr Косвенное сохранение (Z) = Rr None
ST Z+,Rr Косвенное сохранение с пост-инкрементом (Z) = Rr, Z=Z+1 None
ST -Z,Rr Косвенное сохранение с пре-декрементом Z=Z-1, (Z) = Rr None
ST Z+q,Rr Косвенное сохранение с замещением (Z+q) = Rr None
LPM Нет Загрузка из программной памяти R0 = (Z) None
LPM Rd,Z Загрузка из программной памяти Rd = (Z) None
LPM Rd,Z+ Загрузка из программной памяти с пост-инкрементом Rd = (Z), Z=Z+1 None
ELPM Нет Расширенная загрузка из программной памяти R0 = (RAMPZ:Z) None
ELPM Rd,Z Расширенная загрузка из программной памяти Rd = (RAMPZ:Z) None
Продолжение табл. 1.2  
ELPM

Rd,Z+ Расширенная загрузка из программной памяти с пост-инкрементом Rd = (RAMPZ:Z), Z = Z+1 None
SPM Нет Сохранение в программной памяти (Z) = R1:R0 None -
ESPM Нет Расширенное сохранение в программной памяти (RAMPZ:Z) = R1:R0 None -
IN Rd,P Чтение порта Rd = P None
OUT P,Rr Запись в порт P = Rr None
PUSH Rr Занесение регистра в стек STACK = Rr None
POP Rd Извлечение регистра из стека Rd = STACK None

 

 

* Для операций доступа к данным количество циклов указано при условии доступа к внутренней памяти данных, и не корректно при работе с внешним ОЗУ. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH и POP необходимо добавить один цикл плюс по одному циклу для каждого ожидания.

 

Команды работы с битами

 
Мнемоника Операнды Описание Операция Флаги Циклы
LSL Rd Логический сдвиг влево Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S
LSR Rd Логический сдвиг вправо Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) Z,C,N,V,S
ROL Rd Циклический сдвиг влево через C Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S
ROR Rd Циклический сдвиг вправо через C Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S
ASR Rd Арифметический сдвиг вправо Rd(n)=Rd(n+1), n=0,...,6 Z,C,N,V,S
SWAP Rd Перестановка тетрад Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None
BSET s Установка флага SREG(s) = 1 SREG(s)
BCLR s Очистка флага SREG(s) = 0 SREG(s)
SBI P,b Установить бит в порту I/O(P,b) = 1 None
Продолжение табл. 1.2  
CBI

P,b Очистить бит в порту I/O(P,b) = 0 None
BST Rr,b Сохранить бит из регистра в T T = Rr(b) T
BLD Rd,b Загрузить бит из T в регистр Rd(b) = T None
SEC Нет Установить флаг переноса C =1 C
CLC Нет Очистить флаг переноса C = 0 C
SEN Нет Установить флаг отрицательного числа N = 1 N
CLN Нет Очистить флаг отрицательного числа N = 0 N
SEZ Нет Установить флаг нуля Z = 1 Z
CLZ Нет Очистить флаг нуля Z = 0 Z
SEI Нет Установить флаг прерываний I = 1 I
CLI Нет Очистить флаг прерываний I = 0 I
SES Нет Установить флаг числа со знаком S = 1 S
CLS Нет Очистить флаг числа со знаком S = 0 S
SEV Нет Установить флаг переполнения V = 1 V
CLV Нет Очистить флаг переполнения V = 0 V
SET Нет Установить флаг T T = 1 T
CLT Нет Очистить флаг T T = 0 T
SEH Нет Установить флаг внутреннего переноса H = 1 H
CLH Нет Очистить флаг внутреннего переноса H = 0 H
NOP Нет Нет операции Нет None
SLEEP Нет Спать (уменьшить энергопотребление) Смотрите описание инструкции None
WDR Нет Сброс сторожевого таймера Смотрите описание инструкции None

 








Дата добавления: 2016-01-09; просмотров: 1863;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.03 сек.