# how to calculate the delay [8051]

#### kawtar

Apr 15, 2016
4
Hi
I didnt understand how to compute time delays ill give an example ( I got this example from the internet
DELAY: MOV R2,#255
HERE: NOP
NOP
NOP
NOP
DJNZ R2,HERE
RET
the time delay inside the HERE loop is 255(1+1+1+1+2)] x 1.085 us = 1660.05 us I mean why dont we do 1+1+1+1+2 *1.085 why do we have to multiply it by 255
also why is the time delay outside the loop [1660.05 us+1+1)]x1.085 and not just 1+1*1.085

#### Harald Kapp

##### Moderator
Moderator
Nov 17, 2011
12,755
why do we have to multiply it by 255
consider this statement right before the loop sarts:
DELAY: MOV R2,#255
and this statement which terminates the loop:
DJNZ R2,HERE

why is the time delay outside the loop [1660.05 us+1+1)]x1.085 and not just 1+1*1.085
What do you mean by "time delay outside the loop"?
When you write the code in a bit more structured manner:
Code:
DELAY: MOV R2,#255

HERE: NOP       ; this is the actual start of the loop
NOP
NOP
NOP
DJNZ R2,HERE    ; this is the end of the loop

RET
you can easily see that there is the loop plus 2 instructions outside the loop. This should answer your 2nd question - once you have understood the answer to the first question.
[1660.05 us+1+1)]x1.085 is the delay of the total cde, not just the code outside the loop.

Replies
11
Views
1K
Replies
19
Views
3K
Replies
7
Views
2K
Replies
2
Views
1K
Replies
4
Views
1K