Страница 1 из 1

Нужна помощь по PIC (перерывания)

Добавлено: Чт сен 23, 2010 11:46:39
nppElM
Доброго время суток! Поставили задачу откорректировать программу написанную для PICа с пиками не когда не сталкивался, а сделать нужно быстро, в программе есть прерывания по входу INT, а мене бы нужно еще добавить туда прерывания по переполнению TMR0 (нужен отсчет 1 сек). С тем как проинициализировать их все понятно, а вот как к ним обратиться что то не очень, обычное есть вектора прерываний которые имеют совой приоритет, и конкретно прописаны и при срабатывании того или иного прерывания оно и происходит, а тут как???
У меня есть МК PIC16f73

Код: Выделить всё

INTCON  equ    0b ; здесь поправлю это понятно
OPTIONs   equ 1
        org     0000
        goto    start
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
; ПРЕРЫВАНИЕ
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
      org     4
int
   movwf   RwTmp      ;|   
   swapf   STATUS,w   ;\сохранение
   movwf   RstaTmp      ;/STATUS и W
; процедура

   movwf   STATUS      ;/STATUS
   swapf   RwTmp,f      ;\ и W
   swapf   RwTmp,w      ;/

   retfie

А как сюда добавить прерывания по переполнению TMR0? подскажите, пожалуйста!

Re: Нужна помощь по PIC (перерывания)

Добавлено: Чт сен 23, 2010 11:51:55
radio-kot
Смотрите ПРИМЕРЫ !!!!!!!!!!!

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

Re: Нужна помощь по PIC (перерывания)

Добавлено: Чт сен 23, 2010 13:37:58
driver_gv
Примерно так:

Код: Выделить всё


   list      p=16f73      ; list directive to define processor
   #include   <p16f73.inc>   ; processor specific variable definitions
   
   __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC


;***** VARIABLE DEFINITIONS * IRQ *****

w_temp         EQU   0x20      ; variable used for context saving
w_temp1         EQU   0xA0      ; reserve bank1 equivalent of w_temp
status_temp      EQU   0x21      ; variable used for context saving
pclath_temp      EQU   0x22      ; variable used for context saving

..........................


;**********************************************************************
         ORG     0x000             ; processor reset vector

         clrf    PCLATH            ; ensure page bits are cleared
           goto    START              ; go to beginning of program
      

;**********************************************************************

         ORG     0x004             ; interrupt vector location

         movwf   w_temp            ; save off current W register contents
         movf   STATUS,w          ; move status register into W register
         bcf     STATUS,RP0        ; ensure file register bank set to 0
         movwf   status_temp       ; save off contents of STATUS register
         movf   PCLATH,w     ; move pclath register into w register
         movwf   pclath_temp     ; save off contents of PCLATH register

      movlw HIGH RETIRQ    ;load high 8-bit address of Table
      movwf PCLATH
; узнавание источника прерывания

      BTFSS   INTCON,INTF
         GOTO    IRQ_TIMER

; обработка прерывания не от таймера
      BCF      INTCON,INTF            
..................
..................
      GOTO   RETIRQ
IRQ_TIMER
; обработка прерывания таймера
      BCF   INTCON,T0IF   ; RESET FLAG TIMER
..............
..............

RETIRQ
         bcf     STATUS,RP0        ; ensure file register bank set to 0
         movf   pclath_temp,w     ; retrieve copy of PCLATH register
         movwf   PCLATH        ; restore pre-isr PCLATH register contents
         movf    status_temp,w     ; retrieve copy of STATUS register
         movwf   STATUS            ; restore pre-isr STATUS register contents
         swapf   w_temp,f
         swapf   w_temp,w          ; restore pre-isr W register contents
         retfie                    ; return from interrupt
;**********************************************************************

;##########################################################
; Начало нашей программы
START

...............


Re: Нужна помощь по PIC (перерывания)

Добавлено: Чт сен 23, 2010 20:38:57
nppElM
БОЛЬШОЕ СПАСИБО!!! Все стало понятно!