//请高手们看看哪里错了,最后读出来的数值就只有255
#define uchar unsigned char ;
#define uint unsigned int ;
sbit DQ=P3^7;
//延时
void delay(uint times)
{
uchar n;
n=0;
while(n<times) n++;
return;
}
//复位
uchar Init_18b20()
{
bit flag1=0;
DQ=1;
delay(8);
DQ=0;
delay(85);//delay(85);
DQ=1;
delay(4);
flag1=DQ;
delay(200);
return flag1;
}
//读字节
uchar ReadOne_Char(void)
{
uchar i=0,dat=0;
for(i=0;i<8;i++)
{
DQ=1;
_nop_(); _nop_(); _nop_();
DQ=0;
dat>>=1;
DQ=1;
delay(1);
if(DQ)
dat|=0x80;
delay(3);
}
return (dat);
}
//写字节
void WriteOne_Char(uchar dat)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=0;
delay(1);
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
//读取温度
uchar ReadTemperature(void)
{
uchar TempL=0,TempH=0,temperature=0;
Init_18b20();
WriteOne_Char(0xcc);
WriteOne_Char(0x44);
delay(125);
Init_18b20();
WriteOne_Char(0xcc);
WriteOne_Char(0xbe);
TempL=ReadOne_Char();
TempH=ReadOne_Char();
temperature=((TempH*256)+TempL)>>4;
delay(200);
return(temperature);
}