关于ds18b20的温度采集显示0解惑

2019-07-15 15:58发布

uint Read_temperature()
{
        uint temt;
        unsigned long int temperature = 0;
        uchar dat_l = 0,dat_h = 0;
         Init_da18b20();
        //************开始转换**************
         Writer_ds18b20(0xcc);//忽视r o m指令 后面跟44h可完成温度转换
         Writer_ds18b20(0x44);
         delay_ms(800);
         //**********读暂存数据************
         Init_da18b20();
         Writer_ds18b20(0xcc);
         Writer_ds18b20(0xbe);//一个从机只能跟一条读寄存器指令
         dat_l = Read_ds18b20();
         dat_h = Read_ds18b20();
         Init_da18b20();//***********读取暂存结束*************

         //temperature = (dat_h * 256 )+ dat_l;
           temperature = dat_h;
           temperature <<= 8;
           temperature += dat_l;
           temt =temperature * 0.0625;

   return temt; //temperature;
}
我的ds18b20的温度采集函数是这样的   这是最终版   一开始时候显示00.00 后来发现是声明的问题   一开始我只有 uint temt的反回值  没有temperature这个中间变量   返回值都为00.00  是uint 即unsigned int的范围不够  溢出 。还发现temperature = (dat_h * 256 )+ dat_l;这样显示的温度是实际温度的2倍   不能使用()也很奇怪  想不通

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。