如果数据左对齐,读取 MSB 和 LSB
Reading MSB and LSB if data is left-justified
在完成我的课程作业时,我遇到了一个从 TMP102 sensor 读取温度的函数(只需要测量正温度)。
该函数首先使用 I2C 读取 MSB 和 LSB。由于温度数据为12位且左对齐,函数执行如下:
temp = ( (MSB << 8) | LSB) >> 4
我不明白为什么要这样做。有人可以帮我解释一下上面的代码行与 12 位和左对齐的数据有何关系?
设v
为温度值的一位,p
为右侧的填充位,则
MSB = vvvvvvvv
LSB = vvvvpppp
---
MSB << 8 = vvvvvvvv 00000000
(MSB << 8) | LSB = vvvvvvvv vvvvpppp
((MSB << 8) | LSB) >> 4 = 0000vvvv vvvvvvvv
在最后一行中,您看到正确的表示形式是 16 位值(高 4 位始终 0
)。
在完成我的课程作业时,我遇到了一个从 TMP102 sensor 读取温度的函数(只需要测量正温度)。
该函数首先使用 I2C 读取 MSB 和 LSB。由于温度数据为12位且左对齐,函数执行如下:
temp = ( (MSB << 8) | LSB) >> 4
我不明白为什么要这样做。有人可以帮我解释一下上面的代码行与 12 位和左对齐的数据有何关系?
设v
为温度值的一位,p
为右侧的填充位,则
MSB = vvvvvvvv
LSB = vvvvpppp
---
MSB << 8 = vvvvvvvv 00000000
(MSB << 8) | LSB = vvvvvvvv vvvvpppp
((MSB << 8) | LSB) >> 4 = 0000vvvv vvvvvvvv
在最后一行中,您看到正确的表示形式是 16 位值(高 4 位始终 0
)。