Суббота, 14 мая 2011 04:44

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

Written by
Rate this item
(0 votes)

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

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

 

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

События могут происходить как от внутренних, так и от внешних сигналов. К внутренним относятся сигналы от различных периферийных устройств (встроенных аппаратных модулей (ССР, таймеры, ШИМ и т.д.)). К внешним,  изменения уровня сигнала на входах 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.

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


Открываем  в MPLAB IDE проектTest_01  и добавляем в код программы строки выделенные синим цветом. Тем самым подключаем для наглядности к выходу порта "В" , 2  еще один светодиод.  Он будет переключаться по прерыванию, т.е. при каждом  переполнении  таймера TMR0 светодиод будет инвертировать свое состояние.  (задействуем прерывание от переполнения таймера TMR0).

{showhide title="Смотреть код программы" template="strong" changetitle="Свернуть код программы" mousetitleistitle=true closeonclick=true titleasspan=true}

 

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;***************************************************************************
; Конфигурирование.
;***************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковольтного програм. выкл.
;************************************
; Присвоение
;************************************
            #define  led_1  LATB,1 ;
            #define  led_2  LATB,2 ;
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Reg_1                  ;      
            Reg_2                  ;
            Reg_3                  ;
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;----------------------------------------
;добавляем в программу вектор прерывания
;----------------------------------------
            org                08h ; H вектор прерывания 
            btg              led_2 ; инвертирование сигнала (светодиод №2)
            bcf     INTCON,2       ; сброс флага TMR0
            RETFIE 1               ; выход из прерывания с восст.

;************************************
; иницилизация
;************************************
START       movlw       b'00000000';      
            movwf            TRISB ; Конфигурирование порта B
            movlw      b'10000000' ; настройка ТMR0
            movwf            T0CON ;
            movlw      b'11100000' ; = разрешаем глоб.прерывания +периферия+
            movwf           INTCON ;переполнению TMR0+ сброс флага TMR0=
;===================================================================
; Начало программы.
;===================================================================
Povtor      bsf              led_1 ; включаем светодиод
            call           Pause_1 ; ждем одну секунду
            bcf              led_1 ; выключаем светодиод
            call           Pause_1 ; ждем одну секунду
            goto            Povtor ; зацикливаем программу.
;************************************
; Пауза 1 секунда
;************************************
Pause_1     movlw       .173     
            movwf       Reg_1   
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            return
;*************************************
            end

{/showhide}

В данном примере приоритетная система прерываний  выключена, т.е. IPEN=0 и соответственно вектор перехода будет всегда 000008h (08h).

Давайте включим приоритетную систему прерываний установкой бита IPEN регистра управления RCON и задействуем для примера еще один таймер TMR1, который будет иметь низкий приоритет по отношению к TMR0. При сбросе микроконтроллера все регистры  выбора приоритета устанавливаются "1" т.е. включен  высокий приоритет, для того что бы TMR1 имел низкий приоритет необходимо сбросить бит "0" регистра  IPR1. что мы и сделали в примере программы, предоставленной  ниже (выделено синим цветом).

Для наглядности подключим к биту 3 порта"В" еще один светодиод и "нарисуем" его  в проекте Протеуса, с помощью которого и будем визуально наблюдать работу приоритетной системы прерывания .Теперь при переполнении TMR0 произойдет переход  с вектором 08h , а при переполнении TMR1 с вектором 18h.

{showhide title="Смотреть код программы" template="strong" changetitle="Свернуть код программы" mousetitleistitle=true closeonclick=true titleasspan=true}

 

            list          p=18F252 ; Используется микроконтроллер PIC18F252.
            #include   p18F252.inc ; Подключение INC-файла PIC18F252.
;***************************************************************************
; Конфигурирование.
;***************************************************************************
            CONFIG      OSC=XT     ; кварц.резонатор
            CONFIG      BOR=OFF    ; Сброс по снижению питания выключен
            CONFIG      WDT=OFF    ; WDT выключен.
            CONFIG      LVP=OFF    ; Режим низковольтного програм. выкл.
