我没插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;   
         
 
         
}  
 
 
 
求助 各位大佬 这是什么问题   
 |   
     
  
 |