Режимы адресации программ и данных
Усовершенствованные RISC микроконтроллеры AVR поддерживают эффективную и мощную систему адресации.
– Прямая регистровая. Адресуется отдельный регистр Rd, адрес регистра указывается в битах 0..4 кода команды, операнд содержится в регистре Rd.
– Косвенная регистровая. Регистр адресуется через указатель Z-регистр (R30).
– Прямая регистровая, два регистра Rd и Rr – адреса регистров указываются в битах 0..4 (Rd) и 5..9 (Rr) кода команды. Операнды содержатся в регистрах Rd и Rr. Результат помещается в регистр Rd.
– Прямая ввода/вывода. Адрес операнда содержится в битах 0..5 кода команды, адрес регистра – в битах 6..10.
– Относительная программная адресация командами RJMP и RCALL. Смещение относительно программного счетчика указывается в битах 0..11 кода операции. Выполнение программы передается по адресу PC+k. Относительный адрес k лежит в диапазоне от +2кБайт до – (2кБайт – 1).
Стек подпрограмм и прерываний. Для обработки прерываний и вызовов подпрограмм используется аппаратный стек. Аппаратный стек сохраняет значение программного счетчика – адрес возврата из подпрограмм и программ обслуживания прерываний.
Команда RCALL и прерывания записывают значение программного счетчика на 0 уровень стека. Данные, хранящиеся в стеке на уровнях 1 и 2, сдвигаются на один уровень вглубь. При выполнении команды RET или RETI значение программного счетчика выбирается с 0-го уровня стека, данные с уровней 1 и 2 сдвигаются на один уровень вверх.
EEPROM память данных. МК AVR содержат до 4К электрически стираемой энергонезависимой памяти (EEPROM). EEPROM организована как отдельная область данных, каждый байт которой может быть прочитан и перезаписан. EEPROM выдерживает не менее 100000 циклов записи/стирания. Доступ к энергонезависимой памяти данных рассмотрен дальше и задается регистром адреса, регистром данных и управляющим регистром.
Время выполнения команд. ЦПУ процессора AVR управляется системной частотой, генерируемой внешним резонатором. Внутреннее деление частоты генератора не используется.
В процессоре организован буфер (pipeline) команд, при выборе команды из памяти программ происходит выполнение предыдущей команды. Подобная концепция позволяет достичь быстродействия 1MIPS на МГц, уникальных показателей стоимости, быстродействия и потребления процессора.
Память ввода/вывода. Все устройства ввода/вывода и периферийные устройства МК располагаются в пространстве ввода/вывода. Различные ячейки этого пространства доступны через команды IN и OUT, пересылающие данные между одним из регистров общего назначения (РОН) и пространством ввода/вывода. К регистрам $00..$19 можно осуществлять побитовый доступ командами SBI и CBI. Значение отдельного бита этих регистров можно проверить командами SBIC и SBIS. Дополнительную информацию по этому вопросу можно найти в описании системы команд.
Регистр статуса ЦПУ (SREG) содержит следующие биты, доступные для записи и чтения.
Бит 7 - I: Общее разрешение прерываний. Для разрешения прерываний этот бит должен быть установлен в единицу. Управление отдельными прерываниями производится регистром маски прерываний - GIMSK/TIMSK. Если флаг сброшен (0), независимо от состояния GIMSK/TIMSK прерывания не разрешены. Бит I очищается аппаратно после входа в прерывание и восстанавливается командой RETI для разрешения обработки следующих прерываний.
Бит 6 - T: Хранение копируемого бита. Команды копирования битов BLD (Bit LoaD) и BST (Bit STore) используют этот бит как источник и приемник обрабатываемого бита. Бит из регистра регистрового файла может быть скопирован в T командой BST, бит T может быть скопирован в бит регистрового файла командой BLD.
Бит 5 - H: Флаг половинного переноса. Этот флаг индицирует перенос из младшей половины байта при некоторых арифметических операциях. Более подробно об этом можно прочитать в описании системы команд.
Бит 4 - S: бит знака, S = N XOR V. Бит S всегда равен исключающему ИЛИ между флагами N (отрицательный результат) и V (переполнение дополнения до двух). Более подробно об этом можно прочитать в описании системы команд.
Бит 3 - V: Флаг переполнения дополнения до двух. Этот флаг поддерживает арифметику с дополнением до двух. Более подробно об этом можно прочитать в описании системы команд.
Бит 2 - N: Флаг отрицательного результата. Этот флаг указывает на отрицательный результат выполнения различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд.
Бит 1 - Z: Флаг нулевого результата. Этот флаг индицирует нулевой результат различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд.
Бит 0 - C: Флаг переноса. Этот флаг индицирует перенос в арифметических и логических операциях. Более подробно об этом можно прочитать в описании системы команд.
Регистр управления ЦПУ(MCUCR) содержит биты общего управления МК. Ниже приводится назначение битов данного регистра.
Бит 5 – Sleep Enable – Разрешение режима Sleep. Этот бит должен быть установлен в 1, чтобы при выполнении команды SLEEP процессор переходил в режим пониженного энергопотребления (Sleep). Для использования режима пониженного энергопотребления этот бит рекомендуется устанавливать в 1 до исполнения команды SLEEP.
Бит 4 – Sleep Mode – Режим Sleep. Этот бит выбирает один из доступных режимов пониженного энергопотребления. Если бит сброшен (0), то в качестве режима Sleep выбирается холостой режим (Idle mode). Если бит установлен, выбирается экономичный режим (Power down). Особенности каждого из режимов будут рассмотрены ниже.
Биты 3,2 – зарезервированы и читаются как 0.
Биты 1,0 – ISC01, ISC00 – биты управления срабатыванием прерывания 0. Внешнее прерывание активируется выводом INT0, если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. Срабатывание по уровню и фронтам задается следующим образом.
ISC01 | ISC00 | Описание |
Запрос прерывания генерируется по низкому уровню на входе | ||
Зарезервировано | ||
Запрос на прерывание по спадающему фронту на входе | ||
Запрос на прерывание по нарастающему фронту на входе |
Примечание. При изменении битов ISC01 и ISC00 прерывания по входу INT0 должны быть запрещены сбросом бита разрешения прерывания в регистре GIMSK. Иначе прерывание может произойти при изменении значения битов.
Аппаратный сброс. В МК AVR предусмотрены три источника сброса:
– сброс по включению питания (процессор сбрасывается при подаче питания на выводы VCC и GND);
– внешний сброс (процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты);
– сброс от сторожевого таймера (процессор сбрасывается по окончании времени сторожевого таймера, если разрешена его работа).
Во время сброса все регистры ввода/вывода устанавливаются в начальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP – относительный переход на программу обработки сброса. Если в программе не разрешаются прерывания и векторы прерываний не используются, в первых адресах памяти может быть записана программа.
Контроллер прерываний предназначен для аппаратного обеспечения запуска логики обслуживания прерываний.
Младшие адреса памяти программ отведены под векторы прерываний, список векторов прерываний приведен в табл. 10.3. Этот список также определяет и приоритет различных прерываний. Чем младше адрес, тем выше приоритет прерывания. Наивысший приоритет имеет сброс, за ним INT0 и т.д.
Таблица 10.3
Номер вектора | Адрес | Источник | Описание прерывания |
$000 | RESET | Вывод сброса и сброс от сторожевого таймера | |
$001 | INT0 | Внешнее прерывание 0 | |
$002 | TIMER0,OVF0 | Переполнение таймера/счетчика 0 | |
$003 | ANA_COMP | Аналоговый компаратор |
Чаще всего используется следующая установка векторов прерываний в программе:
Адрес Метка | Код | Комментарий |
$000 | rjmp RESET | ; обработка сброса |
$001 | rjmp EXT_INT0 | ; обработка IRQ0 |
$002 | rjmp TIM0_OVF | ; обработка переполнения таймера 0 |
$003 | rjmp ANA_COMP | ; обслуживание аналогового компаратора |
; | ||
$004MAIN: <instr> xxx | ; начало основной программы |
Таймеры/счетчики.В MK AVR предусмотрены 8-разрядные и
16-разрядные таймеры/счетчики общего назначения. Любой из них можно использовать как таймер с внутренним источником импульсов или как счетчик, управляемый внешними счетными импульсами.
Таймер/счетчик может получать импульсы тактовой частоты CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024), импульсы с внешнего вывода или быть остановлен соответствующими установками регистра TCCRх. Флаг переполнения таймера находится в регистре TIFR. Биты управления таймером расположены в регистре TCCRх. Разрешение и запрещение прерываний от таймера управляются регистром TIMSK.
При работе таймера/счетчика от внешнего сигнала внешний сигнал синхронизируется с тактовым генератором ЦПУ. Для правильной обработки внешнего сигнала минимальное время между соседними импульсами должно превышать период тактовой частоты процессора. Сигнал внешнего источника обрабатывается по спадающему фронту тактовой частоты процессора.
Сторожевой таймер (WDT) работает от отдельного встроенного генератора, работающего на частоте 1 МГц. Управляя предварительным делителем сторожевого таймера, можно задавать интервал сброса таймера от 16 до 2048 периодов. Частота встроенного RC генератора зависит от напряжения питания процессора.
Команда WDR сбрасывает сторожевой таймер. Для работы сторожевого таймера можно выбрать одно из 8-ми значений частоты, что позволяет в широких пределах изменять время между исполнением команды WDR и сбросом процессора. При отработке периода работы сторожевого таймера, если не поступила команда WDR, МК сбрасывается, выполнение программы продолжается с вектора сброса.
Энергонезависимое ОЗУ (EEPROM) предназначено для хранения данных при отключенном питании МК. Для доступа к EEPROM служат три регистра:
– регистр адреса EEPROM EEAR – в этот регистр перед обращением к EEPROM записывается адрес ячейки памяти, к которой производится обращение;
– регистр данных EEPROM EEDR – в этом регистре перед записью должны быть размещены записываемые данные, а после операции чтения в нем будут расположены считанные из EEPROM данные;
– регистр управления EEPROM – в этом регистре расположены биты разрешения записи или чтения EEPROM, которые должны устанавливаться в 1 при выполнении соответствующей операции.
Порты ввода/вывода– это 8-разрядные двунаправленные порты. Для обслуживания каждого порта отведено три регистра: регистр данных PORTх, регистр направления данных DDRx и регистр адреса выводов порта PINx. Регистры адреса выводов портов предназначены только для чтения, в то время как регистры данных и регистры направления данных – для чтения/записи. То есть PINх не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов соответствующего порта. При чтении PORTх читаются данные из регистра-защелки, при чтении PINх читаются логические значения, присутствующие на выводах порта.
Все выводы портов имеют отдельно выбираемые нагрузки. Выводы порта могут пропускать ток до 20 мА и непосредственно управлять, например, светодиодными индикаторами или маломощными реле. Каждый порт имеет помимо основных еще одну или несколько альтернативных функций, обязательно указываемых в техническом описании на соответствующий МК.
Периферийные модули. К ним относятся, в частности, аналоговый компаратор и АЦП. Спецификация программирования данных модулей приводится в техническом описании на соответствующий МК. Так как она может существенно отличаться у разных МК, здесь она рассматриваться не будет.
Ниже приводится система команд MK AVR.
Более подробную информацию по MK AVR можно узнать в [13, 14] или на сайтах www.atmel.com и www.argussoft.ru.
Примеры применения микроконтроллеров AVR
10.4.1. ИК дальномер
Точное дистанционное измерение расстояния, например, до цели, всегда являлось одной из востребованных задач. Поэтому в качестве примера использования МК AVR рассмотрим ИК дальномер. Принципиальная схема ИК дальномера, выполненная на базе МК ATtiny12L, приведена на рис. 10.6.
В данной схеме ИК излучатель (LED1) – любой светодиод, работающий в ИК диапазоне, желательно ближе к 950 нм.
Светодиод управляется сигналом от контроллера по линии РВ4. Если светодиод имеет прямой ток до 20 мА, то можно включить его прямо на выход МК; если же нет, то, как и в нашем случае, следует поставить транзистор (V1) в качестве ключа. Какой именно транзистор – не важно, лишь бы он был n-p-n типа и был рассчитан на тот же ток, что и выбранный вами светодиод. Резистор R2 надо поставить таким, чтобы ток через светодиод не превышал допустимый для данной модели.
ИК приемник (IF1) – TSOP1736. Сигнал с него поступает непосредственно на вход МК (линия РВ3). В отсутствие подходящего ИК сигнала на выходе приемника присутствует высокий логический уровень, а при появлении сигнала проходит импульс низкого уровня.
Обратите внимание: для "ответственных" приложений контроллер и ИК приемник лучше включать в соответствии с рекомендациями изготовителей, а керамический конденсатор примерно в 100 нФ рядом с вводами питания контроллера – вещь во всех случаях обязательная.
Индикатором в нашем случае служит "обычный" светодиод LED2, подключенный на линию РВ0 контроллера последовательно с токоограничивающим резистором.
Разъем J1 используется для подключения программатора. Питание +5 В подается на клемму VCC и "землю".
Рис. 10.6. Принципиальная схема ИК дальномера
Ниже приводится текст программы управления ИК дальномером.
;******************************************************************;
* ИК-локатор: ИК-светодиод на PB4 дает пачки импульсов с частотой;
* около 36 кГц, а TSOP1736 на PB3 их отслеживает;
* ;
* MCU: ATtiny12@1MHz (c) RoboClub 2003 ;******************************************************************
.include "tn12def.inc" | ||
rjmp | RESET | ;ручной сброс |
;* Объявление переменных | ||
.def | t1 = r1 | ;счетчик для "длинных" задержек |
.def | temp = r19 | ;счетчик времени задержки |
.def | count = r20 | ;счетчик числа импульсов в пачке |
;* Определения | ||
.equ | led = 0 | ;LED на PB0 |
.equ | tsop = 3 | ;TSOP на PB3 |
.equ | ir_led = 4 | ;IR LED на PB4 |
;* Начало кода | ||
RESET: | ||
sbi | DDRB, led | ;подключаем LED на выход PORTB линия 5 |
sbi | DDRB, ir_led | ;подключаем IR LED на выход PORTB линия 3 |
cbi | DDRB, tsop | ;подключаем TSOP на вход PORTB линия 2 |
sbi | PORTB,tsop | ;включаем "подтяжку" |
;* Задание значений | ||
.equ | TIME1 = 4 | ;длительность импульса |
.equ | TIME2 = 5 | ;задержка между импульсами |
.equ | TIME3 = 20 | ;задержка между пачками импульсов |
.equ | COUNT = 10 | ;число импульсов в пачке |
; Главный цикл программы | ||
;******************************************************************; | ||
START: | ||
Ldi | count, COUNT | ;загружаем в счетчик число импульсов в пачке |
; Цикл выдачи пачки импульсов | ||
FLASH: | ||
cbi | PORTB, ir_led | ;зажигаем IR LED |
ldi | temp, TIME1 | ;загружаем в temp длительность импульса |
DELAY1: | ||
dec | temp | ;уменьшаем на единицу temp, пока |
brne | DELAY1 | ;не станет равным 0 |
sbi | PORTB, ir_led | ;гасим IR LED |
ldi | temp, TIME2 | ;загружаем в temp длительность паузы между |
импульсами | ||
DELAY2: | ||
dec | temp | ;уменьшаем на единицу temp, пока |
brne | DELAY2 | ;не станет равным 0 |
dec | count | ;уменьшаем на 1 счетчик числа импульсов |
brne | FLASH | ;если не 0, то посылаем следующий импульс |
;когда пачка импульсов выдана - проверяем, | ||
есть ли сигнал от TSOP | ||
sbis | PINB, tsop | ;если уровень на выходе TSOP низкий |
(т.е. сигнал есть), | ||
rjmp | LEDON | ;то идем зажигать LED, |
cbi | PORTB, led | ;иначе гасим LED |
rjmp | WAIT_NEXT | ;и переходим к ожиданию следующей пачки |
LEDON: | ||
sbi | PORTB, led | ;гасим LED |
; Задержка перед следующей пачкой импульсов | ||
WAIT_NEXT: | ||
clr | t1 | ;сбрасываем t1 (т.е. t1=0 или, что то же: t1=256) |
ldi | temp, TIME3 | ;устанавливаем число задержек |
DELAY3: | ||
dec | t1 | ;задержка по счетчику t1 от 256 до 0 |
brne | DELAY3 | ;т.е. 256×3 тактов |
dec | temp | ;повторяем TIME3 раз задержку по t1 |
brne | DELAY3 | ;т.е. всего (TIME3×256×3 + TIME3×3) тактов |
rjmp | START | ;переходим к началу главного цикла |
END |
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Кончаловский В.Ю. Цифровые измерительные устройства: Учеб. пособие для вузов по спец. "Информ.-измерит. техн." – М.: Энергоатомиздат, 1985.
2. Орнатский П.П. Автоматические измерения и приборы: Учеб. пособие для вузов. – 5-е изд., перераб. и доп. – Киев: Вища школа, 1986.
3. Измерения в электронике / В.А. Кузнецов, В.А. Долгов, В.М. Коневских и др. – М.: Энергоатомиздат, 1987.
4. Вострокнутов Н.Н. Цифровые измерительные устройства. - М.: Энергоатомиздат, 1990.
5. Новицкий П.В., Зограф И.А. Оценка погрешностей результатов
измерений. – Л.: Энергоатомиздат, 1985.
6. Басманов А.С., Широков Ю.Ф. Микропроцессоры и однокристальные микроЭВМ: Номенклатура и функциональные возможности. – М.: Энергоатомиздат, 1988.
7. Федорков Б.Г., Телец В.А. Микросхемы ЦАП и АЦП: Функционирование, параметры, применение. - М.: Энергоатомиздат, 1990.
8. Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. – М.: Энергоатомиздат, 1990.
9. Кликушин Ю.Н., Михайлов А.В. Микроконтроллеры семейства PIC и их применение: Учеб. пособие. – Омск: Изд-во ОмГТУ, 2004.
10. Техническое обеспечение цифровой обработки сигналов: Справочник / М.С. Куприянов, Б.Д. Матюшин, В.Е. Иванова. – СПб.: Форт, 2000.
11. Предко М. Руководство по микроконтроллерам / Пер. с англ. – М.: Промаркет, 2001. – Т. 1, 2.
12. Корнеев В.В., Киселев А.В. Современные микропроцессоры. – М.: Нолидж, 2000.
13. Гутников В.С. Интегральная электроника в измерительных
устройствах. – 2-е изд. – Л.: Энергоатомиздат, Ленингр. отд-ние, 1988.
ОГЛАВЛЕНИЕ
Введение........................................................................................................... 3
1. Основные определения............................................................................... 4
2. ЦИУ с квантованием по уровню................................................................ 6
3. ЦИУ с квантованием по времени............................................................. 59
4. Измерение параметров элементов электрических цепей..................... 99
5. Автоматическое переключение пределов измерения в ЦИУ............. 107
6. ЦИУ пространственного преобразования............................................. 109
7. Преобразователи код-напряжение......................................................... 124
8. Устройства индикации цифровых приборов........................................ 139
9. Интерфейсы связи цифровых приборов с ЭВМ и другими ЦИУ....... 159
10. Элементы микропроцессорной техники в ЦИУ................................. 178
Библиографический список....................................................................... 223
Редактор Т.А. Москвитина
Компьютерная верстка А.В. Отрадновой
ИД № 06039 от 12.10.01.
Свод. темплан 2007 г.
Подписано к печати 05.04.2007. Бумага офсетная. Формат 60×84 1/16.
Отпечатано на дупликаторе. Усл. печ. л. 14,0. Уч.-изд. л. 14,0.
Тираж 200 экз. Заказ 365.
_________________________________________________________________________________________________________
Изд-во ОмГТУ. 644050, г. Омск, пр. Мира, 11.
Типография ОмГТУ