; USING RB0 INTERRUPT ; ; THIS IS A PROGRAM TO TEST RB0 (EXTERNAL INTERRUPT PIN) ; AT EVERY INTERRUPT ON RB0 OF THE PIC, SUBROUTINE ISR IS EXECUTED ; THE MAIN PROGRAM JUST INCREMENT THE VARIABLES R0, R1, AND R2 IN A ; LOOP EXECUTION. ; THE ISR CLEARS THE VALUE OF THE VARIABLES WHENEVER INTERRUPT OCCURS LIST P=16F84 ERRORLEVEL -302 #INCLUDE P16F84.INC ;************************************************************ ; REGISTER DEFINITIONS ;************************************************************ CBLOCK 0CH ; VARIABLE ALLOCATION. R0 R1 R2 ENDC ;************************************************************************ ;THIS PART INITIALIZES THE PORTS AND OTHER PHERIPERALS IN MICROCONTROLLER ;************************************************************************ ORG 0000H ; SET POWER ON RESET VECTOR. CLRF PORTA CLRF PORTB GOTO INIT ORG 0004H ; SET INTERRUPT VECTOR. GOTO ISR ORG 0005H INIT BSF STATUS,RP0 ; SET BANK = 1. BCF OPTION_REG,7 ; ENABLE BUILT-IN PULL-UP RESISTORS. BCF OPTION_REG,6 ; SELECT INTERRUPT ON RISING EDGE. MOVLW b'00000000' ; SET PORTA ALL TO OUTPUT. MOVWF TRISA MOVLW b'11111111' ; SET PORTB ALL TO INPUT. MOVWF TRISB BCF STATUS,RP0 ; SET BANK = 0. ;************************************************************** ; ENABLING THE INTERRUPT AT RB0/INT PIN ;************************************************************** BCF INTCON,1 ; SET RB0 INTERRUPT TO DID NOT OCCUR. BSF INTCON,4 ; SET RB0/INT AS INTERRUPT. BSF INTCON,GIE ; RB0/INT IS NOW READY FOR INTERRUPT. MAIN INCF R0 INCF R1 INCF R2 GOTO MAIN ;**************************************************************** ; THIS ROUTINE EXECUTES EVERY RISING EDGE OF RB0/INT PIN ;**************************************************************** ISR BCF INTCON,7 ; DISABLE GIE SO THAT NO INTERRUPT ALWAYS OCCUR. BCF INTCON,1 ; SET RB0 INTERRUPT TO DID NOT OCCUR. CLRF R0 CLRF R1 CLRF R2 RETFIE ; RETFIE RELOADS PC WITH THE SP AND AUTOMATICALLY ; ENABLE GIE. END