**BMP180的负温度的读取和显示**
在某个项目中用到了BMP180(TI的芯片,项目中是在某宝上买的模块,I2C总线方式读取)。具体的I2C总线方式读取数据的内容就不多说了,这种东西网上一大把,说多了没意思,之前的项目的硬件程序和传输协议里面都只是针对正温度来设计,在产品实际应用中发现有些使用地点的环境有零下的温度,但机子没有做零下温度的处理,所以不能正常显示零下温度。
刚开始我在网上查资料看BMP180有没有对零下温度的处理,网上几乎没有对这个所提及,我仔细地研究了一下BMP180的数据手册:
程序里面计算之后是一个long的数据格式来存取温度信息,但也没有明确说明正负温度是怎么表示的,我就大胆的猜想一下,就是一般负数的存取方式(原来负数的数据取反再加1)
大概是这样的:比如一个负15.5的温度数据
(1)原始数据:1000,0000,1001,1011
(2)取反: 1111,1111,0110,0100
(3)加1: 1111,1111,0110,0101(0xFF65)单片机存储的数据格式
上手载程序上验证一下吧:
s16 tmp = 0;
u16 crc = 0;
u8 ucTemperatureStr[7] = {0xEE,0xAA,CMD_TEMPERATURE};
tmp = -155;//温度测试数据
ucTemperatureStr[3] = tmp/10;
ucTemperatureStr[4] = tmp%10;
crc = CRC16(ucTemperatureStr+2,3);
ucTemperatureStr[5] =(u8)(crc>>8);
ucTemperatureStr[6] =(u8)(crc);
RS232_Se