Datasheet

Table Of Contents
© 2008 Microchip Technology Inc. DS41262E-page 211
PIC16F631/677/685/687/689/690
14.4 Context Saving During Interrupts
During an interrupt, only the return PC value is saved
on the stack. Typically, users may wish to save key
registers during an interrupt (e.g., W and STATUS
registers). This must be implemented in software.
Since the upper 16 bytes of all GPR banks are common
in the PIC16F631/677/685/687/689/690 (see
Figures 2-2 and 2-3), temporary holding registers,
W_TEMP and STATUS_TEMP, should be placed in
here. These 16 locations do not require banking and
therefore, make it easier to context save and restore.
The same code shown in Example 14-1 can be used
to:
Store the W register
Store the STATUS register
Execute the ISR code
Restore the Status (and Bank Select Bit register)
Restore the W register
EXAMPLE 14-1: SAVING STATUS AND W REGISTERS IN RAM
Note: The PIC16F631/677/685/687/689/690
normally does not require saving the
PCLATH. However, if computed GOTO’s
are used in the ISR and the main code, the
PCLATH must be saved and restored in
the ISR.
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS,W
;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP
;Save status to bank zero STATUS_TEMP register
:
:(ISR) ;Insert user code here
:
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