;************************************
; Присвоение
;************************************
            #define  led_1  LATB,1 ;
            #define  led_2  LATB,2 ;
           #define  led_3  LATB,3 ;
;************************************
; Регистры общ. назначения
;************************************
            cblock             20h ;
            Reg_1                  ;      
            Reg_2                  ;
            Reg_3                  ;
            endc                   ;
;*******************************************************************
            org                  0 ;
            goto             START ;
;----------------------------------------
;H вектор прерывания
;----------------------------------------
            org                08h ; H вектор прерывания 
            btg              led_2 ; инвертирование сигнала (светодиод №2)
            bcf           INTCON,2 ; сброс флага TMR0
            RETFIE                 ; выход из прерывания 
           
;----------------------------------------
;L вектор прерывания
;----------------------------------------
            org                18h ; L вектор прерывания 
            btg              led_3 ; инвертирование сигнала (светодиод №3)
            bcf             PIR1,0 ; сброс флага TMR1
            RETFIE                 ; выход из прерывания 


;************************************
; иницилизация
;************************************
START       movlw       b'00000000';      
            movwf            TRISB ; Конфигурирование порта B
            movlw      b'10000000' ; настройка ТMR0
            movwf            T0CON ;
            movlw      b'00000001' ; включаем  ТMR1
            movwf            T1CON ;
            movlw      b'11100000' ; = разрешаем глоб.прерывания +периферия+
            movwf           INTCON ;переполнению TMR0+ сброс флага TMR0=
            bcf             PIR1,0 ; сброс флага TMR1
            bsf             PIE1,0 ; Разрешаем прерывание от TMR1
            bsf          RCON,IPEN ; разрешаем приор. систему прирываний
            bcf             IPR1,0 ; выбор низкого приоритета TMR1
;===================================================================
; Начало программы.
;===================================================================
Povtor      bsf              led_1 ; включаем светодиод
            call           Pause_1 ; ждем одну секунду
            bcf              led_1 ; выключаем светодиод
            call           Pause_1 ; ждем одну секунду
            goto            Povtor ; зацикливаем программу.
;************************************
; Пауза 1 секунда
;************************************
Pause_1     movlw       .173     
            movwf       Reg_1   
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1
            bra         $-2
            decfsz      Reg_2
            bra         $-6
            decfsz      Reg_3
            bra         $-.10
            return
;*************************************
            end

{/showhide}

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

                           

            org                08h ; (18h)
            btfsc         INTCON,2 ; проверяем флаг таймера TMR0
            goto              Pr_0 ; установлен ? переходим на обработку 
            btfsc         INTCON,1 ; проверяем флаг по входу INT0
            goto           Pr_INT0 ; установлен ? переходим на обработку
            btfsc        INTCON3,0 ; проверяем флаг по входу INT1
            goto           Pr_INT1 ; установлен ? переходим на обработку

;----------------------------------------------------

; обработка прерывания TMR0

;----------------------------------------------------

;   Pr_0

                       Здесь ПП обработки прерывания

           bcf           INTCON,2 ; сброс флага TMR0
            RETFIE 1               ; выход из прерывания с восст.

;----------------------------------------------------

; обработка прерывания INT0

;----------------------------------------------------

Pr_INT0

                        Здесь ПП обработки прерывания

            bcf           INTCON,1 ; сброс флага INT0
            RETFIE 1               ; выход из прерывания с восст. 

;----------------------------------------------------

; обработка прерывания INT1

;----------------------------------------------------

 Pr_INT1

                           Здесь ПП обработки прерывания

            bcf          INTCON3,0 ; сброс флага INT1
            RETFIE 1               ; выход из прерывания с восст.

 

Видеоурок по теме....

 

 


 

Регистр  RCON.

 

В данном регистре нам интересен только бит 7 "IPEN",  который разрешает  приоритетную систему прерываний . Если бит IPEN установлен , то приоритетная система прерываний разрешена. Если бит сброшен (по умалчиванию), то приоритетная система прерываний запрещена, в этом случае система прерываний совместима с микроконтроллерами среднего семейства PIC16XXXX.

R/W-0              
IPEN - - - - - - -
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

 

Регистр INTCON.

 

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

 

Важно:

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

К примеру, если включен  (задействован) аппаратный модуль таймера , то флаг прерывания установится по "переполнению" вне зависимости от разрешения. В этом есть и определенные плюсы, можно в программном коде проверять соответствующий  флаг и при наступлении события (поднятие флага) выполнять определенные действия без прерывания .

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   GIE/GIEH:  Бит глобального разрешения прерываний.

 

            IPEN=0

           1= Разрешены все немаскированные прерывания.

           0= Запрещены все прерывания.

 

            IPEN=1

           1= Разрешены  прерывания с высоким приоритетом.

           0= Все прерывания с высоким приоритетом запрещены.

 

Бит6   PEIE/GIEL: Разрешение периферийных прерываний

 

            IPEN=0

           1= Разрешены все периферийные немаскированные прерывания.

           0= Запрещены все периферийные  прерывания.

 

            IPEN=1

           1= Разрешены  прерывания с низким приоритетом.

           0= Все прерывания с низким приоритетом запрещены.

 

Бит5  TMR0IE: Разрешение прерывания по переполнению TMR0

 

                1= Разрешено прерывание по переполнению TMR0

            0= Прерывание по переполнению TMR0 запрещено.

 

Бит4   INT0IE: Разрешение внешнего прерывания  INT0

 

               1= Внешнее прерывание  INT0 разрешено

           0= Внешнее  прерывание  INT0 запрещено

 

Бит3   RB0IE: Разрешение прерывания по изменению уровня сигнала на входах PORTB

 

               1= Разрешено прерывания по изменению уровня сигнала на входах PORTB

           0=Запрещено прерывания по изменению уровня сигнала на входах PORTB

 

Бит2  TMR0IF: Флаг прерывания переполнения таймера TMR

 

               1= Произошло переполнение таймера TMR0 (сбрасывается программно)

           0= Переполнение таймера TMR0 не происходило

 

Бит1  TMR0IF: Флаг внешнего прерывания  INT0

 

               1= Выполнено условие внешнего прерывания  INT0 (сбрасывается программно)

           0= Условие внешнего прерывания  INT0 не происходило

 

Бит0  INT0IE: Флаг прерывания по изменению уровня сигнала на входах PORTB

1= Зафиксировано изменение  уровня сигнала на одном из входах RB7:RB4                      (сбрасывается программно)

          0= Уровень сигнала на входах RB7:RB4  не изменялся

 

 

 

 

 

 

 

 


 

Регистр INTCON2.

 

Регистр доступен для записи и чтения, содержит бит включения подтягивающих резисторов, битов выбора активного фронта  и  приоритета.

 

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к установке битов управления регистра INTCON2, за исключением не используемых битов 1,3, которые сбрасываются.

R/W-1 R/W-1 R/W-1 R/W-1 U-0 R/W-1 U-0 R/W-1
-RBPU INTEDG0 INTEDG1 INTEDG2 - TMR0IP - RBIP
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   -RBPU:  Включение подтягивающих резисторов PORTB

 

           1= Все подтягивающие резисторы выключены

           0= Подтягивающие резисторы включены на выводах PORTB, настроенных на вход

 

Бит6   INTEDG0: Выбор активного фронта внешнего прерывания INT0

 

           1= Прерывания по переднему фронту сигнала

           0= Прерывание по заднему фронту синала

 

Бит5  INTEDG1: Выбор активного фронта внешнего прерывания INT1

 

           1= Прерывания по переднему фронту сигнала

           0= Прерывание по заднему фронту синала

 

Бит4   INTEDG2: Выбор активного фронта внешнего прерывания INT2

 

           1= Прерывания по переднему фронту сигнала

           0= Прерывание по заднему фронту синала

 

