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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
nppElM
Родился
Сообщения: 12
Зарегистрирован: Чт мар 05, 2009 10:32:23

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

Сообщение 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? подскажите, пожалуйста!
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

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

Сообщение radio-kot »

Смотрите ПРИМЕРЫ !!!!!!!!!!!

у PIC16 обычно один адрес (вектор) прерывания. Т.е. при всех прерываниях прога перескакивает на него. В процедуре прерывания вам надо програмно проанализировать его источник.
Будете проходить мимо- проходите!
driver_gv
Потрогал лапой паяльник
Сообщения: 399
Зарегистрирован: Сб авг 08, 2009 23:02:57
Откуда: Ростов-на-Дону
Контактная информация:

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

Сообщение 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

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

__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять
nppElM
Родился
Сообщения: 12
Зарегистрирован: Чт мар 05, 2009 10:32:23

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

Сообщение nppElM »

БОЛЬШОЕ СПАСИБО!!! Все стало понятно!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»