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

18

5.4. Организация работы с прерываниями в pic-контроллерах

Микроконтроллеры серии PIC16FXX имеют 4 прерывания:

прерывание по переполнению таймера TMR0, прерывание по изменению значения на выводах RB4-RB7, прерывание по окончанию записи в перепрограммируемое постоянное запоминающееся устройство EEPROM, внешнее прерывание по сигналу на выводе INT(RB0).

Для всех прерываний в микроконтроллере зарезервирован 1 вектор прерывания, расположенный по адресу 0x04. Т.е. при срабатывании любого из прерываний программа автоматически перейдет на адрес 0x04 и очистит бит GIE в регистре INTCON, тем самым, запретив все прерывания. Для выхода из прерывания используется команда RETIE, которая возвращает программу на тот адрес, на котором она была в момент возникновения прерывания, и выставляет бит GIE, разрешая прерывания.

За работу прерываний отвечает регистр INTCON. Назначение битов регистра INTCON приведено в табл. 1. Все биты регистра INTCON доступны и для чтения, и для записи. По умолчанию все биты регистра INTCON, кроме RBIF, равны 0. Значение бита RBIF по умолчанию неопределенно. Для того, чтобы обеспечить переход программы на адрес 0x04 при срабатывании того или иного прерывания, следует записать 1 в бит GIE и биты, отвечающие за разрешение конкретных прерываний.

Для того чтобы узнать, какое из прерываний сработало, надо проверить значение флагов прерываний T0IF, INTF, RBIF.

Таблица 1. Назначение битов регистра INTCON

Номер бита

Название

Назначение

7

GIE

Глобальное разрешение или запрещение прерываний; 0 — все прерывания запрещены; 1 - все разрешенные битами EEIE, T0IE, INTE, RBIE прерывания разрешены.

6

EEIE

Разрешение/запрещение прерывания по окончанию записи в EEPROM; 0(1) - прерывание запрещено (разрешено).

5

T0IE

Разрешение/запрещение прерывания по переполнению таймера TMR0; 0(1) - прерывание запрещено (разрешено)

4

INTE

Разрешение/запрещение прерывания по сигналу на выводе INT(RB0); 0(1) - прерывание запрещено (разрешено).

3

RBIE

Разрешение/запрещение прерывания по изменению значений на выводах RB4-RB7; 0(1) - прерывание запрещено (разрешено).

2

T0IF

Флаг прерывания по переполнению таймера TMR0; 0 - переполнение таймера не произошло; 1 - таймер переполнен.

1

INTF

Флаг прерывания по сигналу на выводе INT(RB0); 0 - прерывание не произошло; 1 - прерывание произошло.

0

RBIF

Флаг прерывания по изменению значений на выводах RB4-RB7; 0(1) - состояние ни одного из выводов RB4-RB7 не изменилось (состояние RB4-RB7 изменилось).

После обработки прерываний перед вызовом инструкции RETFIE следует самостоятельно очистить флаги прерываний, тем самым, предотвратив повторное срабатывание прерываний.