关于ds18b20的函数问题,求解惑!!!

2019-10-14 22:02发布

代码如下,在获取高八位赋值给TH后,又执行左移8位,这样高八位不就被清零了吗?这还怎么计算温度啊?

//从DS18B20中得到温度
short DS18B20_Get_Temp(void)
{
    u8 temp;
    u8 TL,TH;
        short tem;
    DS18B20_Start ();                          // ds1820 start convert
    DS18B20_Rst();
    DS18B20_Check();         
    DS18B20_Write_Byte(0xcc);        // skip rom
    DS18B20_Write_Byte(0xbe);        // convert            
    TL=DS18B20_Read_Byte();         // LSB   
    TH=DS18B20_Read_Byte();         // MSB  
                      
    if(TH>7)
    {
        TH=~TH;
        TL=~TL;
        temp=0;                                        //
    }else temp=1;                                //          
    tem=TH;                                         //高八位赋值给tem
    tem<<=8;                                    //左移后tem全为0,高八位的值存哪去了???求指点啊
    tem+=TL;                                        //
    tem=(float)tem*0.625;                //
        if(temp)return tem;                 //
        else return -tem;   
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
cxc
1楼-- · 2019-10-15 20:19
当TH>7时,为什么TH、TL取反后不用加一?
溺在海洋里
2楼-- · 2019-10-16 01:45
 精彩回答 2  元偷偷看……

一周热门 更多>