单片机,请教朋友们一个DS18b20传感器负温度的问题.,.

当温度为零下时, 传感器里两个字节的温度数据为补码。
请问:为了获得正确得温度绝对值, 整数部分与小数部分是不是要先分开 然后各自取补码? 还是两个字节不动符号位,其余的一起取补码?
比如-0.5℃, 两个字节里放的二进制数据是什么样得?

希望知道的朋友帮忙说下,以前没弄过负数以及负小数。百度找了好久也没有关于这个的。 先谢谢大家了。

第1个回答  2014-12-17
直接把取得的两个字节数据赋给int型的变量,然后乘以0.0625得到的就是带有符号的温度值,然后判断温度值是否小于0,如果小于0那么就用0减去这个int型数据 得到的就是正数追问

我主要是想知道 当温度为负数且存在小数时, 是要把整数部分与小数部分分别拿出来取补码还是一起取了补码再拆出来。
看了你跟另外一个仁兄的说法, 基本肯定是一起取补码后再分别拆成小数与整数了。

你这个办法说得也很不错,0-x=0+(-x)。而在计算机里-x又是补码形式存在的,实际上就是0+x的补码=x的补码, 太犀利了。
感谢, 宿舍里得不到负温度,没法验证。

追答

可以用仿真验证

第2个回答  2014-12-17
很简单了
int data = (TempH<<8) |TempL;
data = (data&0xF800)?data:(data^0xffff+1);
double ans = data/16;追问

有几个疑问,如果您看到,麻烦解答一下。
1,按您的程序来看,取补码整数与小数部分是一起运算的,也就是说不能先把整数部分拆出来取补码,再把小数部分拆出来取补码。 对吗?
2,TempH您是定义成整型的,对吗?
3,ans是整数部分了,对吗?如果是,为什么还要定义成double型?

再次感谢。

追答

1、TempH定义成uchar,定义成int也是可以的。

2、小数和整数一起取补运算
3、最后一个写错了,应该写成 double ans = data/16.0;

追问

你是用的32位单片机吗?
我用51 有问题。

追答

问题是什么?

本回答被网友采纳

单片机,请教朋友们一个DS18b20传感器负温度的问题.,.
直接把取得的两个字节数据赋给int型的变量,然后乘以0.0625得到的就是带有符号的温度值,然后判断温度值是否小于0,如果小于0那么就用0减去这个int型数据 得到的就是正数

求大神指导我用DS18B20传感器是对负温度判断时,为什么还要对低8位...
这是12位转化后得到的12位数据,存储在18B20的两个8bit的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测得到的数值乘0.0625即可得到实际温度;如果温度小于0,这5位位1,测得的数值需要取反加1再乘以0.0625即可得到实际温度。例如+125℃的数字输出为07D0H,+25....

单片机读DS18B20温度负值补码问题
Init_DS18B20();WriteOneChar(0xCC); \/\/跳过读序号列号的操作 WriteOneChar(0xBE); \/\/读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar(); \/\/低8位 b=ReadOneChar(); \/\/高8位 t=b;t<<=8;t=t|a;if(t>=2048)\/\/最高位为一说明是个负温 { t^=0xffff;di...

ds18b20 单片机测温 干扰疑惑 谢谢
要想使DS18B20进行精确的温度转换,I\/O线必须保证在温度转换期间提供足够的能量,由 于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I\/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的 能量,会造成无法转换温度或温度误差极大。因此,这种电路只适应于单一温度传感器测温...

单片机的温度传感器DS18B20测出来的温度可靠么?它测得的温度比我的酒 ...
DS18B20是经过标定的传感器,基本误差还是很小的。可以用体温计对比一下,体温计还是比较准确的。酒精温度计和指针温度计从原理上讲,都很难做到精确和线性。相比而言还是DS18B20比较准确。

单片机ds18b20温度转换问题
2:高字节的前5位若为“0”,则将数据乘以0.0625;即 [t=(D*0.0625)].3:高字节的前5位若为“1”,则将数据先取反,再加一,再乘以0.0625;即 【t=[(~D)+1]*0.0625]】温度是-55~+125 对应的值是 :(-55>>FF92)(-0.5>>FFFF)(0>>0000)(0.5>>0001)(125>>00FA)...

ds18b20 单片机温度检测 疑问 谢谢
你好 根据我的经验,18b20不是为工业环境下而设计的,更多的是用在普通室内环境,切温度范围也较窄,其结构为温度探头加大规模集成电路,根据你的描述应该是干扰导致18b20 ”死机”。较好的方案是用PT100之类的用模拟信号传输,在进行AD处理。对于你的现状,有两个方法,取其一或同时使用;1、将18b20...

单片机DS18B20问题
答:DS18B20的温度数据的数据为一个16位二进制数。高5位为判断正负位(高5位为1时温度为负、高5位为0时温度为正),对数据处理的方法,由于负数的数据在存储的时候是以补码的形式存储的,所以在显示的时候补码应该相应的转换为原码。还有什么疑问?可以追问~上面的希望对你有帮助~...

由18B20和单片机构成的数字温度计,精度如何提高?测量范围怎么扩大...
1、ds18b20本身的精度,可以从硬件下手。因为传感器有贵的有便宜的,有不同的量程的,不同精度的,当然价格也不同 2、可以从软件下手, 传感器之所以会有误差,精度不高。 主要原因是硬件的温度漂移,零点漂移等造成的。 我们可以通过长期的观察,制作出规则表来尽量的补偿误差。 高端一点的可以引进...

DS18B20 温度传感器实现
获取温度的操作:首先,单片机控制器向DS18B20发送复位脉冲信号,等待响应。若无响应,继续发送复位脉冲。接着发送匹配的ROM指令,然后发送启动温度转换指令。转换结果保存在高速RAM中,最后读取温度。温度传感器显示示例一:代码结合官方驱动文件,示例展示了温度值的整数显示,但比赛时建议采用不同策略。获取温度...

相似回答