Mycket tack vare den hjälp och information som delas med sig av här.
Stort tack till var och en som bidrar.
Jag vet att jag tidigare inte tyckt det här med interupt verkar så himla bra. Och i den kontexten var det oxå så.
Frågan är dock nu om denna snutt kod ser ut som den ska.
Dels rent allmänt när det gäller GIE etc.
Dels vad gäller att använda CALL inom den.
Dvs är det bättre att använda GOTO än CALL i detta fall?
De olika rutinerna i sig är inte med, vilket torde fungera då de inte påverkar just ramverket för ISR.
En sak jag inte blir riktigt klok på är hur man skapar W_TEMP.
Som texten är skriven ska den definieras i både bank 0 och bank 1.
Hur går det till?
Kod: Markera allt
ORG 0x0004
; GIE is cleared and thereby all calls for interrupt.
; All calls for interrupt while executing interrupt routine are stacked
; for when GIE is enabled again, at leaving the interrupt routine.
MOVWF W_TEMP ;copy W to temp register, could be in either bank
SWAPF STATUS,W ;swap status to be saved into W
BCF STATUS,RP0 ;change to bank 0 regardless of current bank
MOVWF STATUS_TEMP ;save status to bank 0 register
BTFSC T0IF ; Check if Timer0 interrupt flag.
CALL do_Timer0_Int ; IF so call Timer0 subroutine.
BCF T0IF ; Return and clear Timer0 interrupt flag.
BTFSC TMR1IF ; Check if Timer1 interrupt flag.
CALL do_Timer1_Int ; IF so call Timer1 subroutine.
BCF TMR1IF ; Return and clear Timer1 interrupt flag.
BTFSC GPIF ; Check if I/O port interrupt flag.
CALL do_GPIO_Int ; IF so call I/O port subroutine.
BCF GPIF ; Return and clear I/O port interrupt flag.
SWAPF STATUS_TEMP,W ;swap STATUS_TEMP register into W, sets bank to original state
MOVWF STATUS ;move W into STATUS register
SWAPF W_TEMP,F ;swap W_TEMP
SWAPF W_TEMP,W ;swap W_TEMP into W
RETFIE ; Return from interrupt call routines.
; GIE is set and all pending calls for interrupt is handled.
Minns jag rätt gäller det PIC12F629.
Jo, jag hoppar mellan olika PIC, de gör olika saker, har olika roller.