- •Лабораторная работа № 1
- •Теоретические сведения
- •1. Порты ввода/вывода
- •1.1. Общие сведения
- •1.2. Регистры портов ввода/вывода
- •1.3. Конфигурирование портов ввода/вывода
- •2. Шестнадцатибитные таймеры/счетчики
- •2.1. Управление тактовым сигналом
- •2.2. Режимы работы
- •2.2.1. Режим Normal
- •2.3. Программирование 16-тибитных таймеров/счетчиков
- •Лабораторная работа №2 (4 часа)
- •2. Произвести отладку программы средствами avrStudio.
- •3. Произвести загрузку программы в микроконтроллер.
- •Теоретические сведения
- •1. Прерывания в atMega128
- •1.1. Общие сведения
- •1.2. Таблица векторов прерываний
- •1.3. Обработка прерываний
- •1.4. Внешние прерывания
- •2. Шестнадцатибитные таймеры/счетчики
- •2.1. Управление тактовым сигналом
- •2.2. Режимы работы
- •2.3. Прерывания от таймеров/счетчиков
- •2.4. Предделители таймеров/счетчиков
- •2.4.1. Управление предделителями
- •Лабораторная работа № 3 (4 часа) «Программирование таймеров в режиме шим»
- •1. Таймеры
- •1.1. Общие сведения
- •1.2. Назначение выводов таймеров/счетчиков
- •1.3. Прерывания от таймеров/счетчиков
- •1.4. Предделители таймеров/счетчиков
- •1.4.1. Управление предделителями
- •1.5. Восьмибитные таймеры/счетчики
- •1.5.1. Управление тактовым сигналом
- •1.5.2. Режимы работы
- •2. Прерывания в atMega128
- •2.1. Общие сведения
- •2.2. Таблица векторов прерываний
- •2.3. Обработка прерываний
- •2.4. Внешние прерывания
- •3. Порты ввода/вывода
- •3.1. Общие сведения
- •3.2. Регистры портов ввода/вывода
- •3.3. Конфигурирование портов ввода/вывода
2. Прерывания в atMega128
2.1. Общие сведения
Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая осуществляет возврат в основную программу и восстановление предварительно сохраненного счетчика команд.
2.2. Таблица векторов прерываний
Микроконтроллеры AVR семейства Mega имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $0002, отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Размер вектора прерывания составляет 2 байта. Соответственно, для перехода к подпрограммам обработки прерываний используются команды JMP.
Положение таблицы векторов прерываний может быть изменено. Таблица может располагаться не только в начале памяти программ, но также и в начале области загрузчика, причем перемещение таблицы может быть осуществлено непосредственно в ходе выполнения программы. Для управления размещением таблицы прерываний используется регистр управления микроконтроллера MCUCR, расположенный по адресу $35 ($55).
Распределение адресов таблицы векторов прерываний для микроконтроллера ATmega128 приведено в Табл. 2.1. При размещении векторов прерываний в области загрузчика к значениям, указанным в таблице, следует прибавить значение начального адреса области загрузчика.
Таблица 2.1. Таблица векторов прерываний ATmega128
Источник |
Описание |
M103C=1 |
M103C=0 |
||
№ |
Адрес |
№ |
Адрес |
||
INT0 |
Внешнее прерывание 0 |
1 |
$0002 |
1 |
$0002 |
INT1 |
Внешнее прерывание 1 |
2 |
$0004 |
2 |
$0004 |
INT2 |
Внешнее прерывание 2 |
3 |
$0006 |
3 |
$0006 |
INT3 |
Внешнее прерывание 3 |
4 |
$0008 |
4 |
$0008 |
INT4 |
Внешнее прерывание 4 |
5 |
$000A |
5 |
$000A |
INT5 |
Внешнее прерывание 5 |
6 |
$000C |
6 |
$000C |
INT6 |
Внешнее прерывание 6 |
7 |
$000E |
7 |
$000E |
INT7 |
Внешнее прерывание 7 |
8 |
$0010 |
8 |
$0010 |
TIMER2COMP |
Совпадение таймера/счетчика Т2 |
9 |
$0012 |
9 |
$0012 |
TIMER2 0VF |
Переполнение таймера/счетчика Т2 |
10 |
$0014 |
10 |
$0014 |
TIMER1 САРТ |
Захват таймера/счетчика Т1 |
11 |
$0016 |
11 |
$0016 |
TIMER1 СОМРА |
Совпадение А таймера/счетчика Т1 |
12 |
$0018 |
12 |
$0018 |
TIMER1 СОМРВ |
Совпадение В таймера/счетчика Т1 |
13 |
$001A |
13 |
$001A |
TIMER1 OVF |
Переполнение таймера/счетчика Т1 |
14 |
$001C |
14 |
$001C |
TIMER0COMP |
Совпадение таймера/счетчика ТО |
15 |
$001E |
15 |
$001E |
TIMER0OVF |
Переполнение таймера/счетчика ТО |
16 |
$0020 |
16 |
$0020 |
SPI, STC |
Передача по SPI завершена |
17 |
$0022 |
17 |
$0022 |
USARTO, RX |
USARTO, прием завершен |
18 |
$0024 |
18 |
$0024 |
USARTO, UDRE |
Регистр данных USARTO пуст |
19 |
$0026 |
19 |
$0026 |
USARTO, TX |
USARTO, передача завершена |
20 |
$0028 |
20 |
$0028 |
ADC |
Преобразование АЦП завершено |
21 |
$002A |
21 |
$002A |
EE_RDY |
EEPROM готово |
22 |
$002C |
22 |
$002C |
ANA_COMP |
Аналоговый компаратор |
23 |
$002E |
23 |
$002E |
TIMER1 СОМРС |
Совпадение С таймера/счетчика Т1 |
24 |
$0030 |
- |
- |
TIMER3CAPT |
Захват таймера/счетчика ТЗ |
25 |
$0032 |
- |
- |
TIMER3 СОМРА |
Совпадение А таймера/счетчика ТЗ |
26 |
$0034 |
- |
- |
TIMER3 СОМРВ |
Совпадение В таймера/счетчика ТЗ |
27 |
$0036 |
- |
- |
TIMER3 СОМРС |
Совпадение С таймера/счетчика ТЗ |
28 |
$0038 |
- |
- |
TIMER3 OVF |
Переполнение таймера/счетчика ТЗ |
29 |
$003A |
- |
- |
USART1,RX |
USART1, прием завершен |
30 |
$003C |
- |
- |
USART1,UDRE |
Регистр данных USART1 пуст |
31 |
$003E |
- |
- |
USART1,TX |
USART1, передача завершена |
32 |
$0040 |
- |
- |
TWI |
Прерывание от модуля TWI |
33 |
$0042 |
- |
- |
SPM_RDY |
Готовность SPM |
34 |
$0044 |
- |
- |
Если прерывания в работе микроконтроллера не предусматриваются, то на месте таблицы векторов прерываний может быть размещена часть основной программы.