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