Tony Nixon quotes the Microchip datasheet for the 16f8xx (and Robert Rolf added comments):
movwf w_temp ;given multiple banks, and no global memory ;you need to make a w_temp in each because you cannot change status prior to saving it. swapf status,w ;The swapf instruction, unlike the movf, affects NO status bits, which is why it is used here. clrf status ;point to bank 0 and clear all the flags movwf status_temp movf pclath,w ;save PCLath movwf pclath_temp clrf pclath ;assume that this ISR is in page 0 ;bcf status,irp ;This bcf is redundant & unnecessary unless the clrf status (above) is removed movf fsr,w movwf fsr_temp ; ISR ;The example fails to restore FSR here. ;One should movf fsr_temp,w movwf fsr ;to complete the restore sequence. movf pclath_temp,w movwf pclath swapf status_temp,w movwf status swapf w_temp swapf w_temp,w
Tom Handley says:
...one of the nice things about the 16C76/77 and 16F876/877 devices is that the upper 16 Bytes are aliased to Bank 0. This is a good place to keep a copy of W, STATUS, PCLATH, FSR, etc, during an ISR routine.
Timer tutorial (incl prescalers) by Andrew Warren
David A Cary of Motorguide Pinpoint Says:
Up: PIC Micro Controller Interrupt Routine Library http://piclist.com/techref/microchip/ints.htm
Questions: