打印

51单片机,同样的延时,正负脉冲宽度为什么不一样?

[复制链接]
1399|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
btzm|  楼主 | 2023-10-21 19:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 btzm 于 2023-10-21 19:21 编辑

如图,89S51单片机。使用同样的延时,得到的正负脉冲宽度为什么明显不一样。软件仿真和真实硬件测试都一样。请教大家了。

c51.JPG (387.8 KB )

c51.JPG

使用特权

评论回复
沙发
btzm|  楼主 | 2023-10-22 05:25 | 只看该作者
问题解决,for语句后加一行i=0;即可。

使用特权

评论回复
评论
Unarty 2023-10-23 10:12 回复TA
能讲讲为什么要加个0吗? 
板凳
ayb_ice| | 2023-10-23 08:27 | 只看该作者
差距应该几乎看不出来的,有些不正常

使用特权

评论回复
地板
Unarty| | 2023-10-23 09:10 | 只看该作者
你把while(1) 前面的LED = 1;改为:LED=0; 试试,

使用特权

评论回复
评论
Unarty 2023-10-23 09:11 回复TA
还有就是,你如果想要同样的宽度为什么写两个同样 的代码,不合并呢?合并应该是一样宽的,while(1) 也是会占用几条命令周期的。 
5
zlf1208| | 2023-10-23 10:06 | 只看该作者
btzm 发表于 2023-10-22 05:25
问题解决,for语句后加一行i=0;即可。

为什么这样就解决了呢?程序不是瞎凑出来的,是设计出来的!凑结果并不能保证程序是正确的。

使用特权

评论回复
6
xch| | 2023-10-23 11:53 | 只看该作者
你这软件不是已经包含有 i=0?  for(i=0;.......).
不过啰嗦点
改成:
while(1)
{
LED= ~LED;
for(i=0;i<6200;i++);
}

使用特权

评论回复
7
Unarty| | 2023-10-23 17:56 | 只看该作者
差异的宽度就是,while(1) 占用了一个命令运算周期导致。

使用特权

评论回复
8
chineseboyzxy| | 2023-10-26 17:20 | 只看该作者
用汇编写。

使用特权

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

本版积分规则

13

主题

38

帖子

0

粉丝