List p=pic16f877
include "P16F877.INC"
__CONFIG _CP_OFF & _WDT_OFF &_BODEN_OFF & _PWRTE_ON & _HS_OSC & _WDT_OFF & _LVP_OFF & _CPD_OFF
ERRORLEVEL -302
; variable declaration
cblock 0x20
;delay_counter1
;delay_counter2
main
call delay_1ms
call delay_20ms
;######################################################################
; Delay Routines
;######################################################################
;4MHz clock frequency
delay_1ms ;delay = 0.001 seconds = 1000 cycles
movlw 0xc6 ;c6=198 to decimal
movwf delay_counter1
movlw 0x01
movwf delay_counter2
delay_1ms_0
decfsz delay_counter1, f ;this instruction = one cycle
goto $+2 ;this instruction = two cycles
decfsz delay_counter2, f
goto delay_1ms_0 ; 993 cycles
goto $+1 ;
nop ; 3 cycles
return ; 4 cycles(include call)
delay_20ms ;delay = 0.02 sec = 20000 cycles
movlw 0x9e
movwf delay_counter1
movlw 0x10
movwf delay_counter2
delay_20ms_0
decfsz delay_counter1,f
goto $+2
decfsz delay_counter2,f
goto delay_20ms_0 ;19993 cycles
goto $+1
nop ;3 cycles
return ;4 cycles(include call)
END