求解一c语言单片机延时程序


unsigned char i;
do
{
for(i=0;i<60;i++);

}while(--cnt)

为什么是延时500纳秒

当cnt为1时

12M的晶振的机器周期是1/12M*12,就是1us

其次不同的单片机执行语句的机器周期也不一定一样(比如:Atmel 51系列及大多数51的一个机器周期是12个时钟周期,华邦的只需要4个时钟周期)。不过大体来说,一条for循环大概8个机器周期,也就是8us。

所以for(i=0;i<60;i++);,循环执行60个for循环,大概就是60*8=480us。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-01
补充楼上所说,晶振用12M的话,有人做过时间检测(时序仿真?),一条 for(...)语句执行一次 所用时间大概是8.33us左右,所以说呢,执行60次的时间就是8.33*60 =499.8,跟500us相差不多了。
所以记住这个时间:8.33us,对以后做延时有帮助。
希望帮到你了。
第2个回答  2011-12-01
循环次数*每次循环所用时钟周期*(晶振/12),也不是绝对的,建议先了解一下单片机的文档,那里说的很具体。
第3个回答  2011-12-01
void delay(chuar z)
{
while(--z);
}
相似回答