Microchip Technology MCP1630DM-DDBS1 Data Sheet

Page of 176
©
 2007 Microchip Technology Inc.
DS41211D-page 95
PIC12F683
12.5
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 lower 16 bytes of all banks are common in the
PIC12F683 (see Figure 2-2), temporary holding regis-
ters, W_TEMP and STATUS_TEMP, should be placed
in here. These 16 locations do not require banking and
therefore, makes 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 
Note:
The PIC12F683 normally does not require
saving the PCLATH. However, if com-
puted 
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 
;Swaps are used because they do not affect the status bits
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