;********ONE MILLISECOND DELAY***********
; by: Eng'r Roland Michael A. dela Peña *
;****************************************
LIST P=16F84
ERRORLEVEL -302
#INCLUDE P16F84.INC
;************************************************************
; REGISTER DEFINITIONS
;************************************************************
CBLOCK 0CH
COUNT ; BIT COUNTER
LOOP ; DELAY LOOP COUNTER
LOOPS ; DELAY LOOP COUNTER
LOOPS2 ; DELAY LOOP COUNTER
ENDC
;************************************************************************
;THIS IS FOR CALIBRATION OF DELAY ROUTINE (CONFIGURED FOR 10 MHz)
;************************************************************************
ORG 0000h ; SET POWER ON RESET VECTOR.
MAIN
MOVLW d'1'
MOVWF LOOPS
CALL WAIT ; GO FOR 1 MILLISECOND
; CALL DELAY ; THIS IS 250 MILLISECOND
GOTO MAIN
;*************************************************************
; 250 MILLISEC DELAY ROUTINE
;*************************************************************
DELAY
MOVLW d'250'
MOVWF LOOPS
GOTO WAIT
;*************************************************************
; DELAY ROUTINE
; THIS ROUTINE TAKES THE VALUE IN ‘LOOPS’
; AND MULTIPLIES IT TIMES 1 MILLISECOND TO
; DETERMINE DELAY TIME
;*************************************************************
WAIT
MOVLW d'250' ; TIMING ADJUSTMENT VARIABLE.
MOVWF LOOPS2
TOP
NOP ; SIT AND WAIT.
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ LOOPS2 ; INNER LOOPS COMPLETE?
GOTO TOP ; NO, GO AGAIN.
DECFSZ LOOPS ; OUTER LOOPS COMPLETE?
GOTO WAIT ; NO, GO AGAIN.
RETLW d'0' ; YES, RETURN FROM SUB.
END
               (
geocities.com/ece23314)