Техника микропроцессорных систем в электросвязи. Исследования микроконтроллеров

Классификация, структура, архитектура и модульная организация микроконтроллеров. Средства разработки программного обеспечения AVR-контроллеров. Директивы транслятора ассемблера, рабочая частота и циклы. Исследование арифметических и логических команд.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид методичка
Язык русский
Дата добавления 19.09.2019
Размер файла 3,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рисунок 1.5 - Сравнительная характеристика некоторых микропроцессорных платформ

1.6.3 Таймеры микроконтроллеров AVR

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

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

Общие черты всех таймеров/счетчиков следующие.

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

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

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

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

1.6.4 Порты ввода-вывода

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

Интересная архитектурная особенность построения портов ввода/вывода у AVR заключается в том, что для каждого физического вывода существует 3 бита контроля/управления, а не 2, как у распространенных 8-разрядных микроконтроллеров (Intel, Microchip, Motorola и т.д.).

1.6.5 Ввод аналоговых данных

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

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

1.6.6 Пониженное энергопотребление

AVR - микроконтроллеры могут быть переведены программным путем в один из шести режимов пониженного энергопотребления. Для разных семейств AVR и разных микроконтроллеров в пределах каждого семейства изменяются количество и сочетание доступных режимов пониженного энергопотребления.

Режим холостого хода (IDLE), в котором прекращает работу только процессор и фиксируется содержимое памяти данных, а внутренний генератор синхросигналов, таймеры, система прерываний и WATCHDOG-таймер продолжают функционировать.

Режим микропотребления (Power Down), в котором сохраняется содержимое регистрового файла, но останавливается внутренний генератор синхросигналов. Выход из Power Down возможен либо по общему сбросу микроконтроллера, либо по сигналу (уровень) от внешнего источника прерывания. При включенном WATCHDOG-таймере ток потребления в этом режиме составляет около 60...80 мкА, а при выключенном - менее 1 мкА для всех типов AVR. Вышеприведенные значения справедливы для величины питающего напряжения 5 В.

Режим сохранения энергии (Power Save), который реализован только у тех AVR, которые имеют в своем составе систему реального времени. В основном, режим Power Save идентичен Power Down, но здесь допускается независимая работа дополнительного таймера/счетчика RTC. Выход из режима Power Save возможен по прерыванию, вызванному или переполнением таймера/счетчика RTC, или срабатыванием блока сравнения этого счетчика. Ток потребления в этом режиме составляет 6...10 мкА при напряжении питания 5 В на частоте 32,768 кГц.

Режим подавления шума при работе аналого-цифрового преобразователя (ADC Noise Reduction). Как уже отмечалось, в этом режиме останавливается процессорное ядро, но разрешена работа АЦП, двухпроводного интерфейса I2C и сторожевого таймера.

Основной режим ожидания (Standby). Идентичен режиму Power Down, но здесь работа тактового генератора не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.

Дополнительный режим ожидания (Extended Standby). Идентичен режиму Power Save, но здесь работа тактового генератора тоже не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.

1.6.7 Питающее напряжение

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

1.6.8 Программная модель

С точки зрения программиста AVR представляет собой 8-разрядный RISC микроконтроллер, имеющий быстрый Гарвардский процессор, память программ, память данных, порты ввода/вывода и различные интерфейсные схемы. Структурная схема микроконтроллера приведена на рисунке 1.7. Гарвардская архитектура AVR реализует полное логическое и физическое разделение не только адресных пространств, но и информационных шин для обращения к памяти программ и к памяти данных, причем способы адресации и доступа к этим массивам памяти также различны. Подобное построение уже ближе к структуре цифровых сигнальных процессоров и обеспечивает существенное повышение производительности. Центральный процессор работает одновременно как с памятью программ, так и с памятью данных; разрядность шины памяти программ расширена до 16 бит. Следующим шагом на пути увеличения быстродействия AVR является использование технологии конвейеризации, вследствие чего цикл "выборка - исполнение" команды заметно сокращен.

Следующая отличительная черта архитектуры микроконтроллеров AVR - регистровый файл быстрого доступа. Каждый из 32-х регистров общего назначения длиной 1 байт непосредственно связан с арифметико-логическим устройством (ALU) процессора. Другими словами, в AVR существует 32 регистра - аккумулятора (сравните, например, с MCS51). Это обстоятельство позволяет в сочетании с конвейерной обработкой выполнять одну операцию в ALU за один машинный цикл. Так, два операнда извлекаются из регистрового файла, выполняется команда и результат записывается обратно в регистровый файл в течение только одного машинного цикла.

7 0 7 0 Адрес

RO

RO

$00

R1

R1

$01

R2

R2

$02

...

...

R13

R13

$0D

R14

R14

$ОЕ

R15

R15

$OF

R16

R16

$10

R17

R17

$11

...

...

R26

R26

$1А регистр X, мл байт

R27

R27

$1В регистр X, ст. байт

R28

R28

$1С регистр Y, мл байт

R29

R29

$1D регистр Y, ст. байт

R30 (регистр Z)

R30

$1Е регистр Z, мл байт

R31

R31

$1F регистр Z, ст.байт

AT90S1200

Ост. модели

Рисунок 1.6 - Структура регистрового файла

Шесть из 32-х регистров файла (с 26-го по 31-й) могут использоваться как три 16-разрядных указателя адреса при косвенной адресации данных (рисунок 1.6). Один из этих указателей (Z Pointer) применяется также для доступа к данным, записанным в памяти программ микроконтроллера. Использование трех 16-битных указателей (X, Y и Z Pointers) существенно повышает скорость пересылки данных при работе прикладной программы.

