Доброго время суток! Поставили задачу откорректировать программу написанную для PICа с пиками не когда не сталкивался, а сделать нужно быстро, в программе есть прерывания по входу INT, а мене бы нужно еще добавить туда прерывания по переполнению TMR0 (нужен отсчет 1 сек). С тем как проинициализировать их все понятно, а вот как к ним обратиться что то не очень, обычное есть вектора прерываний которые имеют совой приоритет, и конкретно прописаны и при срабатывании того или иного прерывания оно и происходит, а тут как???
У меня есть МК PIC16f73
у PIC16 обычно один адрес (вектор) прерывания. Т.е. при всех прерываниях прога перескакивает на него. В процедуре прерывания вам надо програмно проанализировать его источник.
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
...............
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять