关于KeilC51单片机延时的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 06:58:41
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{
mDelay(500);
}
请问通过上面的循环怎么就能实现500ms的延时,124是如何确定的,谢谢

编译后可以通过KEIL 中的DEBUG查看些段程序所对应的汇编代码...
再概据汇编代码计算出所用周期..
但一般是采用调试的办法..
比如先定时,1MS
用FOR后,先写个数值随便写个数值..用DEBUG调试,运行完这个1MS的程序,用时实际为多少..在一次次的修改中接近1MS..
:)

可以倒过去推算:

124个指令周期是1毫秒

CPU的主频应该就是1/124ms = 8MHz

for(i=0;i<124;i++)
{;}
执行一次循环就一个指令吗?
看代码的意思就是
for(i=0;i<124;i++)
{;}
可以延迟1ms,可以根据CPU的主频估计出需要循环的大概次数,再使用示波器测量波形(可以用一个空管脚拉高拉底)来调整循环的次数,使其精确于1ms