单片机晶振频率为12MHZ,请问下面的这个程序为什么能实现1ms的延时

void delay(unsigned int ms)
{
unsigned short i;
unsigned char j;
for(i=0;i<ms;i++)
{for(j=0;j<200;j++);for(j=0;j<105;j++);}
}

这个程序不一定能实现1ms延时,这种循环延时与单片机有关,不同的单片机是不一样的。
还与编译器有关,不同的编译器编译出来的结果是不一样的。
还与编译器的设置有关,比如代码优化方式设置,同一种编译器不同的设置方式也是不一样的。
还与程序执行的过程有关,比如程序在延时的过程中经常进中断,也会使延时不准确。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-13
逐条分析哦, 第四行,两个FOR 语句,相当于变量J 加一 重复了305次,每次重复一次,都要判断是否超过了条件,这样呢,就相当于使用了 单片机的 两个指令周期。
我们知道,一个指令周期 是 6和机器周期 ,由此,可以大概的 做到 延时,但具体延时的 长度 和精确性,就有第三行的 FOR 来确定。本回答被网友采纳
第2个回答  2013-01-28
一条c语言的语句大概执行一段时间(具体多长时间我就不知道了,可以查下资料),一共会执行多少次语句,就能算出延时多长时间
第3个回答  2013-01-27
你可以在51编译器里跑一下你的这段程序,看看是多少ms。
相似回答