关于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条回答
溺在海洋里
1楼-- · 2019-10-15 03:08
来俩不甜的 发表于 2016-10-29 20:20
tem是short型,左移8位那数据就在高8位

意思就是short型是16个位,tem左移8后,变成高八位,不移位就在低八位。
很感谢!
龙之谷
2楼-- · 2019-10-15 07:03
自己写的代码?代码有问题
溺在海洋里
3楼-- · 2019-10-15 11:44
 精彩回答 2  元偷偷看……
龙之谷
4楼-- · 2019-10-15 12:07
tem, temp没注意看,代码没问题
移位基础知识,补一下C语言
来俩不甜的
5楼-- · 2019-10-15 13:47
tem是short型,左移8位那数据就在高8位
溺在海洋里
6楼-- · 2019-10-15 16:17
龙之谷 发表于 2016-10-29 20:18
tem, temp没注意看,代码没问题
移位基础知识,补一下C语言

恩恩,C没打好基础,好好补补!

一周热门 更多>