list p=pic16f877a
#include "p16f877a.inc"
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC & _CP_OFF
D2 EQU 1DH
D1 EQU 1EH
W_TEMP EQU 1FH
STATUS_TEMP EQU 1CH << like already said, these adresses are SFR, General purpose RAM starts at 20h
;----------------------------------STARTING-LOCATION-------------------------------
ORG 0X00
GOTO INITIAL
ORG 0X04
ISR:
MOVWF W_TEMP ; Copy W to TEMP register
SWAPF STATUS, W ; Swap status to be saved into W
MOVWF STATUS_TEMP ; Save status to STATUS_TEMP register <<Make sure W_TEMP and STATUS_TEMP are in unbanked memory (70h - 7Fh)
CLRF STATUS ; Force page zero
CLRF PORTB
CLRF PORTC
CLRF PORTD
BSF PORTD,4
CALL DELAY
BCF PORTD,4
BCF INTCON,INTF ; CLEAR THE INTERRUPT FLAG BIT
;now restore context before exiting interrupt
SWAPF STATUS_TEMP, W ; Swap nibbles in STATUS_TEMP register and place result into W
MOVWF STATUS ; Move W into STATUS register (sets bank to original state)
SWAPF W_TEMP, F ; Swap nibbles in W_TEMP and place result in W_TEMP
SWAPF W_TEMP, W ; Swap nibbles in W_TEMP and place result into W
RETFIE ; RETURN FROM INTERRUPT
;---------------------------------------------------------------------------------------------------------
INITIAL: BSF STATUS,RP0
MOVLW 0X01
MOVWF TRISB ;SET PORTB AS INPUT PORT << only PortB.0 will be an input
MOVLW 0XFF
MOVWF TRISC ;SET PORTC AS OUTPUT PORT <<portC will be all inputs, not outputs
MOVLW 0X00 ;
MOVWF TRISD
BCF STATUS,RP0
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF INTCON
BSF INTCON,GIE
BSF INTCON,INTE
START: ----
------
--------
DELAY: MOVLW B'11111111'
MOVWF D2
DELAY2: MOVLW B'10001000'
MOVWF D1
DELAY3: DECFSZ D1,F
GOTO DELAY3
DECFSZ D,F
GOTO DELAY2
RETURN
END