МК подгруппы РIС16F8Х имеют четыре источника прерываний:
• внешнее прерывание с вывода RВ0/INТ;
• прерывание от переполнения счетчика/таймера ТМR0;
• прерывание от изменения сигналов на линиях порта RВ<7:4>;
• прерывание по окончании записи данных в ЕЕРRОМ.
Все прерывания имеют один и тот же вектор/адрес — 0004h. Однако в управляющем регистре прерываний INTCON соответствующим битом-признаком записывается, от какого именно источника поступил запрос прерывания. Исключение составляет прерывание по завершении записи в ЕЕРRОМ, признак которого находится в регистре ЕЕCON1. Бит общего разрешения/запрещения прерывания GIЕ (INТСОN <7>) разрешает (если = 1) все индивидуально незамаскированные прерывания или запрещает их (если = 0). Каждое прерывание в отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита в регистре INTCON.
Бит GIЕ при сбросе обнуляется.. Когда начинает обрабатываться прерывание, бит GIЕ обнуляется, чтобы запретить дальнейшие прерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес 0004h. Время реакции на прерывание для внешних событий, таких как прерывание от ножки INТ или порта В, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких как прерывание по переполнению от таймера ТМR0. Время реакции всегда одинаковое.
В подпрограмме обработки прерывания источник прерывания может быть определен по соответствующему биту в регистре признаков. Этот флаг-признак должен быть программно сброшен внутри подпрограммы. Признаки запросов прерываний не зависят от соответствующих маскирующих битов и бита общего маскирования GIЕ.
Команда возврата из прерывания RETFIE завершает прерывающую подпрограмму и устанавливает бит GIЕ, чтобы опять разрешить прерывания.
Логика прерываний контролллера:
Внешнее прерывание на ножке RВО/INТ осуществляется по фронту: либо по нарастающему (если в регистре ОРТION бит INTEDG=1), либо по спадающему (если INTEDG=0). Когда фронт обнаруживается на ножке INT, бит запроса INTF устанавливается в единицу (INTCON <1>). прерывание может быть замаскировано сбросом управляющего бита INТЕ в ноль (INTCON <4>). Бит запроса INTF необходимо очистить прерывающей программой перед тем, как опять разрешить это прерывание. Прерывание INТ может вывести процессор из режима SLЕЕР, если перед входом в этот режим бит INТЕ был установлен в единицу. Состояние бита GIE также определяет, будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLЕЕР.
Переполнение счетчика ТМR0 (FFh->00h) устанавливает в единицу бит запроса Т0IF (INTCON<2>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски Т0IЕ (INTCON<5>). Сброс запроса Т0IF - дело программы обработки.
, Любое изменение сигнала на одном из четырех входов порта RВ<7:4> устанавливает в единицу бит RВIF (INTCON<0>). Это прерывание может быть разрешено/запрещено установкой/сбросом бита маски RВIE (INTCON<3>). Сброс запроса RВIF - дело программы обработки.
Признак запроса прерывания по завершении записи в ЕЕРRОМ, ЕЕIF (ЕЕСОN1<4>) устанавливается в единицу по окончании автоматической записи данных в ЕЕРRОМ. Это прерывание может быть замаскировано сбросом бита ЕЕIЕ (INTCON<6>). Сброс запроса ЕЕIF - дело программы обработки.