Бит3   - Не используется. читается как 0

 

 

Бит2  TMR0IP: Выбор приоритета прерывания по переполнению таймера TMR0

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит1 - Не используется. читается как 0

 

 

Бит0  RBIP: Выбор приоритета прерывания по изменению уровня сигнала на входах PORTB

1= Высокий приоритет

          0= Низкий приоритет


 

 Регистр INTCON3.

 

 

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

 

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к сбросу  битов  управления регистра INTCON3, за исключением битов 6,7, которые устанавливаются.

R/W-1 R/W-1 U-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0
INT2IP INT1IP - INT2IE INT1IE - INT2IF INT1IF
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   INT2IP:  Выбор приоритета внешнего прерывания INT2

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит6   INT1IP:  Выбор приоритета внешнего прерывания INT1

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит5  - Не используется. читается как 0

 

Бит4   INT2IE: Разрешение  внешнего прерывания INT2

 

           1= Внешнее прерывание INT2 разрешено

           0= Внешнее прерывание INT2 запрещено

 

Бит3   INT1IE: Разрешение  внешнего прерывания INT1

 

           1= Внешнее прерывание INT1 разрешено

           0= Внешнее прерывание INT1 запрещено

 

 

Бит2  - Не используется. читается как 0

 

Бит1   INT2IE: Флаг внешнего прерывания INT2

 

              1= Выполнено условие внешнего прерывания INT2 (сбрасывается программно)

           0= Условие внешнее прерывание INT2 не выполнено

 

Бит0  INT1IE: Флаг внешнего прерывания INT1

 

              1= Выполнено условие внешнего прерывания INT1 (сбрасывается программно)

           0= Условие внешнее прерывание INT1 не выполнено


 

Регистр PIR1.

 

Регистр доступен для записи и чтения за исключением битов 4,5, которые доступны только для чтения,  содержит индивидуальные флаги периферийных прерываний .

Важно:

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

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к сбросу  битов   регистра PIR1.

R/W-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   PSPIF Флаг прерывания ведомого параллельного порта PSP

 

           1= Произошла операция чтения или записи (сбрасывается программно)

           0= Операции чтения и записи не выполнялось

 

Бит6   ADIF: Флаг прерывания от модуля АЦП

 

           1= Преобразование АЦП завершено (сбрасывается программно)

           0= Преобразование АЦП не  завершено

 

Бит5  RCIF: Флаг прерывания от приемника USART

 

           1= Буфер  приемника USART полон (сбрасывается чтением регистра RCREG)

           0= Буфер  приемника USART пуст

 

Бит4   TXPIF: Флаг прерывания от передатчика USART

 

           1= Буфер передатчика USART пуст (сбрасывается записью в регистр TXREG)

           0= Буфер передатчика USART полон

 

Бит3   SSPIF: Флаг прерывания от модуля MSSP

 

           1= Выполнено условие возникновения прерывания от модуля SSP

                                                                                (сбрасывается программно)

           0= Условие возникновения прерывания от модуля SSP не выполнено

 

 

Бит2  CCP1IF: Флаг прерывания от модуля CCP1

                Режим захвата

           1= Выполнен захват значения TMR1 (сбрасывается программно)

           0= Захвата значения TMP1 не происходило

 

              Режим сравнения

           1= Значение TMR1 достигло указанного в регистрах сравнения

                                                                                                        (сбрасывается программно)

           0= Значение TMR1 не достигло указанного в регистрах сравнения

 

              ШИМ режим

           Не используется

 

Бит1  TMR2IF: Флаг прерывания по переполнению таймера TMR2

 

           1= Произошло переполнение таймера  TMR2 (сбрасывается программно)

           0= Переполнение таймера  TMR2 не происходило

 

 

 

Бит0  TMR1IF: Флаг прерывания по переполнению таймера TMR1

 

           1= Произошло переполнение таймера  TMR1 (сбрасывается программно)

           0= Переполнение таймера  TMR1 не происходило


 