Регистровый файл занимает младшие 32 байта в общем адресном пространстве SRAM AVR. Такое архитектурное решение позволяет получать доступ к быстрой "регистровой" оперативной памяти микроконтроллера двумя путями - непосредственной адресацией в коде команды к любой ячейке и другими способами адресации ячеек SRAM.

В технической документации фирмы Atmel это полезное свойство носит название "быстрое контекстное переключение" и является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность.

Особенно заметно данное преимущество при реализации процедур целочисленной 16-битной арифметики, когда исключаются многократные пересылки между различными ячейками памяти данных при обработке арифметических операндов в ALU.

Таблица 1.1

Дополнительные символические имена индексных регистров

Регистр

Символическое имя

R26

XL

R27

ХН

R28

YL

R29

YH

R30

ZL

R31

ZH

Для AT90S1200 определены только два регистра-указателя: R30-ZL и R31-ZH.

Регистры общего назначения

Все регистры общего назначения объединены в файл, структура которого показана на рисунке 1.6.

Как уже было сказано, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ в отличие от микроконтроллеров других фирм, в которых имеется только один такой регистр - рабочий регистр W (аккумулятор). Благодаря этому любой РОН может использоваться во всех командах и как операнд-источник и как операнд-приемник. Исключение составляют лишь пять арифметических и логических команд, выполняющих действия между константой и регистром (SBCI, SUBI, CPI, ANDI, ORI), а также команда загрузки константы в регистр (LDI). Эти команды могут обращаться только ко второй половине регистров (R16...R31). Ряд регистров общего назначения используется в качестве указателей при косвенной адресации памяти данных. В модели AT90S1200 таким регистром является регистр R30 (регистр Z). Поскольку объем адресуемой памяти данных этой модели составляет всего 96 байт, для хранения адреса достаточно одного 8-разрядного регистра. Во всех других моделях для косвенной адресации используются три 16-разрядных регистра (регистры X, Y и Z), каждый из которых получается объединением двух РОН (рисунок 1.7).

15

0

Регистр X

7 0

7 0

R27($1B)/15

R26($1A)/0

Регистр Y

7 0

7 0

R29($1D)/15

R28($1C)/0

Регистр Z

7 0

7 0

R31($1F)

R30($1E)

Рисунок 1.7 - Регистры-указатели X, Y и Z

Как показано на рисунке 1.7, каждый регистр файла имеет свой собственный адрес в пространстве памяти данных (кроме AT90S1200). Поэтому к ним можно обращаться как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗУ.

Регистры ввода/вывода

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

Распределение адресов пространства ввода/вывода зависит от конкретной модели микроконтроллера, т.к. разные модели имеют различный состав периферийных устройств и, соответственно, разное количество регистров. Размещение РВВ в адресном пространстве ввода/вывода для всех моделей семейства приведено в таблицах П.1-П.4.

Общее замечание к таблицам: если адрес в таблице не указан, это означает, что для данной модели он зарезервирован, и запись по этому адресу запрещена (крайне не рекомендуется).

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

Так же, как и к РОН, к регистрам ввода/вывода можно обращаться двумя способами: как собственно к регистрам (с помощью команд IN и OUT) и как к ячейкам ОЗУ (кроме AT90S1200). В первом случае используются адреса РВВ, принадлежащие пространству ввода/вывода ($00...$3F). Во втором случае адрес РВВ необходимо увеличить на $20 (в таблицах при указании адресов РВВ в скобках указываются соответствующие им адреса ячеек ОЗУ).

Все служебные регистры перечислены в таблице 1.2, знак "+" в таблице означает, что тот или иной регистр присутствует в данной модели микроконтроллера. Обратите внимание, что адреса служебных регистров не меняются от модели к модели (т.е. регистр SREG всегда расположен по адресу $3F ($5F), GIMSK -- по адресу $ЗВ ($5В) и т.д.).

Таблица 1.2

Служебные регистры микроконтроллеров семейства Classic

Название регистра

Адрес

AT90S1200

AT90S2313

AT90S/LS2323

AT90S/LS2343

AT90S/LS2333

AT90S/LS4433

AT90S/LS4434

AT90S/LS8535

AT90S4414

AT90S8515

AT90C8534

SREG

$3F ($5F)

+

+

+

+

+

+

+

+

+

+

+

SPH

$3E ($5E)

+

+

+

+

+

SPL

$3D ($5D)

+

+

+

+

+

+

+

+

+

+

G1MSK

$3B ($5B)

+

+

+

+

+

+

+

+

+

+

+

GIFR

$3A ($5A)

+

+

+

+

+

+

+

+

+

+

TIMSK

$39 ($59)

+

+

+

+

+

+

+

+

+

+

+

TIFR

$38 ($58)

+

+

+

+

+

+

+

+

+

+

+

MCUCR

$35 ($55)

+

+

+

+

+

+

+

+

+

+

+

MCUSR

$34 ($54)

+

+

+

+

Регистр состояния SREG

Регистр состояния располагается по адресу $3F ($5F). Этот регистр представляет собой набор флагов, показывающих текущее состояние микроконтроллера. Эти флаги автоматически устанавливаются в "1" или в "0" при наступлении определенных событий (в соответствии с результатом выполнения команд). Все разряды этого регистра доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера все разряды регистра сбрасываются в "0". Содержимое этого регистра показано на рисунке 1.8, а его описание приведено в таблице 1.3.

7

6

5

4

3

2

1

0

1

Т

Н

S

V

N

Z

С

Чтение(R)/Запись(W) Начальное значение

R/W

0

R/W

0

R/W

0

R/W

0

R/W

