单片机延时程序,延时时间计算 for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); 请高手

请高手看下,怎样计算出延时的时间。

void Delay_ms(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);

}
我结合了你的for循环软件延时来给你简单讲解一下,软件延时是单片机在执行一条空指令耗费的时间,当程序执行到Delay_ms();延时后,先执行M减一次for(m=20;m>0;m--) 接着再执行N减一次for(n=20;n>0;n--),最后是 for(s=248;s>0;s--);

这是一个嵌套语句

for(m=20;m>0;m--)
m每减去一次;
for(n=20;n>0;n--)
N要执行20次 n-到0为止
for(s=248;s>0;s--);
n每减去一次就执行一次 for(s=248;s>0;s--);

m减到0就退出循环,就在这段时间里耗费的时间称之为延时。

这个是按照时钟周期来计算的,
12M晶振: 仿真计算时间199665 199ms 不到200ms
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-03
C语言难以精确计算出时间,建议你用调试的方式来计算时间吧本回答被网友采纳
第2个回答  2012-12-03
这是for嵌套,总计数 20x20x248,根据你选的波特率算出单步所用的时间,延时时间=总计数*单步时间
相似回答