问个C51单片机延时问题

来源:百度知道 编辑:UC知道 时间:2024/05/03 07:03:25
void delay1s(void)

{

unsigned char i,j,k;

for(k=100;k>0;k--)

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

我是个单片机初学都,上面写的是个延时函数,我弄不明白是为什么不写成:

void delay1s(void)

{ unsigned int a;
for(a=368;a<0;a--);
}
这样不是更省事吗?

以上写法三个循环是嵌套的关系,延时时间近似是100*20*248*2us=1s左右;而你的只走了368*2us=736us左右,怎么能一样呢?

以上写法延时时间比你的更长它100*20*248趟循环走了,而你的只走了368趟

可以写成你那种形式,只不过运行时间略有差异

他的程序用了3层嵌套,变量全部用char,他的函数周期4+(100*2+1)+(20*2+1)*100+(248*2+1)*20*100等于998305周期,如果用12M晶振就是998.3毫秒。而你用的变量是int,100+20+248是错误的,就算你用100*20*248用变量long最后延时时间远比1s长。这些是通过汇编代码算出来的不是想当然想什么就什么。如果懒得算就用定时器简单些。

他的程序用了3层嵌套,而你的这个就只有一层空循环。