0

R/W

0

R/W

0

R/W

0

Рисунок 1.8 - Регистр состояния SREG

Таблица 1.3

Регистр состояния SREG

Разряд

Название

Описание

7

I

Общее разрешение прерываний. Для разрешения прерываний этот флаг должен быть установлен в "1". Разрешение/запрещение отдельных прерываний производится установкой или сбросом соответствующих разрядов регистров масок прерываний. Если флаг сброшен (0), то прерывания запрещены независимо от состояния этих регистров. Флаг сбрасывается аппаратно после входа в прерывание и восстанавливается командой RETI для разрешения обработки следующих прерываний

6

Т

Хранение копируемого бита. Этот разряд регистра используется в качестве источника или приемника командами копирования битов BLD (Bit LoaD) и BST (Bit STore). Заданный разряд любого РОН может быть скопирован в этот разряд командой BST или установлен в соответствии с содержимым данного разряда командой BLD

5

Н

Флаг половинного переноса. Этот флаг устанавливается в "1", если имел место перенос из младшей половины байта (из 3-го разряда в 4-й) или заем из старшей половины байта при выполнении некоторых арифметических операций

4

S

Флаг знака. Этот флаг равен результату операции "Исключающее ИЛИ" (XOR) между флагами N (отрицательный результат) и V (переполнение числа в дополнительном коде) Соответственно этот флаг устанавливается в "1", если результат выполнения арифметической операции меньше нуля

3

V

Флаг переполнения дополнительного кода. Этот флаг устанавливается в "1" при переполнении разрядной сетки знакового результата. Используется при работе со знаковыми числами (представленными в дополнительном коде). Более подробно см. описание системы команд

2

N

Флаг отрицательного значения. Этот флаг устанавливается в "1", если старший разряд (7-й) результата операции равен "1". В противном случае флаг равен "0"

1

Z

Флаг нуля. Этот флаг устанавливается в "1", если результат выполнения операции равен нулю

0

С

Флаг переноса. Этот флаг устанавливается в "1", если в результате выполнения операции произошел выход за границы байта

SP (указатель стека)

В моделях, имеющих объем ОЗУ до 128 байт (адресное пространство ОЗУ - $000...$ODF), указатель стека реализован на одном регистре SPL, расположенном по адресу $3D ($5D). В остальных моделях указатель стека реализован на паре регистров SPH:SPL, расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Причем для всех моделей, кроме АТ9084414 и AT90S8515, в регистре SPH (старший байт указателя стека) используются только 1 (объем ОЗУ - 256 байт) или 2 (объем ОЗУ - 512 байт) младших разряда, остальные разряды доступны только для чтения и содержат "0". В моделях AT90S4414 и AT90S8515 оба регистра SPH:SPL используются полностью, т.к. максимальный объем памяти в этих моделях равен 64 Кбайт. Все используемые разряды регистров доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера содержимое регистров равно 0, поэтому в самом начале программы указатель стека необходимо проинициализировать каким-либо значением (как правило, это наибольший для конкретного микроконтроллера адрес памяти данных).

Регистры управления прерываниями

Четыре регистра предназначены для управления внешними прерываниями (регистры GIMSK и GIFR) и прерываниями от таймеров (регистры TIMSK и TIFR). Регистры масок GIMSK (общий регистр маски прерываний) и TIMSK (регистр маски прерываний от таймеров) используются при разрешения/запрещения отдельных прерываний, а регистры флагов GIFR (общий регистр флагов прерываний) и TIFR (регистр флагов прерываний от таймеров) содержат флаги, показывающие, произошло или нет соответствующее прерывание.

MCUCR (регистр управления микроконтроллером)

Регистр управления микроконтроллером (рисунок 1.9, таблицы П.5-П.7) расположен по адресу $35 ($55). Этот регистр содержит ряд флагов, используемых для общего управления микроконтроллером. Состав флагов, размещенных в регистре MCUCR, несколько меняется от модели к модели, соответственно в некоторых моделях некоторые разряды не используются. Неиспользуемые разряды регистра доступны только для чтения и содержат "0". Все используемые разряды регистра доступны как для чтения, так и для записи в любой момент времени. После сброса микроконтроллера во всех разрядах регистра записано "0".

Таблица 1.4

Регистр управления микроконтроллером MCUCR

Разряды

7

6

5

4

3

2

1

0

Модели

-

-

SE

SM

-

-

ISC01

ISC00

AT90S1200

AT90S/LS2323 AT90S/LS2343

Чтение(R)/Запись(W)

R

R

R/W

R/W

R

R

R/W

R/W

Начальное значение

0

0

0

0

0

0

0

0

-

-

SE

SM

ISC11

ISC10

ISC01

ISCOO

AT90S2313

AT90S/LS2333 AT90S/LS4433

Чтение(R)/Запись(W)

R

R

R/W

R/W

R/W

R/W

R/W

R/W

Начальное значение

0

0

0

0

0

0

0

0

SRE

SRW

SE

SM

ISC11

ISC10

ISC01

ISCOO

AT90S4414

AT90S8515

Чтение(R)/Запись(W)

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Начальное значение

0

0

0

0

0

0

0

0

-

SE

SM1

SM0

ISC11

ISC10

ISC01

ISCOO

AT90S/LS4434

AT90S/LS8535

Чтение(R)/Запись(W)

R

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Начальное значение

0

0

0

0

0

0

0

0

-

-

SE

SM

-

ISC1

-

ISCO

AT90S8534

Чтение(R)/Запись(W)

R

R

R/W

R/W

R

R/W

R

R/W

Начальное значение

0

0

0

0

0

0

0

0

MCUSR (регистр состояния микроконтроллера)

Регистр управления микроконтроллером расположен по адресу $34 ($54). Этот регистр содержит флаги, состояние которых позволяет определить причину, по которой произошел сброс микроконтроллера.

Способы адресации памяти данных

Все микроконтроллеры AVR семейства Classic, за исключением модели AT90S1200, поддерживают 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ, ОЗУ). Модель AT90S1200 в связи с отсутствием у нее встроенного ОЗУ и из-за наличия единственного индексного регистра поддерживает только 4 способа адресации из восьми. В действительности способов адресации всего два: прямая адресация и косвенная. Однако каждый способ адресации имеет несколько разновидностей в зависимости от того, к какой области памяти производится обращение (для прямой адресации) или какие дополнительные действия выполняются над индексным регистром (для косвенной адресации).

1.6.9 Система команд

Система команд AVR весьма развита и насчитывает до 133 различных инструкций. Почти все команды имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве случаев объединять в одной команде и код операции, и операнд(ы).

Рисунок 1.9 - Структурная схема AVR

Лишь немногие команды имеют размер в 2 слова (32 бит) и относятся к группе команд вызова процедуры CALL, длинных переходов в пределах всего адресного пространства JMP, возврата из подпрограмм RET и команд работы с памятью программ LPM.

Различают пять групп команд AVR: условного ветвления, безусловного ветвления, арифметические и логические операции, команды пересылки данных, команды работы с битами. В последних версиях кристаллов AVR семейства "mega" реализована функция аппаратного умножения, что придает новым микроконтроллерам еще больше привлекательности с точки зрения разработчика.

По разнообразию и количеству реализованных инструкций AVR больше похожи на CISC, чем на RISC процессоры. Например, у PIC-контроллеров система команд насчитывает до 75 различных инструкций, а у MCS51 она составляет 111. В целом, прогрессивная RISC архитектура AVR в сочетании с наличием регистрового файла и расширенной системы команд позволяет в короткие сроки создавать работоспособные программы с эффективным кодом как по компактности реализации, так и по скорости выполнения.

2. Средства разработки программного обеспечения AVR-контроллеров

2.1 Ассемблер

Как известно, наиболее эффективные программы получаются при использовании языка Ассемблер. Стоит, правда, отметить, что при этом также увеличивается сложность и время разработки программы. Для микроконтроллеров семейства AVR имеется свободно распространяемый транслятор ассемблера -- wavrasm.

Транслятор ассемблера wavrasm преобразует команды в виде текстовых мнемоник (специальных сокращений) в закодированные в виде чисел-кодов команды микроконтроллеров. Полученный код можно использовать для работы совместно с отладчиком для проверки правильности работы программы. Также в результате работы транслятора можно получить так называемый файл прошивки, который используется программатором для занесения программы в память программ микроконтроллера.

Транслятор ассемблера работает в среде Microsoft Windows 3.11, Microsoft Windows 95/98 и NT. Кроме того, имеется версия ассемблера, работающая из командной строки MS-DOS. Она устанавливается одновременно с версией для Windows. Версия для Windows имеет встроенный полноэкранный текстовый редактор и справочную систему на английском языке.

Программа на ассемблере представляет собой текстовый файл, который состоит из мнемоник -- символьных обозначений ком микроконтроллера, меток и директив.

Любая строка может начинаться с метки -- строки из символов и (или) цифр, заканчивающейся двоеточием.

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

Строка исходного текста может иметь один из следующих видов:

[метка:] директива [аргументы директивы] [комментарий]

[метка:] мнемоника команды [аргументы команды] [комментарий]

Комментарий

Пустая строка

Комментарии всегда начинаются с символа ";". Элементы, заключенные в квадратные скобки, могут отсутствовать. Текст, расположенный после символа «точка с запятой» до конца строки, полностью игнорируется ассемблером.

Примеры записи строк:

label1:.EQU var1=100 ; Директива определения символьного

; имени var1, эквивалентного записи "100"

.EQU var2=200 ; Определение имени var2, соответствующего "200"

test: rjmp test ;Бесконечный цикл (мнемоника команды МК)

; Пустая строка

Не имеет значение, в каких местах расположены метки, команды ассемблера и директивы, важен только их порядок.

Транслятор ассемблера позволяет использовать в тексте программы мнемоники (обозначения команд микроконтроллера), полностью совпадающие с их названием в системе команд микроконтроллера.

2.1.1 Команды микроконтроллера

Команды микроконтроллеров семейства AVR делятся на группы:

- арифметические и логические;

- команды условных и безусловных переходов;

- команды передачи данных;

- команды для работы с битами.

Краткое описание команд микроконтроллера можно найти в [].

Для транслятора ассемблера нет разницы, какими буквами написаны слова, т. е. rjmp и RJMP совершенно равнозначны. Однако для удобства понимания программы рекомендуется все мнемоники и метки записывать строчными (маленькими) буквами, а директивы прописными (большими).

2.1.2 Директивы транслятора ассемблера

Транслятор ассемблера поддерживает достаточно много директив. Директивы не транслируются в программу для микроконтроллера. Они используются для указания транслятору ассемблера данных о расположении программы в памяти микроконтроллера, определения макросов и т. д. Все директивы должны начинаться с точки.

В таблице 2.1 приведен перечень директив транслятора ассемблера.

2.2 Среда разработки приложений - AVR Studio

AVR Studio - это интегрированная отладочная среда разработки приложений (IDE) для микроконтроллеров, представленная компанией Atmel для свободного использования [3]. В данной разработке используется AVR Studio версии 4.10. Ожидается появление версии 4.11.

IDE AVR Studio содержит:

- средства создания и управления проектом;

- редактор кода на языке ассемблер;

- транслятор языка ассемблера (Atmel AVR macroassembler);

- отладчик (Debugger);

- программное обеспечение верхнего уровня для поддержки внутрисхемного программирования (In-System Programming, ISP) с использованием стандартных отладочных средств Atmel AVR.

Таблица 2.1

Перечень директив транслятора ассемблера

Обозначение директивы

Описание директивы

.BYTE

резервирует 1 байт для использования в качестве переменной

.CSEG

сегмент программ

.DB

определяет байт-константу

.DEF

определяет символическое имя для регистра

.DEVICE

задает тип целевого микроконтроллера

.DSEG

сегмент данных

.DW

определяет слово-константу

.ENDMACRO

конец определения макроса

.EQU

сопоставляет символьному имени арифметическое выражение

.ESEG

сегмент EEPROM

.EXIT

выйти из файла (конец текста программы)

.INCLUDE

загрузить исходный текст из другого файла

.LIST

включить генерацию листинга

.LISTMAC

включить печать содержимого макросов в листинге

.MACRO

начать определение макроса

.NOLIST

выключить генерацию листинга

.ORG

установить расположение

.SET

сопоставить символу выражение

Работа с AVR Studio начинается с создания проекта. При создании проекта необходимо указать используемый микроконтроллер и платформу, на которой будет производиться отладка программы.

Написание программы производится в окне редактора текста программы (рисунок 2.1). Для использования символических имен регистров специального назначения вместо их адресов, необходимо подключить (директива .include) к проекту файл определения регистров специального назначения (например, m16def.inc для ATmega16). Включаемые файлы входят в прикладное программное обеспечение AVR Studio и при инсталляции помещаются в папку Appnotes в директории установки AVR Studio.

Примеры программ доступны в большом количестве в качестве приложений к руководствам по применению микроконтроллеров AVR (см. раздел Application Notes на сайте []).

Написание программы в AVR Studio производится на языке ассемблер. Система команд микроконтроллера описана в упомянутых выше руководствах по применению в документе AVR Instruction Set либо в файле справки, встроенном в AVR Studio (меню Help\AVR Tools User Guide\AVR Assembler), в котором содержатся достаточно подробные комментарии к каждой команде.

Последние версии AVR Studio содержат тестовую версию AVR ассемблера второй версии, который в дополнение к стандартному ассемблеру поддерживает новые директивы ассемблера, Си - подобные директивы препроцессору, создание переменных определенного типа. Более подробную информацию можно найти в файле справки.

Рисунок 2.1 - Интерфейс интегрированной среды разработки AVR Studio

Перед трансляцией программы можно задать установки проекта (меню Project\AVR Assembler Setup показано на рисунке 2.2), указать необходимый формат выходного файла. Там же возможно установить использование AVR ассемблера 2-ой версии. Так как вторая версия ассемблера проходит стадию тестирования, то по умолчанию он отключен. Если не требуется каких-либо особых настроек, то можно использовать установки по умолчанию.

В результате трансляции создается выходной файл в указанном формате. Если исходный ассемблерный текст содержал сегмент энергонезависимых данных (объявленный директивой .eseg), то при трансляции будет создан также файл с расширением .eep. Этот файл содержит данные для внутренней EEPROM микроконтроллера и имеет тот же формат, что и выходной файл.

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

Отладчик AVR Studio поддерживает все типы микроконтроллеров AVR и имеет два режима работы: режим программной симуляции и режим управления различными типами внутрисхемных эмуляторов (In-Circuit Emulators) производства фирмы Atmel. Важно отметить, что интерфейс пользователя не изменяется в зависимости от выбранного режима отладки.

Отладочная среда поддерживает выполнение программ, как в виде ассемблерного текста, так и в виде исходного текста языка Си, загруженного в объектном коде.

Объектный файл может быть загружен в различных форматах, а именно:

- в формате UBROF (расширение файла .d90). Формат UBROF - это патентованный формат компании IAR. На текущий момент среда разработки AVR Studio поддерживает все версии формата до восьмой версии (UBROF5/6/7/8).

- в формате ELF/DWARF (расширение файла .elf). Формат разработан сообществом открытого программного обеспечения для поддержки бесплатно распространяемых компиляторов (GNU GCC, для микроконтроллеров AVR последние версии данного компилятора имеют название WinAVR). На текущий момент среда разработки AVR Studio поддерживает формат версии DWARF2.

Рисунок 2.2 - Задание установок проекта

- в формате AVR COFF (расширение файла .cof). Это открытый формат, введенный в среду разработки AVR Studio для поддержки сторонних разработчиков компиляторов. Отладочный код в данном формате может быть сформирован с использованием таких компиляторов как, например, CodeVision AVR.

- в формате Extended Intel HEX (расширение .hex). Данный формат не приспособлен для отладки и используется для отладки в крайнем случае.

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

Управление отладкой производится командами меню DEBUG, либо соответствующими иконками на панели управления AVR Studio.

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

В AVR Studio для отладки программы предусмотрены две команды пошагового режима: Step Over и Trace into. Разница между ними в том, что при выполнении команды Step Over выполнение подпрограмм происходит до полного окончания без отображения процесса выполнения. К командам шагового режима также относятся команда Auto Step.

Рисунок 2.3 - Выбор платформы и прибора

С помощью команд пошагового режима можно проследить изменения значений в переменных, регистрах ввода/вывода, памяти и регистрового файла. Для этого предназначены раздел I/O рабочей области AVR Studio (см. картинку), окно Watch (меню Debug\Quickwatch).

Интегрированная среда разработки AVR Studio также поддерживает просмотр (меню View\Memory) ячеек памяти программ, памяти данных, EEPROM и регистров портов ввода/вывода в ходе исполнения. Выпадающее меню диалогового окна позволяет выбрать один из четырех массивов ячеек памяти: Data, IO, Eeprom, Program Memory. Для одновременного просмотра нескольких областей окно Memory может быть открыто несколько раз. Информация в диалоговом окне может быть представлена в виде байтов или в виде слов в шестнадцатеричной системе счисления, а также в виде ASСII - символов.

В процессе отладки пользователь может инициализировать внутреннее ОЗУ или EEPROM микроконтроллера (например, данными, содержащимися в полученном при трансляции файле .eep), или сохранить содержимое ОЗУ и EEPROM в виде файлов в формате Intel Hex (меню File->Up/Download Memory).

Помимо шагового режима, возможна отладка программы с использованием точек останова (меню Breakpoints->Toggle Breakpoint). Командой Start Debugging запускается исполнение программы. Программа будет выполняться до остановки пользователем или до обнаружения точки останова.

Работая с программным симулятором пакета AVR Studio, следует помнить, что он пока не поддерживает некоторые режимы работы микроконтроллеров AVR и их периферийные узлы:

- аналого-цифровой преобразователь;

- аналоговый компаратор;

- режим часов реального времени;

- режим пониженного энергопотребления (инструкция "sleep" интерпретируется программным симулятором как "nop");

Возможно, в последующих версиях AVR Studio поддержка этих узлов и режимов будет реализована, но в настоящий момент при работе программы с аналоговой периферией, необходимо производить ручной ввод данных в регистры результата.

Для наблюдения за работой программы можно открыть несколько окон, отображающих состояние различных узлов микроконтроллера (см. рисунок). Окна открываются нажатием соответствующих кнопок на панели инструментов или при выборе соответствующего пункта меню View. Если в процессе выполнения программы в очередном цикле значение какого-либо регистра изменится, то этот регистр будет выделен красным цветом. При этом, если в следующем цикле значение регистра останется прежним, то цветовое выделение будет снято. Такое же цветовое выделение реализовано в окнах устройств ввода/вывода, памяти и переменных.

Состояние встроенных периферийных устройств микроконтроллера, а также состояния программного счетчика, указателя стека, содержимого регистра статуса SREG и индексных регистров X, Y и Z отображено в окне I/O Window. В этом окне отражаются все функциональные блоки микроконтроллера. Любой блок может быть раскрыт нажатием на его значок. При раскрытии блока в окне отражаются адреса и состояния всех его регистров и отдельных, доступных для модификации, битов.

Рисунок 2.4 - Отображение состояния узлов микроконтроллера

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

Другим способом задания входного воздействия на микроконтроллер в режиме симулятора является использование внешних файлов входных воздействий. Формат файла входного воздействия очень прост:

000000000:00

000000039:01

000000040:00

9999999999:FF

Здесь значение, указанное после разделителя ":" - это шестнадцатеричное представление сигналов, воздействующих на порт микроконтроллера. Значение, указанное до разделителя - это десятичный номер цикла (с момента сброса микроконтроллера), в котором указанное воздействие поступает на выводы порта микроконтроллера. Файл входного воздействия должен заканчиваться строкой с заведомо большим номером цикла, в противном случае будет выдано сообщение об ошибке. Для подключения файла входного воздействия служит пункт меню Debug\Options в разделе Stimuli and Logging. В открывшемся окне нужно указать порт микроконтроллера, на который нужно подавать воздействие, и файл этого воздействия. Пользователь может создавать файлы воздействий, а также записывать изменения значений на выходах портов микроконтроллера в файл (формат этого файла тот же, что и у файла входных воздействий).

Для записи служит функция Logging. В открывшемся окне нужно указать порт микроконтроллера и имя файла для записи. Записываемый файл будет удаляться и создаваться вновь при каждом выполнении сброса микроконтроллера (Debug->Reset). Подключать файл входного воздействия или задавать имя файла для записи пользователь должен сам при каждом запуске симулятора.

Следует отметить, что AVR Studio имеет очень мощную встроенную документацию как по использованию AVR Studio, так и по использованию стандартных отладочных средств производства компании Atmel, а также системе команд и всему, что касается программирования с использованием AVR Studio. Таким образом, использование встроенной справочной информации избавляет разработчика от накопления разобщенной информации, учитывая, что встроенная информация обновляется с выходом новых версий AVR Studio.

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

программный арифметический логический микроконтроллер

3. Лабораторные работы по исследованию микроконтроллеров

AVR-микроконтроллерам присущи все основные черты и характеристики современных восьмиразрядных универсальных микроконтроллеров. Однако они имеют преимущества перед аналогичными микроконтроллерами (например, PIC-контроллерами) по производительности, составу команд и, кроме того, фирма-производитель свободно распространяет удобную среду разработки - AVR Studio.

Поэтому, с одной стороны, эти микроконтроллеры можно эффективно использовать в различных разработках, включая курсовое и дипломное проектирование, а, с другой стороны, могут являться удобными объектами для исследования микроконтроллеров в лабораторных условиях.

Эти соображения стали основой выбора этих микроконтроллеров в качестве объектов лабораторных исследований.

3.1 Исследование арифметических и логических команд

Эти команды позволяют выполнять стандартные логические операции над байтами, такие как "логическое умножение" (И), "логическое сложение" (ИЛИ), операцию "исключающее ИЛИ", а также вычисление обратного и дополнительного кодов числа (таблица 3.1). К этой группе можно отнести также команды очистки/установки регистров и команду перестановки тетрад. Все операции производятся над регистрами общего назначения, результат сохраняется в одном из РОН. Все логические операции выполняются за один машинный цикл.

На рисунке 3.1 представлено рабочее поле программы, отражающее состояние регистров общего назначения и регистров процессора после выполнения команды логического умножения. В ходе выполнения программы в пошаговом режиме студенты должны отслеживать изменение состояния узлов микроконтроллера в рабочем поле программы.

Таблица 3.1

Группа команд логических операций

Мнемоника

Описание

Операция

Циклы

Флаги

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..0) = Rd(7..4), Rd(7..4) = Rd(3..0)

1

--

3.1.1 Программа исследования основных логических команд

.include "2313def.inc"

rjmp RESET;

RESET:

ldi r31, low(ramend) ; формирование стека

out SPL, r31; в верхней части ОЗУ

;**** Логическое умножение содержимого регистров r16 и r17

ldi r16, 0xff; занесение кода $FF в регистр r16

ldi r17, 0x55; занесение кода $55 в регистр r17

and r16, r17; результат логического умножения регистре r16

;**** Логическое сложение содержимого регистра r17 и константы

ldi r17, 0x55; занесение кода $55 в регистр r17

ori r17, 0x0f;лог. сложение содержимого регистра r17 и константы $0f

;**** Логическое сложение содержимого регистров r18 и r19

ldi r18, 0x05; занесение кода $05 в регистр r18

ldi r19, 0x50; занесение кода $50 в регистр r19

or r18, r19; логическое сложение содержимого регистров r18 и r19

;**** Сложение по модулю два содержимого регистров r20 и r21

ldi r20, 0x55; занесение кода $05 в регистр r20

ldi r21, 0xf0; занесение кода $50 в регистр r21

eor r20, r21; сложение "мод 2" содержимого регистров r20 и r21

;**** Обнуление и установка всех разрядов регистра r18

clr r18;обнуление регистра r18

ser r18; регистра r18

.EXIT

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

Все команды рассматриваемой группы выполняются за один машинный цикл, за исключением команд, оперирующих двухбайтовыми значениями, которые выполняются за два цикла.

Рисунок 3.1 - Отображение состояния узлов микроконтроллера после выполнения команды логического умножения

3.1.2 Программа исследования основных арифметических команд

.include "2313def.inc"

rjmp RESET;

RESET:

ldi r31, low(ramend) ; формирование стека

out SPL, r31; в верхней части ОЗУ

** Сложение содержимого регистров r16 и r17

ldi r16, 22;занесение 22 в регистр r16

ldi r17, 100;занесение 100 в регистр r17

add r16, r17;результат сложения в r16

;**** Сложение чисел с разными знаками в дополнительном коде

ldi r16, -7;занесение -7 в регистр r16

ldi r17, 5;занесение 05 в регистр r17

add r16, r17;результат сложения в r16

;флаги N=1 (отрицат. знач.) S=1 (меньше нуля)

;**** Сложение пары регистров с константой 0=<К=<63

ldi r24, 0xff;занесение числа 511 в пару

ldi r25, 01;регистров r25 r24

adiw r24,01;результат сложения в r25 r24

;****;сложение возможно только с парами r24, r26, r28, r30

;**** Вычитание из регистра константы 0=<К=<63

ldi r22, 0x05;занесение кода $05 в регистр r22

subi r22, 1;вычитание 1 из содержимого r22

;**** Декремент и инкремент содержимого регистра

dec r22;уменьшение на 1 содержимого r22

inc r22;увеличение на 1 содержимого r22

;**** сдвиг содержимого регистра

lsl r22;сдвиг содержимого r22 влево на 1 разряд

lsr r22;сдвиг содержимого r22 вправо на 1 разряд

.EXIT

3.2 Исследование ветвящихся участков программ

3.2.1 Команды типа «проверка/пропуск»

В командах этого типа производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Например, команда SBRS Rd.b проверяет разряд b регистра Rd и игнорирует следующую команду, если этот разряд равен «1». В действительности переход к следующей инструкции производится увеличением счетчика команд на 1, а пропуск команды требует загрузки нового значения в счетчик команд. Следовательно, когда проверяемое условие истинно, в конвейере возникает задержка. Длительность задержки зависит от пропускаемой команды и составляет от одного до двух машинных циклов.

3.2.2 Команды условного перехода

B этих командах производится проверка условия, результат которой влияет на состояние счетчика команд. Если условие истинно, происходит переход по заданному адресу. Если же условие ложно, выполняется следующая команда.

Команды условного перехода имеют ограничение по области действия, В действительности новое значение счетчика команд получается прибавлением к нему или вычитанием из него некоторого смещения. А поскольку под значение смещения в слове команды отводится всего 7 бит, максимальная величина перехода составляет от -64 до +64 слов.

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

3.2.3 Команды безусловного перехода

Для безусловного перехода по требуемому адресу в памяти программ используются команды относительного (RJMP) и косвенного (IJMP) переводов, т.к. микроконтроллеры AVR семейства Classic не имеют команды абсолютного перехода (такая команда имеется в микроконтроллерах других семейств, Tiny и Mega).

3.2.4 Относительный переход - команда RJMP

Деятельность команды заключается в изменении содержимого счетчика команд путем прибавления к нему или вычитания из него некоторого значения, являющегося операндом команды, как показано на рисунке 3.2.

Следует помнить, что данная команда имеет ограничение по области действия. Так как операнд представляет собой 12-разрядное число, максимальная величина перехода составляет от -2047 до +2048 слов (±4 Кбайт).

