示例
AD值: -2
valueRaw = 0xfffffe,处理后 valueRaw = 0x7ffffe
AD值: -1
valueRaw = 0xffffff,处理后 valueRaw = 0x7fffff
AD值: 0
valueRaw = 0x000000,处理后 valueRaw = 0x800000
AD值: +1
valueRaw = 0x000001,处理后 valueRaw = 0x800001
AD值: +2
valueRaw = 0x000002,处理后 valueRaw = 0x800002
以上5个数据组成连续的十进制数据是
-2 -1 0 1 2
8388606, 8388607, 8388608, 8388609, 838810
uint32_t valueRaw;
valueRaw = (uint32_t)_i2cPort->read() << 16; //MSB
valueRaw |= (uint32_t)_i2cPort->read() << 8; //MidSB
valueRaw |= (uint32_t)_i2cPort->read(); //LSB
if(valueRaw & 0x800000)
{
// 负数: 减去 0x800000
valueRaw &= 0x7fffff;
}
else
{
// 正数: 加上 0x800000
valueRaw |= 0x800000;
}