REVinit MACRO
bcf STATUS, RP0
bcf STATUS, RP1
bcf REVport
bsf STATUS, RP0
bcf STATUS, RP1
bcf REVtris
movlw b'00000111' ; TMR0 prescaler rate 1:256
movwf OPTION_REG ; OPTION <- W
bcf STATUS, RP0
bcf STATUS, RP1
ENDM
REV MACRO ;freq , duration
bcf STATUS, RP0
bcf STATUS, RP1
movlw freq
movwf REV_TEMP1
movlw 0x01 ;time before frequency change
movwf REV_TEMP2
call REVsub
ENDM
;**********************************************************************
; Subroutines
REVsub
clrf TMR0 ; Counter initialization
bcf INTCON, T0IF
bcf REVport
REVa
bcf INTCON, T0IF ; Clears TMR0 Overflow Flag
REVb
bsf REVport
call B_Wait ; Logic one "1" duration
bcf REVport
call B_Wait ; Logic zero "0" duration
btfss INTCON, T0IF ; Check TMR0 Overflow Flag,
goto REVb ; skip next if set
decfsz REV_TEMP2, f ; Is REV_TEMP2 = 0 ?
goto REVa ; Go to REVa again
return
B_Wait
movf REV_TEMP1, w
movwf REV_TEMP3
B_Waita
decfsz REV_TEMP3, f
goto B_Waita
return