В программах в качестве операндов этой команды вместо констант используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды. Проиллюстрируем сказанное следующим примером:

cpi rl6,$42;Сравниваем регистр r16 с числом $42

brne error;Переход, если r16 <> $42

rjmp ok;Безусловный переход

error:

ok: nор;Место перехода по команде RJMP

Поскольку команда относительного перехода изменяет содержимое счетчика команд, она выполняется за 2 машинных цикла.

3.2.5 Косвенный переход - команда IJMP

В результате выполнения этой команды программа продолжает выполняться с адреса, находящегося в индексном регистре Z. Таким образом, деятельность команды сводится к загрузке содержимого индексного регистра в счетчик команд.

В отличие от команды относительного перехода данная команда не имеет ограничений по области действия. Действительно, поскольку индексный регистр 16-разрядный, максимально возможная величина перехода составляет 64 Кслов (128 Кбайт), а наибольший объем памяти программ микроконтроллеров семейства - всего 8 Кбайт.

Как и команда относительного перехода, команда косвенного перехода выполняется за 2 машинных цикла.

3.2.6 Команды вызова подпрограмм

С командами вызова подпрограмм в микроконтроллерах AVR семейства Classiс дело обстоит так же, как и с командами безусловного перехода. Для вызова подпрограмм имеется две команды: команда относительного вызова (RCALL) и команда косвенного вызова (ICALL).

3.2.7 Относительный вызов подпрограммы - команда RCALL

Если не принимать во внимание некоторые отличия, описанные ниже, эта команда работает так же, как и команда относительного безусловного перехода RJMP.

Команда RCALL сохраняет в стеке значение счетчика команд. Затем содержимое счетчика команд увеличивается или уменьшается на некоторое значение, являющееся операндом команды (рисунок 3.2). Поскольку операнд представляет собой 12-разрядное число, максимальная величина перехода составляет от -2047 до +2048 слов (±4 Кбайт).

В программах в качестве операндов этой команды, как и в случае команды RJMP, используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в слово команды

Команда относительного вызова подпрограмм выполняется за 3 машинных цикла, два из которых затрачиваются на сохранение в стеке двух байт счетчика команд.

Рисунок 3.2 - Относительная адресация памяти программ

3.2.8 Косвенный вызов подпрограммы - команда ICALL

Если не принимать во внимание некоторые отличил, описанные ниже, эта команда работает так же, как и команда косвенного безусловного перехода IJMP.

Команда ICALL сохраняет в стеке значение счетчика команд. Затем в счетчик команд загружается содержимое индексного регистра. Поскольку индексный регистр 16-разрядный, максимально возможная величина перехода составляет 64 Кслов (128 Кбайт). Поэтому данная команда не имеет ограничений по области действия, т.к. наибольший объем памяти программ микроконтроллеров семейства - всего 8 Кбайт. Как и команда RCALL, команда косвенного вызова подпрограмм выполняется за 3 машинных цикла.


Подобные документы

  • Понятие и виды микроконтроллеров. Особенности программирования микропроцессорных систем, построение систем управления химико-технологическим процессом. Изучение архитектуры микроконтроллера ATmega132 фирмы AVR и построение на его основе платформы Arduino.

    курсовая работа [1,9 M], добавлен 13.01.2011

  • Микроконтроллеры - микросхемы, предназначенные для управления электронными устройствами, их классификация. Структура процессорного ядра микроконтроллеров, основные характеристики, определяющие его производительность. CISC и RISC архитектура процессора.

    курсовая работа [43,2 K], добавлен 03.10.2010

  • Семейство 16-разрядных микроконтроллеров Motorola 68HC12, их структура и функционирование. Модуль формирования ШИМ-сигналов. Средства отладки и программирования микроконтроллеров 68НС12. Особенности микроконтроллеров семейства MCS-196 фирмы INTEL.

    курсовая работа [239,6 K], добавлен 04.01.2015

  • Использование микроконтроллеров AVR фирмы Atmel в проектируемой аппаратуре. Архитектура и общие характеристики прибора, предназначение арифметики логического устройства и понятие флэш-памяти. Формат пакета данных, алгоритм их передачи и система команд.

    контрольная работа [427,3 K], добавлен 12.11.2010

  • Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.

    курсовая работа [278,1 K], добавлен 04.05.2014

  • Общая характеристика операций, выполняемых по командам базовой системы. Описание и мнемокоды команд, используемых при разработке программы на языке AVR Ассемблера. Основные принципы работы команд с обращением по адресу SRAM и к регистрам ввода–вывода.

    реферат [148,4 K], добавлен 21.08.2010

  • Микроконтроллер (MCU) — микросхема, предназначенная для управления электронными устройствами. Их можно встретить во многих современных приборах, в том числе и бытовых. Рассмотрение архитектуры различных микроконтроллеров, ядра, памяти, питания, периферии.

    реферат [216,5 K], добавлен 24.12.2010

  • Общая характеристика и применение микроконтроллеров FUJITSU MB-90 и MCS-196 фирмы Intel. Основные особенности микроконтроллеров серии MCS-96 и MB90385. Внутренняя архитектура процессоров. Система команд, работа с внутренними и внешними устройствами.

    курсовая работа [768,0 K], добавлен 01.12.2010

  • Классификация систем управления (СУ) машиностроительным оборудованием. Архитектура СУ на базе микропроцессорных комплектов фирм DEC и Motorola. Программное обеспечение СУ и программируемых контроллеров. Графический язык программирования Ladder Diagram.

    курс лекций [374,5 K], добавлен 22.11.2013

  • Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.

    курсовая работа [1,0 M], добавлен 06.03.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.