Режимы адресации программ и данных

Усовершенствованные 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 и "землю".

Режимы адресации программ и данных - student2.ru

Рис. 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.

Типография ОмГТУ

Наши рекомендации