作业帮 > 数学 > 作业

ds18b20温度计算

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/07/14 04:37:20
ds18b20温度计算
书上程序:
(T是读取的16位温度)
T=T*0.625
a[0]=T/1000 (百位)
a[1]=T/100%10(十位)
a[2]=T/10%10 (个位)
a[3]=T%10
T不是2进制数么,怎么除以1000,比如125度为0000 0111 1101 0000,它怎么除1000啊?
T=T*0.625 书上说是保留1位小数,扩大10倍 .真心不懂
这个要看程序是怎么读温度的,用的应该是C语言吧?T应该是声明为整型或者长整型数据,也有可能是浮点型,读的时候应该是每读一位数据一些移位、或之类的运算.所以T就是读出来的数值的10进制表示.DS18B20的温度是用12位表示的,最高位表示正负.但一般8位的单片机只能读两次,共16位,也就是T中有4位是多余的.怎么从读到的数值中得到真实的温度值,你可以尝试一下位运算.
DS18B20的分辨率是0.0625,读到的温度数值要乘以0.0625才能得到真实的温度值.但你的百位、十位、个位都是整数,你计算的过程中必有强制数据类型转换.所以要保留一位小数就要乘以10,也就是把小数点后一位的数值提到个位中,这样在计算中才不至于把小数点后一位的数值丢掉.相应地在计算中也要把分子放大10倍,所以得到百位数要除以1000.
再问: 书中T被定义为uint 意思也就是当16位2进制赋值T时,T最后得到的是10进制的数?
再答: uint,也是一样的,是一个10进制数。你好好地了解一下C语言的数据类型