我没插DS18B20 也显示59C,反正通电就是这个度数,然后插上传感器时,有的时候度数闪一下,这是什么情况?是我时序不对么?
程序如下:
void Init_Ds18b20(void) //DS18B20???send reset and initialization command
{
DQ = 1; //DQ??,??????
_nop_();
DQ = 0; //???????
Delayus(662); // 530us
// _nop_();
DQ = 1;
Delayus(91); //73us
Delayus(580);// 464us
DQ = 1;
}
void DS18B20_write(uchar dat)
{
uchar i;
for(i = 8; i > 0; i--)
{
DQ = 0;
_nop_();
DQ = dat & 0x01;
Delayus(91); //73us
DQ = 1;
dat >>= 1;
}
}
uchar DS18B20_data()
{
uchar i=0,dat=0;
for (i = 8; i > 0; i--)
{
DQ = 0; // ?????
dat >>= 1;
// dat >>= 1;
DQ = 1; // ?????
_nop_(); _nop_(); _nop_();
if(DQ)
{
dat |= 0x80;
}
Delayus(75);//60us
}
return dat;
}
uint read_temperature()
{
uchar a=0,b=0;
float tt = 0;
Init_Ds18b20();
DS18B20_write(0xcc); //??????????
DS18B20_write(0x44); //??????
// Delayms(100);
Init_Ds18b20();
DS18B20_write(0xcc); //??????????
DS18B20_write(0xbe); //???????
a = DS18B20_data(); //??8?
b = DS18B20_data(); //??8?
wendu=b;
wendu<<=8; //8
wendu=wendu|a;
tt=wendu*0.0625;
wendu= tt*10+0.5; //??10????????
return wendu;
}
求助 各位大佬 这是什么问题
|