标题: 问大家一个延时的问题 [打印本页]

作者: 再见小时候    时间: 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


作者: admin    时间: 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


作者: 初哥    时间: 2010-12-26 16:38
楼上说得很有道理,类似问题我也遇到过。delay只能用来做一段延时,千万别指望用它来做时间的基准。
作者: 再见小时候    时间: 2010-12-26 21:08
谢谢了老师了,估计就像是你们说的那样不能是道理上的10倍或者100倍啊!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1