我现在在搞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
因为delay(1);里面有call 指令 和ret指令也是需要时间的,还有执行delay(1);和delay(100);里面的跳转的次数也不一样,这些都是很简单的东西,看反汇编代码就一清二白了,
不能说delay(1);是25毫秒 那delay(100);就是100倍,最好是根据软件仿真得到真实的延时值详见:http://www.51hei.com/bbs/dpj-4711-1.html
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |