
2005 Microchip Technology Inc.
Preliminary
DS41265A-page 205
PIC16F946
16.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
PIC16F946
(see
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
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 16-1:
SAVING STATUS AND W REGISTERS IN RAM
Note:
The PIC16F946 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