打印

用的STC15W404AS 控制DS18B20在三位数码管显示温度,一直显示59C 求助

[复制链接]
1404|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
b435761040|  楼主 | 2017-10-10 02:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我没插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;  
        

        
}



求助 各位大佬 这是什么问题  

相关帖子

沙发
dirtwillfly| | 2017-10-10 09:00 | 只看该作者
觉还是DS18B20 的驱动有问题,建议观察一下时序

使用特权

评论回复
板凳
xuyaqi| | 2017-10-10 09:18 | 只看该作者
应该仿真试一下,读DS18B20是多少,显示是多少,没有仿真器串口输出也可以。

使用特权

评论回复
地板
ningling_21| | 2017-10-10 11:01 | 只看该作者
用示波器观察一下18B20的数据波形就知道了

使用特权

评论回复
5
b435761040|  楼主 | 2017-10-10 16:25 | 只看该作者
xuyaqi 发表于 2017-10-10 09:18
应该仿真试一下,读DS18B20是多少,显示是多少,没有仿真器串口输出也可以。 ...

我没插传感器 也显示59,插上也是,,用串口读取这个温度函数,全是FE,这是啥情况

使用特权

评论回复
6
xuyaqi| | 2017-10-11 09:36 | 只看该作者
b435761040 发表于 2017-10-10 16:25
我没插传感器 也显示59,插上也是,,用串口读取这个温度函数,全是FE,这是啥情况 ...

“用串口读取这个温度函数”,串口怎么读?不明白。

使用特权

评论回复
7
datouyuan| | 2017-10-11 13:45 | 只看该作者
楼主这样问问题,没有谁能真正帮上你。

你要习惯自己排查定位问题。要把一个复杂的问题细分成几个简单的,容易测试的问题。

数码显示驱动、DS18B20驱动、这2块对接部分。

使用特权

评论回复
8
瞎折腾| | 2017-10-11 18:17 | 只看该作者
你先弄好显示一块,把读取程序最后变量改成ff,看看显示什么,能正常显示了再调18b20,注意你的延时程序,因为18b20对时序要求严格,还有就是你用的是1T的时钟,这个是仿真不出来的,你只能看汇编或者直接套用下载软件里的延时程序,那样应该好弄一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