单片机延时计算程序源代码
源代码在线查看: for()循环精确定时.txt
★其实用for()循环就可以实验C51精确定时没有必要用while()
有时候for()比while()好,但是又有时候相反(*^_^*)
只可惜不能传递参数!!!
void delay(void)
{
unsigned char i,j;
for(i=5;i>0;i--)
for(j=28;j>0;j--);
}
▲实验记录:
i=5,j=28
0.000 389 00
0.000 691 00 0.000 302 00
(1+1)+[(2*28+1+2)*5+2+1+2=302 us
▲产生的汇编代码为:
; FUNCTION delay (BEGIN)
;---- Variable 'i' assigned to Register 'R7' ----
0000 7F05 MOV R7,#05H
0002 ?C0001:
;---- Variable 'j' assigned to Register 'R6' ----
0002 7E1C MOV R6,#01CH
0004 ?C0004:
0004 DEFE DJNZ R6,?C0004
0006 ?C0003:
0006 DFFA DJNZ R7,?C0001
0008 ?C0007:
0008 22 RET
; FUNCTION delay (END)
▲延迟时间计算:
Delay_Time=[(2*j+1+2)*i+2+1+2
即:
【Delay_Time=[(2*j+3)*i+5】
▲程序代码:
void delay__ms(void) //x,y位固定值,故不能接受参数
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=y;j>0;j--);
}
【Delay_Time=[(2y+3)x+5】