差点儿就帅了 发表于 2013-2-1 16:20:07

求助51延时问题

          

第一个程序
#include <reg52.h>
sbit led=P2^0;
void delay(void)
{unsigned int i;

       for(i=0;i<32767;i++)
;

}

void main()
{
unsigned int i;
while(1)
{
led=0;
   i=0;
           delay();
led=1;
i=0;
           delay();
   }



}
第二个程序
#include <reg52.h>
sbit led=P2^0;
void main()
{
unsigned int i;
while(1)
{
led=0;
   i=0;
    for(i=0;i<32767;i++)
;
led=1;
i=0;
    for(i=0;i<32767;i++)
;
   }



}
上面两个程序的延时,为什么第二个程序的两个for语句延时差很多,达到零点几秒。再就是为什么第二个程序的第一个for语句如果把32767改为50000,在单步执行的时候直接一次性执行完,而第二个for语句可以一步一步慢慢执行?请大神指教,谢谢。

差点儿就帅了 发表于 2013-2-1 16:21:42

晶振11.0592Mhz

墨非 发表于 2013-2-1 17:00:24

50000 成负数了。。。

差点儿就帅了 发表于 2013-2-1 17:10:57

墨非 发表于 2013-2-1 17:00 static/image/common/back.gif
50000 成负数了。。。

可是unsigned int范围不是0-65536吗?

yklstudent 发表于 2013-2-2 07:53:48

在调试下 看看生成的汇编代码
估计你就会知道是有差别的

hamipeter 发表于 2013-2-2 09:41:35

要想延时精确,建议还是使用定时器!

cooper_ 发表于 2013-2-2 15:39:11

不是吧,我按你的第二个程序试了,没问题啊

差点儿就帅了 发表于 2013-2-17 13:43:35

yklstudent 发表于 2013-2-2 07:53 static/image/common/back.gif
在调试下 看看生成的汇编代码
估计你就会知道是有差别的

xiexie ~我再试试看

差点儿就帅了 发表于 2013-2-17 13:44:05

hamipeter 发表于 2013-2-2 09:41 static/image/common/back.gif
要想延时精确,建议还是使用定时器!

嗯,好的。谢谢了、

差点儿就帅了 发表于 2013-2-17 13:44:37

cooper_ 发表于 2013-2-2 15:39 static/image/common/back.gif
不是吧,我按你的第二个程序试了,没问题啊

哦,我再仿真一下试试。3Q
页: [1]
查看完整版本: 求助51延时问题