打印

各位帮我看看这两个延时程序有什么不一样

[复制链接]
1846|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuchunke|  楼主 | 2008-4-26 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
/*延时程序
由Delay 参数确定延迟时间
*/
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ for(;;)
{ P10=!P10; //取反P1.0 引脚
mDelay(1000);
}
}



#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
/*延时程序
由Delay 参数确定延迟时间
*/
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ for(;;)
{ P10=!P10; //取反P1.0 引脚
mDelay(1000);
}
}
为什么在2051单片机上跑的大相径庭。
上一个程序延时时间非常短
后一个延时时间很明显

相关帖子

沙发
dld2| | 2008-4-26 11:15 | 只看该作者

是不是和优化有关

非常短的那个,for循环被优化掉了。

使用特权

评论回复
板凳
xuchunke|  楼主 | 2008-4-26 11:26 | 只看该作者

不太明白

问dld2 一下什么叫被优化

使用特权

评论回复
地板
开芯行者| | 2008-4-26 11:42 | 只看该作者

没看出来

楼主没贴错吧,还是我眼神不好,看了半天没看出区别啊,晕呀.

使用特权

评论回复
5
dld2| | 2008-4-26 11:54 | 只看该作者

编译环境有优化选项

你可以在菜单里找一找

使用特权

评论回复
6
xuchunke|  楼主 | 2008-4-26 16:34 | 只看该作者

调试的一点心得

这两个延时程序有本质的区别
我看了一下它们各自的汇编代码,整个第一层循环汇编完后都是21条,而在单片机中延时靠的就是指令时间来延时,这就是说第一个延时程序是跑了1000次循环,而第二个是跑了124次,而每次循环所用的时间都没有太大差别(主要取决于汇编的指令类型和条数)从而就导致了这两个延时程序有很大的差别。

使用特权

评论回复
7
grady1125| | 2008-4-26 20:16 | 只看该作者

是不是老了啊

看了10遍都没看出又哪个字母不一样

使用特权

评论回复
8
狂崽| | 2008-4-26 21:59 | 只看该作者

晕,眼花了,都一样的啊

使用特权

评论回复
9
jerkoh| | 2008-4-26 22:04 | 只看该作者

re

我觉得楼主发的是大家来找茬
哈哈

使用特权

评论回复
10
xuchunke|  楼主 | 2008-4-27 09:54 | 只看该作者

发错了

发错了
两个程序如下
给大家添麻烦了

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
/*延时程序
由Delay 参数确定延迟时间
*/
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ for(;;)
{ P10=!P10; //取反P1.0 引脚
mDelay(1000);
}
}

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit P1_0=P1^0;
void mDelay(unsigned int Delay)
{ unsigned int i;
for(i=0;i<124;i++)
{for(;Delay>0;Delay--){;}
}
}
void main ()
{for(;;)
{P1_0=!P1_0;
mDelay(1000);}}

使用特权

评论回复
11
walnutcy| | 2008-4-27 10:46 | 只看该作者

晕,我昨晚就开始看这个帖子,当时没好意思说,

还以为是自己困了,

你这两个当然有本质的不同啦,,

for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
执行下来,比较的次数为mDelay(1000): 1000*124

for(i=0;i<124;i++)
{for(;Delay>0;Delay--){;}
}
}
这个下来才多少啊???  124+1000

逛晕...................

使用特权

评论回复
12
walnutcy| | 2008-4-27 10:49 | 只看该作者

是狂晕,,,又多点了一下键盘

使用特权

评论回复
13
gyt| | 2008-4-27 15:40 | 只看该作者

很有意思

使用特权

评论回复
14
grady1125| | 2008-4-27 22:57 | 只看该作者

第二个没有重新赋值

void mDelay(unsigned int Delay)
{ unsigned int i;
for(i=0;i<124;i++)
{for(;Delay>0;Delay--){;}
}
}

应该是:
void mDelay(unsigned int Delay)

  unsigned int i;
  unsigned int temp;
for(i=0;i<124;i++)
{
   temp=Delay;
   for(;temp>0;temp--){;}
}
}

使用特权

评论回复
15
狂崽| | 2008-4-27 23:34 | 只看该作者

同意11L和14L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

1

粉丝