;********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

    Source: geocities.com/ece23314/prog

               ( geocities.com/ece23314)