МК PIC16F84. Обработка прерываний.

Суть показана на следующем рисунке:

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

В общем, существуют 2 способа ожидать прерывания (код сверху(1) и снизу(2) на следующем рисунке)

1) В цикле проверять наличие прерывания. Такой способ плох тем, что микроконтроллер не сможет заниматься ничем другим, кроме проверки наличия прерывания, что делает его применение очень ограниченным.

2) Поэтому используется второй вариант: при возникновении прерывания прервать выполнение текущего кода и перейти в обработчик прерывания

 

Виды прерываний для PIC16F84:

1) Окончание процедуры записи в EEPROM.

2) Переполнение таймера TMR0.

3) Изменение кода на входных портах RB4-RB7 (Port B).

4) Внешнее событие на входном порту RB0/INT.

Регистр INTCON содержит различные биты разрешений и флагов прерываний.

Обобщенная схема обработки прерываний для PIC16F84:

Синие контакты – те прерывание, которые разрешил пользователь (программист), зеленые – произошло какое-то внешнее событие. Таким образом, прерывание появляется, если пользователь разрешил его в коде И если произошло внешнее событие.

Пример обработки прерывания:

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

Пример сохранения значения аккумулятора (пользовательские переменные и статус по аналогии):

Save: MOVF VAR_1,0 ; W=VAR_1
MOVWF VAR_1_TMP ; VAR_1_TMP=VAR_1

Restore:

MOVF VAR_1_TMP,0 ; W=VAR_1_TMP
MOVWF VAR_1 ; VAR_1=VAR_1_TMP