Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

Delay Loop Question - Am I Missing Something?

Status
Not open for further replies.
Hello All.

I've a question regarding delay loops.

1) The book I am using gives this fragment of code as a means to produce a 42 microsecond delay with a PIC using a 4MHz crystal:

;=======================
; Procedure to delay
; 42 microseconds
;=======================
delay_125
movlw D'42' ; Repeat 42 machine cycles
movwf count1 ; Store value in counter
repeat
decfsz count1,f ; Decrement counter
goto repeat ; Continue if not 0
return ; End of delay


2) This makes sense to me: instructions run at 1/4 clock frequency, f, (here 4MHz / 4 = 1 MHz).

T (period) = 1 / f

So the period to execute each instruction is 1 microsecond.

Since the file count1 contains decimal 42, it should take 42 microseconds to count down to zero.

So far, so good (I think).



3) Now the confusion begins:

The same program then gives this fragment to produce a 5 millisecond delay. It relies on calling the 42 microsecond delay reproduced above 41 times:

;=======================
; Procedure to delay
; 5 milliseconds
;=======================
delay_5
movlw D'41' ; Counter = 41
movwf count2 ; Store in variable
delay
call delay_125 ; Delay
decfsz count2,f ; 40 times = 5 milliseconds
goto delay
return ; End of delay


4) It seems to me that calling a 42 microsecond delay 41 times produces this result:

(42x10-6 seconds) x 41 = 1.722x10-3 seconds. - That's not 5 milliseconds: it's too short.

-If I recall correctly, executing a "goto" instruction takes longer than one cycle. - Is that having an effect, or can anyone explain what I've missed, please?

Thanks.

Analogue.
 
The first function is not a 42uS delay. It loops 41 times giving a time of 3* 41 + 3 = 125 uS (The name of the function seems to indicate that even if the comment doesn't)

The first loop tales 3 cycles. 1 for the decfsz and 2 for the goto
 
Last edited:
Status
Not open for further replies.

Latest threads

Back
Top