单片机/MCUwilliam hill官网
直播中

djmac

8年用户 80经验值
擅长:可编程逻辑 接口/总线/驱动 处理器/DSP c51
私信 关注
[问答]

温度传感器

这段关于温度传感器的代码不太懂?哪位大侠可以帮忙解释一下?(关于温度传感器读取温度部分)
int Ds18b20ReadTemp()
{
        int temp = 0;
        uchar tmh, tml;
        Ds18b20ChangTemp();                                 //先写入转换命令
        Ds18b20ReadTempCom();                        //然后等待转换完后发送读取温度命令
        tml = Ds18b20ReadByte();                //读取温度值共16位,先读低字节
        tmh = Ds18b20ReadByte();                //再读高字节
        temp = tmh;
        temp <<= 8;
        temp |= tml;
        return temp;
}


已退回3积分

回帖(8)

chenwei6991627

2016-6-20 09:28:24
到底是哪边不懂呢》
举报

曲终人散

2016-6-21 09:54:27
这个是在进行数据整合,因为读取顺序么得原因才这样处理的,可以看看数据手册,要是对你有帮助别忘了。给积分哟
举报

环形使者_绝

2016-6-21 11:13:10
首先 Ds18b20ChangTemp();  是另外一个函数  里面应该包括先初始化  然后发送0x55还是啥的指令,这些都是温度传感器检测温度必须走的过程。
Ds18b20ReadTempCom();    这个也是先初始化 ,然后发送0x4c还是啥的。忘记具体指令了。。
之后温度传感器会发送 一个16位的 温度值  先发送低8位 后发送高8位  
tml = Ds18b20ReadByte();                //读取温度值共16位,先读低字节
tmh = Ds18b20ReadByte();              这两个就是了
然后将高八位的tmh左移8位 然后并上低八位 就相当于温度值的16位都出来了 然后返回给其他函数做处理  注意 高八位的 4-7位是符号位  0000表示正的温度 1111 表示负的温度
负的温度的话 就需要去补码  
去百度看看资料  很多的  其实不难的。
因为刚做了一个DS18B20的程序,希望能帮到你  
举报

liu和風

2016-6-24 16:41:24
百度一下,百度百科就說,很具體,學習不要一有問題就到處部,先自己找找答案
举报

djmac

2016-6-24 19:38:17
引用: chenwei6991627 发表于 2016-6-20 09:28
到底是哪边不懂呢》

temp = tmh;
        temp <<= 8;
        temp |= tml;
这句话不懂,为什么要temp左移八位
举报

djmac

2016-6-24 20:01:23
引用: 环形使者_绝 发表于 2016-6-21 11:13
首先 Ds18b20ChangTemp();  是另外一个函数  里面应该包括先初始化  然后发送0x55还是啥的指令,这些都是温度传感器检测温度必须走的过程。
Ds18b20ReadTempCom();    这个也是先初始化 ,然后发送0x4c还是啥的。忘记具体指令了。。
之后温度传感器会发送 一个16位的 温度值  先发送低8位 后发送高8位  

然后并上低八位 ? 并运算是什么意思 和或运算一样么?
举报

米兰霸气

2016-6-24 20:48:41
就是或运算啊,temp是一个16位的数,最开始低8位是tmh,然后左移8位,把tmh放在temp的高8位,然后低8位和tml进行或,由于0和任何数或,是其本身,所以低8位就变成tml了
举报

djmac

2016-6-24 21:12:02
引用: 米兰霸气 发表于 2016-6-24 20:48
就是或运算啊,temp是一个16位的数,最开始低8位是tmh,然后左移8位,把tmh放在temp的高8位,然后低8位和tml进行或,由于0和任何数或,是其本身,所以低8位就变成tml了

哦哦 明白了 thanks
举报

更多回帖

发帖
×
20
完善资料,
赚取积分