Jsp*_*ake 2 c embedded bit-shift
在完成我的课程作业时,我遇到了一个从TMP102传感器读取温度的功能(仅需要测量正温度).
该函数首先使用I2C读取MSB和LSB.由于温度数据是12位且左对齐,因此函数如下进行:
temp = ( (MSB << 8) | LSB) >> 4
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这样做.有人可以帮我解释上面的代码行是如何与12位和左对齐的数据相关的?
小智 7
设v点温度值,p右边是填充位,然后就可以了
MSB = vvvvvvvv
LSB = vvvvpppp
---
MSB << 8 = vvvvvvvv 00000000
(MSB << 8) | LSB = vvvvvvvv vvvvpppp
((MSB << 8) | LSB) >> 4 = 0000vvvv vvvvvvvv
Run Code Online (Sandbox Code Playgroud)
在最后一行中,您将看到正确的表示形式为16位值(始终为高4位0).