延时函数没问题,debug里调的,都不带形参,形参代了不是线性时间增加。我看有些人的延时函数里有形参,这样延时时间根本就不会准确嘛。
我读出来的温度值全是ff,测试ds18b20有响应,不知道什么问题。
//////////////////////时钟晶振为11.0592计算的//////////////////////
#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit dat_18b20=P2^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar a[5]={1};
uchar shi,ge,xiao;
void delay10us()//实际为10.9us
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(uint z)
{
while(z--);
}
void delay100us()//
{
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
}
void delay60us()//实际为67us
{
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
}
bit ack_18b20()//检查是否存在:返回0,存在
{
bit x=1;
EA=0;
dat_18b20=0;
delay100us();
delay100us();
delay100us();
delay100us();
delay100us();//延时500us
dat_18b20=1;
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();
delay10us();//延时实际63.6us
x=dat_18b20;
while(!dat_18b20);
EA=1;
return x;
}
|