Datasheet

PIC16F785/HV785
DS41249E-page 120 © 2008 Microchip Technology Inc.
15.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 last 16 bytes of all banks are common in the
PIC16F785/HV785 (see Figure 2-2), temporary hold-
ing registers W_TEMP and STATUS_TEMP should be
placed in here. These 16 locations do not require
banking, therefore, making it easier to save and restore
context. The same code shown in Example 15-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 15-1: SAVING STATUS AND W REGISTERS IN RAM
Note: The PIC16F785/HV785 normally does not
require saving the PCLATH. However, if
computed GOTOs 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 (swap does not affect status)
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