Регистр PIR2.

 

Регистр доступен для записи и чтения, за исключением битов 5,6,7, которые не используются и читаются как 0,содержит индивидуальные флаги периферийных прерываний .

Важно:

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

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к сбросу  битов   регистра PIR2.

U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
- - - EEIF BCLIF LVDIF TMR3IF CCP2IF
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   - Не используется. читается как 0

 

Бит6  - Не используется. читается как 0 

 

Бит5  - Не используется. читается как 0

 

Бит4   EEIF: Флаг прерывания по окончании записи EEROM данных/Flach памяти программ

 

           1= Запись данных завершена (сбрасывается программно)

           0= Запись данных не завершена или не была начата

 

Бит3   BCIF: Флаг прерываний возникновения коллизий на шине

 

           1= На шине обнаружены коллизии (сбрасывается программно)

           0= Коллизии не обнаружено

 

Бит2  LVDIP: Флаг прерывания от детектора пониженного напряжения

 

           1= Обнаружено снижение напряжения питания (сбрасывается программно)

           0= Напряжение питания выше установленного значения

 

Бит1  TMR3IP: Флаг прерывания переполнения таймера TMR3

 

           1= Произошло переполнение таймера TMR3 (сбрасывается программно)

           0= Переполнение таймера TMR3 не происходило

 

 

Бит0  CCP2IF: Флаг прерывания от модуля CCP2

                 Режим захвата

           1= Выполнен захват значения TMR1 (сбрасывается программно)

           0= Захвата значения TMP1 не происходило

 

              Режим сравнения

           1= Значение TMR1 достигло указанного в регистрах сравнения

                                                                                                        (сбрасывается программно)

           0= Значение TMR1 не достигло указанного в регистрах сравнения

 

              ШИМ режим

           Не используется

 


 

Регистр PIE1.

 

Регистр доступен для записи и чтения,  содержит индивидуальные биты периферийных прерываний. Если бит IPEN=0, то для разрешения перефирийных прерываний необходимо установить бит PEIE.

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к сбросу  битов   регистра PIE1.

 

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   PSPIE Разрешение  прерывания от ведомого параллельного порта PSP

 

           1= Прерывание от ведомого параллельного порта PSP разрешено

           0= Преравание от ведомого параллельного порта PSP запрещено

 

Бит6   ADIE: Разрешение прерывания от модуля АЦП

 

           1= Прерывание от модуля АЦП разрешено

           0= Преравание от модуля АЦП запрещено

 

Бит5  RCIE: Разрешение прерывания от приемника USART

 

           1= Прерывание от приемника USART разрешено

           0= Прерывание от приемника USART запрещено

 

Бит4   TXPIE: Разрешение прерывания от передатчика USART

 

           1= Прерывание от передатчика USART разрешено

           0= Прерывание от передатчика USART запрещено

 

Бит3   SSPIE: Разрешениег прерывания от модуля MSSP

 

           1= Прерывание от модуля MSSP разрешено

           0= Прерывание от модуля MSSP запрещено

 

 

Бит2  CCP1IE: Разрешение прерывания от модуля CCP1

               

           1= Прерывание от модуля CCP1  разрешено

           0= Прерывание от модуля CCP1  запрещено

 

Бит1  TMR2IE: Разрешение  прерывания по переполнению таймера TMR2

 

           1= Прерывание по переполнению таймера TMR2  разрешено

           0= Прерывание по переполнению таймера TMR2 запрещено

 

 

 

Бит0  TMR1IE: Разрешение  прерывания по переполнению таймера TMR1

 

           1= Прерывание по переполнению таймера TMR1  разрешено

           0= Прерывание по переполнению таймера TMR1 запрещено


 

Регистр PIE2.

 

Регистр доступен для записи и чтения, за исключением битов 5,6,7, которые не используются и читаются как 0,  содержит индивидуальные флаги периферийных прерываний .

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к сбросу  битов   регистра PIR2.

