Temperature = ((Temp2<<8 ) | Temp1 ) * 0.0625;求这段代码的解析,懂的人帮下忙

单片机二进制转十进制

Temp2 温度高8位读值 (CHAR)
Temp1 温度低8位读值 (CHAR)

(Temp2<<8 ) 高8位移动到16BITS的高8位

0000 0000 XXXX XXXX
XXXX XXXX 0000 0000

((Temp2<<8 ) | Temp1 ) 合并低8位到温度读值

XXXX XXXX 0000 0000

XXXX XXXX YYYY YYYY

此时温度的ADC/或者数字量就得到

((Temp2<<8 ) | Temp1 ) * 0.0625

将数字量转换为(^C)为单位的模拟量。追问

为什么一个二进制数乘以0.0625就得到了一个十进制数啊,而且二进制数怎么可以与十进制相乘啊

追答

0.0625,十进制数。这种说法是不严谨的。

单片机(任意计算机)只能对二进制数进行运算,0.0625虽然写成了十进制的形式,但变成机器代码的时候,还是要“转化”为相应的二进制形式。

所以,((Temp2<<8 ) | Temp1 )与0.0625会让你以为是不同进制的原因,就是前者是直接在机器层面对数据的操作(移位、合并,这些都是非常底层的操作),而后者直接以一种对人友好的形式表达(实际上可能是010101011001000之类的数据)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-20
把Temp2的值左移8位,然后或Temp1,得到的数再乘以0.0625,将值赋给Temperature,具体的位操作效果要看Temp1和Temp2的值本回答被提问者采纳
相似回答
大家正在搜