Im trying to write some code which will flash a led every 0.5seconds using TMR1. Then i want to use a momentary switch connected to rb0 to turn the flashing sequence on and off. Ive got the button interrupt working but now i need to work the tmr1 interrupt into it.
I was just wondering is this looks any good:
I was just wondering is this looks any good:
Code:
BANK0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANK1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
ORG 0X000
GOTO SETUP
ORG 0X004
BTFSC INTCON,INTF ;has a switch been pressed?
CALL SWITCH ;go and turn tmr1 on or off
BTFSC PIR1,TMR1IF ;has tmr1 overflowed?
CALL TIMER ;turn led on or off
RETFIE
SETUP
BANK1
MOVLW 0XD7
MOVWF OPTION_REG ;Sets int on falling edge
MOVLW B'00000001'
MOVWF TRISB ;1 input
MOVLW B'00000001'
MOVWF PIE1 ;tmr1 overflow bit
BANK0
MOVLW B'10010000'
MOVWF INTCON ;GIE and INTE set
MOVLW 0X39
MOVWF T1CON ;1:8 prescale, internal osc
MOVLW 0XF8
MOVWF TMR1H
MOVLW 0X60
MOVWF TMR1L ;setup tmr1 for 0.5sec (i hope)
MAIN
GOTO MAIN ;wait until something happens
TIMER
BTFSS PORTB,7 ;is led on?
GOTO THERE ;turn it on if its not
BCF PORTB,7 ;turn led off
BCF PIR1,TMR1IF ;reset interrupt
MOVLW 0XF8
MOVWF TMR1H
MOVLW 0X60
MOVLW TMR1L ;reset tmr1
RETURN
THERE: BSF PORTB,7 ;turn led on
BCF PIR1,TMR1IF ;reset interrupt
MOVLW 0XF8
MOVWF TMR1H
MOVLW 0X60
MOVLW TMR1L ;reset interrupt
RETURN
SWITCH
BTFSC T1CON,TMR1ON ;is tmr1 on?
GOTO HERE ;jump is it is
BSF T1CON,TMR1ON ;turn tmr1 on
BCF INTCON,INTF ;reset flag
RETURN
HERE: BCF T1CON,TMR1ON ;turn tmr1 off
BCF INTCON,INTF ;reset flag
RETURN