PIC17C4X
Example 5-1 shows the saving and restoring of infor-
mation for an interrupt service routine. The PUSH and
POP routines could either be in each interrupt service
routine or could be subroutines that were called.
Depending on the application, other registers may also
need to be saved, such as PCLATH.
5.9
Context Saving During Interrupts
During an interrupt, only the returned PC value is saved
on the stack. Typically, users may wish to save key reg-
isters during an interrupt; e.g. WREG, ALUSTA and the
BSR registers. This requires implementation in soft-
ware.
EXAMPLE 5-1: SAVING STATUS AND WREG IN RAM
;
; The addresses that are used to store the CPUSTA and WREG values
; must be in the data memory address range of 18h - 1Fh. Up to
; 8 locations can be saved and restored using
; the MOVFP instruction. This instruction neither affects the status
; bits, nor corrupts the WREG register.
;
;
PUSH
MOVFP
MOVFP
MOVFP
WREG, TEMP_W
ALUSTA, TEMP_STATUS ; Save ALUSTA
; Save WREG
BSR, TEMP_BSR
TEMP_W, WREG
; Save BSR
ISR
POP
:
:
; This is the interrupt service routine
; Restore WREG
MOVFP
MOVFP
MOVFP
RETFIE
TEMP_STATUS, ALUSTA ; Restore ALUSTA
TEMP_BSR, BSR
; Restore BSR
; Return from Interrupts enabled
1996 Microchip Technology Inc.
DS30412C-page 27