RJMP RESET ; переход к основной программе

Org INT0addr

RJMP EXT_INT0 ; внешнее прерывание INT0

Org OVF0addr

RJMP TMR0_INT ; прерывание по таймеру Т/С0

; подпрограмма обработки внешнего прерывания INT0

EXT_INT0:

; ...

RETI ; возврат

; подпрограмма обработки прерывания по таймеру T/C0

TMR0_INT:

; ...

RETI ; возврат

RESET: ; основная программа

; инициализация стека

; ...

; инициализация внешнего прерывания INT0

LDI R16, (1<<ISC01)|(1<<ISC00)

OUT MCUCR, R16 ; по положительному фронту

LDI R16, (1<<INTF1)|(1<<INTF0)

OUT GIFR, R16 ; очистка флагов внешних прерываний

LDI R16, 1<<INT0

OUT GICR, R16 ; разрешение внешнего прерывания INT0

; инициализация прерывания по таймеру T/C0

LDI R16, 1<<CS00

OUT TCCR0, R16 ; деления частоты нет

LDI R16, 1<<TOIE0

OUT TIMSK, R16 ; разрешение прерывания по таймеру Т/С0

SEI ; общее разрешение прерываний

forever:

NOP ; пустая команда (no operation)

RJMP forever ; бесконечный цикл

; ...

Рис. 26. Пример программы с использованием прерываний

Программы с использованием прерываний начинаются с определения области векторов прерываний. Адреса векторов прерываний указываются символическими именами и помощью директив .org. По адресам векторов прерываний размещают команды относительного перехода к подпрограммам обработки прерываний, которые обычно располагают непосредственно после области векторов прерываний. Подпрограммы обработки прерываний завершаются командами RETI возврата в основную программу. Команда RETI выполняет те же действия, что и команда RET, а также восстанавливает бит I общего (глобального) разрешения прерываний в регистре состояния SREG.

В основной программе производится инициализация стека и прерываний. Инициализация прерываний осуществляется путём установки определённых разрядов в соответствующих регистрах ввода-вывода; при этом в командах используются символические обозначения как самих регистров, так и отдельных их разрядов. После инициализации прерываний производится общее разрешение прерываний путём установки бита I в регистре состояния SREG. Для этого предусмотрена специальная команда SEI (Set Global Interrupt Flag).

Процедура обслуживания прерываний в AVR-микроконтроллерах выполняется согласно приведённому выше алгоритму. Для организации вложенных прерываний необходимо в подпрограмме обработки прерывания восстанавливать бит I общего разрешения прерываний в регистре состояния SREG.

ЗАДАНИЕ

1. Дополнить программу, приведённую на рис. 26, необходимыми директивами и командами. В подпрограмму обработки прерывания по таймеру-счётчику Т/С0 поместить команду загрузки числа в РОН. Выполнить программу в пошаговом режиме. Проследить изменение содержимого стека при обработке прерывания, а также установку и сброс бита I общего разрешения прерываний и флага TOV0 прерывания по таймеру-счётчику T/C0. Для контроля содержимого регистров таймера-счётчика T/C0 раскрыть пункт TIMER_COUNTER_0 объекта I/O ATMEGA8535 закладки I/O окна Workspace.

2. Исследовать процедуру обработки вложенных прерываний, внеся соответствующие изменения в программу. В подпрограмму обработки прерывания по внешнему прерыванию INT0 поместить команду очистки РОН, использующегося в подпрограмме обработки прерывания по таймеру-счётчику Т/С0. В симуляторе после перехода в подпрограмму обработки прерывания по таймеру-счётчику Т/С0 смоделировать поступление сигнала внешнего прерывания INT0. Для этого в симуляторе установить флаг INTF0 в регистре GIFR группы EXTERNAL_INTERRUPT объекта I/O ATMEGA8535 закладки I/O окна Workspace. Проследить изменение содержимого стека при обработке вложенных прерываний.

СОДЕРЖАНИЕ ОТЧЁТА

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

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Назначение прерываний.

2. Типы прерываний.

3. Средства управления прерываниями.

4. Операция маскирования прерываний.

5. Этапы процедуры прерывания.

6. Реализация прерываний в AVR-микроконтроллерах.

Приложение 1

Основные характеристики микроконтроллеров
групп Tiny AVR, Mega AVR и LCD AVR

Характеристика Tiny AVR Mega AVR
ATtiny13 ATtiny15L ATtiny26 ATtiny28 ATtiny2313 ATmega48 ATmega8 ATmega88 ATmega8515 ATmega8535
Объём памяти программ (FLASH), Кбайт
Объём внутренней оперативной памяти данных (SRAM), байт
Объём энергонезависимой памяти данных (EEPROM), байт 1K 1K
Количество команд
Количество линий ввода-вывода
Количество векторов прерываний
Разрядность программного счётчика (PC)
Стек1 П А П А П П П П П П
8-разрядный таймер-счётчик
16-разрядный таймер-счётчик
Сторожевой таймер + + + + + + + + + +
Аналоговый компаратор + + + + + + + + + +
АЦП (10 разрядов), каналов
Аппаратный умножитель + + + + +
Универсальный асинхронный приёмопередатчик (УАПП)
Интерфейс SPI для обмена данными
Двухпроводный последовательный интерфейс (TWI) + + + + +
Интерфейс JTAG
Программирование в системе (In-System Programming) + + + + + + + + +
Самопрограммирование (Self-Programming) + + + + +
Схема сброса при понижении напряжения питания + + + + + + + + + +
Синхронизация от внутренней RC-цепочки + + + + + + + + + +
Синхронизация от внешнего кварцевого генератора + + + + + + + + + +
Максимальная тактовая частота, МГц 1,6
Число выводов 20/32 28/32 20/32 28/32 28/32 28/32 40/44 40/44

Характеристика Mega AVR LCD AVR
ATmega16 ATmega162 ATmega168 ATmega32 ATmega64 ATmega128 ATmega256 ATmega169 ATmega329
Объём памяти программ (FLASH), Кбайт
Объём внутренней оперативной памяти данных (SRAM), байт 1K 1K 1K 2K 4K 4K 8K 1K 2K
Объём энергонезависимой памяти данных (EEPROM), байт 1K 2K 4K 4K 1K
Количество команд
Количество линий ввода-вывода
Количество векторов прерываний
Разрядность программного счётчика (PC)
Стек1 П П П П П П П П П
8-разрядный таймер-счётчик
16-разрядный таймер-счётчик
Сторожевой таймер + + + + + + + + +
Аналоговый компаратор + + + + + + + + +
АЦП (10 разрядов), каналов
Аппаратный умножитель + + + + + + + + +
Универсальный асинхронный приёмопередатчик (УАПП)
Интерфейс SPI для обмена данными
Двухпроводный последовательный интерфейс (TWI) + + + + + + + + +
Интерфейс JTAG + + + + + + + +
Программирование в системе (In-System Programming) + + + + + + + + +
Самопрограммирование (Self-Programming) + + + + + + + + +
Схема сброса при понижении напряжения питания + + + + + + + + +
Синхронизация от внутренней RC-цепочки + + + + + + + + +
Синхронизация от внешнего кварцевого генератора + + + + + + + + +
Максимальная тактовая частота, МГц
Число выводов 40/44 40/44 28/32 40/44

1 А – аппаратный, П – программный (организуемый в ОЗУ).

Приложение 2

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