Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sp_avr_2009.doc
Скачиваний:
47
Добавлен:
21.04.2023
Размер:
819.2 Кб
Скачать

3.3. Программная модель микроконтроллеров avr

Рассмотрим программную модель микроконтроллера семейства AVR. Выделим основные узлы контроллера с точки зрения программиста:

АЛУ – арифметико-логическое устройство. Выполняет все арифметические и логические операции. Исходные операнды должны размещаться в регистрах общего назначения (РОН). Результат операций также помещается в РОН. Флаги состояния, предназначенные для отслеживания результата арифметических операций, размещаются в регистре статуса;

РОН – регистры общего назначения. Расположены в области оперативной памяти (RAM) и связаны напрямую с АЛУ. Предназначены для хранения промежуточных данных. В отличие от остальных ячеек RAM обращение к этим регистрам производится не по адресу ячейки памяти, а по имени регистра. Для каждого РОН существует специальная команда;

IRAM – внутреннее оперативное запоминающее устройство. Расположено на кристалле микроконтроллера. Обращение к ячейкам IRAM выполняется по адресам ячеек. Существует несколько типов адресации, которые будут рассмотрены позднее;

EEPROM – энергонезависимая память данных. Позволяет сохранять данные при отключении электропитания микроконтроллера. Может загружаться как в процессе выполнения программы, так и с помощью программатора;

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

3.4. Регистр статуса

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

Значения флагов используется командами условных переходов для ветвления программы.

Регистр статуса имеет имя «SREG». Данный регистр восьмиразрядный. Каждый флаг находится в отведенном ему разряде. Имеются следующие флаги:

SREG.7I: Флаг разрешения/запрещения глобального прерывания;

SREG.6T: Флаг пересылки, используемый командами BLD и BST;

SREG.5H: Флаг полупереноса;

SREG.4S: Для проверок операций со знаком;

SREG.3V: Флаг-указатель переполнения в дополнительном коде;

SREG.2N: Флаг отрицательного значения;

SREG.1Z: Флаг нулевого значения;

SREG.0 C: Флаг переноса.

Регистр статуса «SREG» присутствует на вкладке «Processor» IDE AVR STUDIO, где имеется доступ ко всем указанным флагам. Если условие выполняется, то флаг установлен, и соответствующий разряд SREG будет закрашен черным, если условие не выполняется, то флаг сбрасывается, и соответствующий разряд SREG останется не закрашенным.

В качестве примера рассмотрим следующие флаги состояния:

SREG.1 – Флаг Z (нулевой результат операции);

SREG.0 – Флаг С (перенос, переполнение разрядной сетки).

Пример: «Флаг Z (нулевой результат операции)»:

ldi r17, $01 ; загрузка константы 01Н в R16

ldi r16, $01 ; загрузка константы 01Н в R17

sub r17, r16 ; вычитание из содержимого R17 содержимое R16

В результате операции вычитания в регистре R17 результат равен нулю. Флаг Z = 1.

Пояснение к команде «sub r17, r16»: вычитание из содержимого регистра R17 содержимого регистра R16, результат операции помещается в регистр R17:

Операция «вычитание»:

R17 = 0000 0001

R16 = 0000 0001

Результат = 0000 0000

Флаг Z = 1

Пример: «Флаг С (перенос, переполнение разрядной сетки)»:

ldi r17, $FF ; загрузка константы FFН в R16

ldi r16, $01 ; загрузка константы 01Н в R17

аdd r17, r16 ; сложение содержимого R17 и содержимого R16

Результат операции сложения помещается в регистр R17. Результат равен нулю. Z = 1; С = 1 и, следовательно, возникает перенос.

Произошло переполнение разрядной сетки: (255+1=256). Результат не помещается в одной 8-разрядной ячейке.

Пояснение к команде «аdd r17, r16» (сложение без учета переноса): складывается содержимое регистра R16 и содержимое регистра R17, результат операции помещается в регистр R16.

Операция «сложение»:

R16 = 1111 1111

R17 = 0000 0001

Результат = 1 0000 0000

Флаг Z = 1 (нулевой результат)

Флаг С = 1 (перенос в старший разряд)

Флаг разрешения/запрещения глобального прерывания «I» предназначен для разрешения или запрещения всех прерываний микроконтроллера. Для разрешения прерываний используется команда «sei». Для запрещения глобального прерывания используется команда «cli».

;Разрешение глобального прерывания:

sei ; Set interrupt flag

;Запрещение глобального прерывания:

cli ; Clear interrupt flag

Флаг «Т» является специальным битом, который может быть установлен или сброшен пользователем. Для установки флага «Т» используется команда «set». Для сброса флага «Т» используется команда «clt».

; Установка флага «Т»

set ;Set T-flag

;Сброс флага «Т»

clt ;Clear T-flag

Для обмена содержимого бита «Т» с регистрами общего назначения предназначены команды «bst» и «bld».

Команда «BST» – «Bit Store from Bit in Register to T Flag in SREG» (запомнить бит из регистра в Т-флаг SREG) используется для того, чтобы загрузить в Т-флаг значение некоторого бита регистра общего назначения. Имя регистра и номер бита указываются в команде.

Пример:

; Копирование бита из регистра R1 в Т-флаг

bst r1, 2 ; Store bit 2 of R1 in T-flag

Команда «BLD» – «Bit Load from the T Flag in SREG to a Bit in Register» (загрузить бит из Т-флага SREG в бит регистра) используется для того, чтобы загрузить значение Т-флага SREG в некоторый бит регистра общего назначения. Имя регистра и номер бита указываются в команде.

Пример:

; Копирование значения Т-флага в бит регистра R1

bld r1, 4 ; Load T-flag into bit 4 of R1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]