U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
- - - EEIE BCLIE LVDIE TMR3IE CCP2IE
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   - Не используется. читается как 0

 

Бит6  - Не используется. читается как 0 

 

Бит5  - Не используется. читается как 0

 

Бит4   EEIE: Разрешение прерывания по окончании записи EEROM

                                                                данных / Flach памяти программ

 

           1= Прерывание по окончании записи EEROM  разрешено

           0= Прерывание по окончании записи EEROM  запрещено

 

Бит3   BCIE: Разрешение прерываний возникновения коллизий на шине

 

           1= Прерывание по возникновения коллизий на шине  разрешено

           0= Прерывание по возникновения коллизий на шине  запрещено

 

Бит2  LVDIE: Разрешение прерывания от детектора пониженного напряжения

 

           1= Прерывание от детектора пониженного напряжения  разрешено

           0= Прерывание от детектора пониженного напряжения  запрещено

 

Бит1  TMR3IE: Разрешение прерывания от переполнения таймера TMR3

 

           1= Прерывание от переполнения таймера TMR3  разрешено

           0= Прерывание от переполнения таймера TMR3  запрещено

 

 

Бит0  CCP2IE: Разрешение  прерывания от модуля CCP2

                

           1= Прерывание от модуля CCP2  разрешено

           0= Прерывание от модуля CCP2  запрещено


 

Регистр IPR1.

 

Регистр доступен для записи и чтения,  содержит индивидуальные биты периферийных прерываний. Для включения приорететной системы прерываний  бит IPEN должен быть установлен "1".

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к  установке  битов   регистра IPR1.

 

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   PSPIP Выбор приоритета  прерывания от ведомого параллельного порта PSP

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит6   ADIP: Выбор приоритета прерывания от модуля АЦП

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит5  RCIP: Выбор приоритета  прерывания от приемника USART

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит4   TXPIP: Выбор приоритета прерывания от передатчика USART

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит3   SSPIP: Выбор приоритета прерывания от модуля MSSP

 

           1= Высокий приоритет

           0= Низкий приоритет

 

 

Бит2  CCP1IP: Выбор приоритета прерывания от модуля CCP1

               

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит1  TMR2IP: Выбор приоритета  прерывания по переполнению таймера TMR2

 

           1= Высокий приоритет

           0= Низкий приоритет

 

 

 

Бит0  TMR1IP: Выбор приоритета  прерывания по переполнению таймера TMR1

 

           1= Высокий приоритет

           0= Низкий приоритет


 

Регистр IPR2.

 

Регистр доступен для записи и чтения, за исключением битов 5,6,7, которые не используются и читаются как 0,  содержит индивидуальные биты приоритета  периферийных прерываний. Для включения приорететной системы прерываний  бит IPEN должен быть установлен "1".

Важно:

Сброс по включению питания   микроконтроллера (POR) и сброс по снижению питания (BOR) приводит к к установке  битов   регистра IPR2, за исключеним трех старших битов, которые не используются и читаются как 0.

U-0 U-0 U-0 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
- - - EEIP BCLIP LVDIP TMR3IP CCP2IP
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

Бит7   - Не используется. читается как 0

 

Бит6  - Не используется. читается как 0 

 

Бит5  - Не используется. читается как 0

 

Бит4   EEIP: Выбор приоритета прерывания по окончании записи EEROM

                                                                          данных / Flach памяти программ

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит3   BCIP: Выбор приоритета прерываний возникновения коллизий на шине

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит2  LVDIP: Выбор приоритета прерывания от детектора пониженного напряжения

 

           1= Высокий приоритет

           0= Низкий приоритет

 

Бит1  TMR3IP: Выбор приоритета прерывания от переполнения таймера TMR3

 

           1= Высокий приоритет

           0= Низкий приоритет

 

 

Бит0  CCP2IP: Выбор приоритета  прерывания от модуля CCP2

                

           1= Высокий приоритет

           0= Низкий приоритет

Read 11568 times Last modified on Четверг, 04 сентября 2014 11:50

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

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