找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4328|回复: 3
打印 上一主题 下一主题
收起左侧

问大家一个延时的问题

[复制链接]
跳转到指定楼层
楼主
ID:27390 发表于 2010-12-24 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我现在在搞DS18B20的程序但是出现了一个问题,不知道怎么样解决。希望大家帮忙,谢谢了。

问题如下:

#include <reg51.h>
#define  uint  unsigned  int
#define  uchar  unsigned  char
 unsigned int j,i;
void delay(unsigned int i)
 {
  while(i--);
   
  }
 void main()
 {
   P0=0;
   delay(1);//在这里的延时是25毫秒
   P0=1;
   delay(100);//按照上面的计算这里的延时应该是100X1=2500毫秒啊,但是实际这里在仿真的时候才是418毫秒
   P0=0;   //418毫秒是25毫秒的36倍啊??为什么不是1的100倍呢??
   }    //用的软件是Keil C51
              //AT89S51  晶振是12MHZ

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2010-12-24 23:40 | 只看该作者

因为delay(1);里面有call 指令 和ret指令也是需要时间的,还有执行delay(1);和delay(100);里面的跳转的次数也不一样,这些都是很简单的东西,看反汇编代码就一清二白了,

 

不能说delay(1);是25毫秒  那delay(100);就是100倍,最好是根据软件仿真得到真实的延时值详见:http://www.51hei.com/bbs/dpj-4711-1.html

回复

使用道具 举报

板凳
ID:4451 发表于 2010-12-26 16:38 | 只看该作者
楼上说得很有道理,类似问题我也遇到过。delay只能用来做一段延时,千万别指望用它来做时间的基准。
回复

使用道具 举报

地板
ID:27390 发表于 2010-12-26 21:08 | 只看该作者
谢谢了老师了,估计就像是你们说的那样不能是道理上的10倍或者100倍啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表