Прерывания в семействе PIC18 xxxx

Автор: Super User Просмотров: 16965

Но событие (звонок) состоялось, и вы о нем знаете. Опять же по отношению к микроконтроллерам , в них то же есть возможность "перезвонить", ведь в МК событие фиксируется поднятием определенного флага и соответственно не составляет труда по необходимости указать в программном коде проверку флага.  

События могут происходить как от внутренних, так и от внешних сигналов. К внутренним относятся сигналы от различных периферийных устройств (встроенных аппаратных модулей (ССР, таймеры, ШИМ и т.д.)). К внешним,  изменения уровня сигнала на входах PORTB (INT0,INT1,INT2,PORTB4-7).

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

Для каждого источника прерываний можно назначить высокий или низкий приоритет. При высоком приоритете,  в случае возникновения прерывания,  переход осуществляется по вектору 000008h (08h). А при  прерывании с низким приоритетом переход осуществляется по вектору  000018h (18h).  Если приоритетная система прерываний  выключена, т.е. IPEN=0, вектор перехода будет всегда 000008h (08h).

Внешнее прерывание INT0 всегда с высоким приоритетом и соотвественно не имеет бита приоритета.

Выходить из ПП прерывания необходимо с помощью команды RETFIE 1 (FAST) если есть необходимость в восстановлении значений  регистров  W, STATUS и BSR, или просто RETFIE ( s=0), в этом случае  загрузки не производится (по умолчанию). При включенной приоритетной системе ,  когда в интервале  исполнения прерывания с низким приоритетом возникает прерывания с высоким, значение  регистров W, STATUS и BSR, сохраненные при переходе на обработку прерывания теряются . Для их сохранения и восстановления  (если это необходимо ) выполнить команды  в определенной последовательности.

 

     movwf     W_Temp           ; Сохранение W_
     movff     STATUS,Stat_Temp ; Сохранение Stat_Temp
     movff     BSR,BSR_Temp     ; Сохранение BSR_Temp
     *********************************************
     movff     BSR_Temp,BSR     ; Восстановление BSR
     movf      W_Temp,W         ; Восстановление WREG
     movff     Stat_Temp,STATUS ; Восстановление STATUS
     retfie                     ; Возврат из ПП прерывания.

     

В микроконтроллерах  PIC18XX2, как и в большинстве других микроконтроллеров семейства PIC18XXXX,  для управления прерываниями предусмотрено 10 специальных регистров. Содержимое регистров (биты управления) в различных микроконтроллерах могут быть другие. Все зависит от содержания в МК периферийных модулей, к примеру, в микроконтроллере PIC18F25K20 есть дополнительно к "базовым" аппаратные модули компараторов и соответственно для них добавлены биты управления

Практически все регистры  доступны для чтения/записи, т.е. мы можем сбросить или установить как отдельный бит в регистре , так и перезаписать весь регистр (за исключением регистра PIR1 биты 4,5, их можно только прочитать). К примеру, для разрешения прерываний необходимо  установить  бит 7 (GIE) регистра INTCON  .

Каждому источнику прерываний соответствует три бита. (за исключением INT0 - 2 бита)

  • флаг прерываний ("бит" сигнализирует о том, что было выполнено условие возникновения прерывания ).
  • бит разрешения прерывания (разрешает/запрещает переход по вектору прерывания при условии поднятия  соответствующего источнику прерывания  флага).
  • бит приоритета (выбор  высокого (1) или низкого (0) перехода  по вектору  прерывания, т.е. по адресу 08h или 18h )

Ниже показана структурная схема логики прерываний микроконтроллера PIC18XX2 (см. даташит).

 

alt

 

 

В качестве примера работы с прерываниями ,  рассмотрим программу на основе той же  Test_01.

Следующая страница...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru