Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект мпсу.doc
Скачиваний:
90
Добавлен:
22.09.2019
Размер:
6.71 Mб
Скачать

Урок № 41

Тема 2.13 Система прерываний

Вопросы темы:

2.13.1 Источники прерывания МК ATmega8535

2.13.2 Алгоритм обработки прерывания

2.13.3 Внешние прерывания

2.13.4 Пример программ обслуживания прерываний от внешних устройств

2.13.1 Источники прерывания МК ATmega8535

В зависимости от модели, микроконтроллеры могут обслуживать различное число источников прерываний. Каждому источнику назначен так называемый вектор прерывания - ячейка в области младших адресов памяти программ, в которую записывается начальный адрес подпрограммы обработки прерывания для данного источника прерывания. В таблице 1 приведены адреса векторов источников прерывания МК ATmega8535.

Таблица1 - Таблица векторов прерывания ATmega8535

Адрес , hex

Источник

Примечание

0000

RESET

Внешний сброс

0001

INT0

Внешнее прерывание 0

0002

INT1

Внешнее прерывание 1

0003

TIMER2 COMP

Совпадение при сравнении таймера-счетчика 2

0004

TIMER2 OVF

Переполнение таймера-счетчика 2

0005

TIMER1 CAPT

Захват таймера-счетчика 1

0006

TIMER1 COMPA

Совпадение А при сравнении таймера-счетчика 1

0007

TIMER1 COMPB

Совпадение В при сравнении таймера-счетчика

0008

TIMER1 OVF

Переполнение таймера-счетчика 1

0009

TIMER0 OVF

Переполнение таймера-счетчика 0

000A

SPI, STS

Завершение пересылки SPI

000B

USART, Rx

Завершение приема USART

000C

USART, UDRE

Регистр данных USART пуст

000D

USART, Tx

Завершение передачи USART

000E

ADC

Завершение преобразования АЦП

000F

EE_RDY

Готовность ЕЕPROM

0010

ANA_COMP

Срабатывание аналогового компаратора

0011

TWI

Последовательный интерфейс TWI

0012

INT2

Внешнее прерывание 2

0013

TIMER0 COMP

Совпадение при сравнении таймера-счетчика 0

0014

SPM_RDY

Готовность Store Progr. Memory

Так как векторы расположены в памяти программ для их заполнения используется директива .org.

Пример 1. В следующем фрагменте в вектор внешнего сброса записан адрес подпрограммы обработки прерывания, которая начинается с метки start:

.org $0000

rjmp start

Пример 2. Рассмотрим еще один фрагмент таблицы векторов:

.org $0000 ;вектор сброса

rjmp start ;прыжок на метку start

.org $0001 ;вектор внешнего прерывания INT0

rjmp opros ;прыжок на метку opros

.org $0002 ;вектор внешнего прерывания INT1

reti ;возврат из прерывания (прерыва ;ние заглушено)

Пример 3. Подпрограмма обработки прерывания от переполнения таймера-счетчика 0 начинается с метки ind. Требуется заполнить вектор соответствующего прерывания.

.org $0009

rjmp ind

Контрольные вопросы:

1 Что такое прерывание программы

2 Перечислите источники прерывания программы в МК семейства AVR

3 Что такое адрес возврата, как он сохраняется, когда восстанавливается?

5 Что такое вектор прерывания, что в него записывают, где он расположен?

6 Что такое таблица векторов, где она располагается?

7 Как заполняется таблица векторов?

8 Подпрограмма обслуживания прерывания от начинается с метки «comp». Заполните вектор прерывания аналогового компаратора.

9 Необходимо заглушить прерывания от внешних устройств INT0, INT1. Как это сделать?

10 В следующем фрагменте используются прерывания от нескольких устройств. Определите, что это за устройства, и какие действия выполняют их ПОП:

.org $002

rjmp opros

.org $000e

rjmp count

.org $012

rjmp ind

;==========

opros:

in r0,portc

reti

count:

inc r0

reti

ind:

out portc,ro

reti