Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРС ЛЕКЦИЙ ПО МИКРОПРОЦЕССОРНОЙ ТЕХНИКЕ.doc
Скачиваний:
271
Добавлен:
13.02.2015
Размер:
1.4 Mб
Скачать

5.2.12. Организация прерываний

МК подгруппы PIC16F8X имеют четыре источника прерываний:

  • внешнее прерывание с вывода RB0/INT;

  • прерывание от переполнения счетчика/таймера   TMR0;

  • прерывание от изменения сигналов на линиях порта   RB<7:4>;

  • прерывание по окончании записи данных в EEPROM.

Все прерыванияимеют один и тот же вектор/адрес –0004h. Однако в управляющемрегистрепрерыванийINTCONсоответствующим битом-признаком записывается, от какого именно источника поступил запроспрерывания. Исключение составляетпрерываниепо завершении записи вEEPROM, признак которого находится врегистреEECON1.

Бит общего разрешения/запрещения прерыванияGIE(INTCON <7>) разрешает (если = 1) все индивидуально незамаскированныепрерыванияили запрещает их (если = 0). Каждоепрерываниев отдельности может быть дополнительно разрешено/запрещено установкой/сбросом соответствующего бита врегистреINTCON.

Бит GIEпри сбросе обнуляется. Когда начинает обрабатыватьсяпрерывание, битGIEобнуляется, чтобы запретить дальнейшиепрерывания, адрес возврата посылается в стек, а в программный счетчик загружается адрес0004h. Время реакции напрерываниедля внешних событий, таких какпрерываниеот ножкиINTилипортаB, составляет приблизительно пять циклов. Это на один цикл меньше, чем для внутренних событий, таких какпрерываниепо переполнению оттаймераTMR0. Время реакции всегда одинаковое.

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

Команда возврата из прерыванияRETFIEзавершает прерывающую подпрограмму и устанавливает битGIE, чтобы опять разрешитьпрерывания.

Логика прерыванийконтроллера изображена нарис. 5.14.

Рис. 5.14.Логика прерываний микроконтроллера.

Внешнее прерываниена ножкеRB0/INTосуществляется по фронту: либо по нарастающему (если врегистреOPTIONбитINTEDG=1), либо по спадающему (еслиINTEDG=0). Когда фронт обнаруживается на ножкеINT, бит запросаINTFустанавливается в единицу (INTCON <1>). Этопрерываниеможет быть замаскировано сбросом управляющего битаINTEв ноль (INTCON <4>). Бит запросаINTFнеобходимо очистить прерывающей программой перед тем, как опять разрешить этопрерывание.ПрерываниеINTможет вывести процессор из режимаSLEEP, если перед входом в этот режим битINTEбыл установлен в единицу. Состояние битаGIEтакже определяет, будет ли процессор переходить на подпрограммупрерыванияпосле выхода из режимаSLEEP.

Переполнение счетчика TMR0(FFh->00h) устанавливает в единицу бит запросаT0IF(INTCON<2>). Этопрерываниеможет быть разрешено/запрещено установкой/сбросом бита маскиT0IE(INTCON<5>). Сброс запросаT0IF– дело программы обработки.

Любое изменение сигнала на одном из четырех входов портаRB<7:4>устанавливает в единицу битRBIF(INTCON<0>). Этопрерываниеможет быть разрешено/запрещено установкой/сбросом бита маскиRBIE(INTCON<3>). Сброс запросаRBIF– дело программы обработки.

Признак запроса прерыванияпо завершении записи вEEPROM,EEIF(EECON1<4>) устанавливается в единицу по окончании автоматической записи данных вEEPROM. Этопрерываниеможет быть замаскировано сбросом битаEEIE(INTCON<6>). Сброс запросаEEIF– дело программы обработки.

  1)   Этот буфер имеет вход триггера Шмитта, когда конфигурируется в режиме RC-генератора и КМОП-вход в остальных случаях.   2)   Этот буфер имеет вход триггера Шмитта, когда конфигурируется в качестве входа внешнего прерывания.   3)   Этот буфер имеет вход триггера Шмитта, когда используется в режиме последовательного программирования.   4)   Этот буфер имеет вход триггера Шмитта, когда используется в режиме последовательного программирования.