INTERRUPT org ISR_V ;INTERRUPT VECTOR LOCATION.
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
movf PCLATH, W ;ONLY REQUIRED IF USING PAGES 1, 2 AND/OR 3
movwf PCLATH_TEMP ;SAVE PCLATH INTO W
clrf PCLATH ;PAGE ZERO, REGARDLESS OF CURRENT PAGE
;call DELAY_15MS
movlw B'11110000' ;CHECK FOR KEY DOWN.
movwF TEMP
movf PORTB, W
subwf TEMP, F
btfsc STATUS, Z
goto DONE ;ALL KEYS UP SO RETURN.
bsf FLAGS, KEYS
DONE
clrf PORTB ;CLEAR PORT B.
clrf PORTD ;CLEAR PORT D.
movf PORTB, F
bcf INTCON,RBIF;CLEAR Port B interrupt FLAG
movf PCLATH_TEMP, W ;RESTORE PCLATH
movwf PCLATH ;MOVE W INTO PCLATH
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
retfie