求助51延时问题

2020-01-30 14:16发布

          

第一个程序
#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语句可以一步一步慢慢执行?请大神指教,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
差点儿就帅了
1楼-- · 2020-01-30 18:53
晶振11.0592Mhz
墨非
2楼-- · 2020-01-31 00:14
50000 成负数了。。。
差点儿就帅了
3楼-- · 2020-01-31 06:09
墨非 发表于 2013-2-1 17:00
50000 成负数了。。。

可是unsigned int范围不是0-65536吗?
yklstudent
4楼-- · 2020-01-31 11:14
 精彩回答 2  元偷偷看……
hamipeter
5楼-- · 2020-01-31 12:02
要想延时精确,建议还是使用定时器!
cooper_
6楼-- · 2020-01-31 17:57
不是吧,我按你的第二个程序试了,没问题啊

一周热门 更多>