PIC12F635/PIC16F636/639
12.10 Context Saving During Interrupts
Note:
The PIC12F635/PIC16F636/639 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.
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 lower 16 bytes of all banks are common in the
PIC12F635/PIC16F636/639 (see Figure 2-2), 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 12-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 12-1:
SAVING STATUS AND W REGISTERS IN RAM
MOVWF
SWAPF
W_TEMP
STATUS,W
;Copy W to TEMP register
;Swap status to be saved into W
;Swaps are used because they do not affect the status bits
;Save status to bank zero STATUS_TEMP register
MOVWF
:
STATUS_TEMP
:(ISR)
:
;Insert user code here
SWAPF
STATUS_TEMP,W
;Swap STATUS_TEMP register into W
;(sets bank to original state)
;Move W into STATUS register
;Swap W_TEMP
MOVWF
SWAPF
SWAPF
STATUS
W_TEMP,F
W_TEMP,W
;Swap W_TEMP into W
DS41232D-page 142
© 2007 Microchip Technology Inc.