📄 for()循环精确定时.txt
字号:
★其实用for()循环就可以实验C51精确定时没有必要用while()
有时候for()比while()好,但是又有时候相反(*^_^*)
只可惜不能传递参数!!!
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
▲实验记录:
i=5,j=132,k=150
0.000 389 00
0.200 391 00 0.200 002 00
(1+1)+[(2*150+1+2)*132+1+2]*5+2+1+2=200 002 us
▲产生的汇编代码为:
; FUNCTION delay (BEGIN)
;---- Variable 'i' assigned to Register 'R7' ----
0000 7F05 MOV R7,#05H 1'
0002 ?C0001:
;---- Variable 'j' assigned to Register 'R6' ----
0002 7E84 MOV R6,#084H 1'
0004 ?C0004:
;---- Variable 'k' assigned to Register 'R5' ----
0004 7D96 MOV R5,#096H 1'
0006 ?C0007:
0006 DDFE DJNZ R5,?C0007 2'
0008 ?C0006:
0008 DEFA DJNZ R6,?C0004 2'
000A ?C0003:
000A DFF6 DJNZ R7,?C0001 2'
000C ?C0010:
000C 22 RET 2'
; FUNCTION delay (END)
▲延迟时间计算:
Delay_Time=[(2k+1+2)*j+1+2]*i+2+1+2
即:
【Delay_Time=[(2k+3)*j+3]*i+5】
▲程序代码:
void delay__ms(void) //x,y,z位固定值,故不能接受参数
{
unsigned char i,j,k;
for(i=x;i>0;i--)
for(j=y;j>0;j--)
for(k=z;k>0;k--);
}
【Delay_Time=[(2z+3)*y+3]*x+5】
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -