我将MCP3021用于环境光传感器。我在读取时成功获取了字节,但无法正确处理它们。我正在使用MPLABX作为我的IDE。

我的代码如下,

UINT32 res, val, upper, lower;
UINT8  i2cbyte[10];  // I2C values get stored in this one...

// example values : i2cbyte[0]=0x0e, i2cbyte[1]=0x32
upper = i2cbyte[0];
lower = i2cbyte[1];

val = ( upper << 6) + (lower >> 2);
//after this value is: upper = 0x00000380, lower = 0x01000032 & val is same as lower


不知道为什么变量Lower具有一个01.有时值为0x00cccc32。

res = upper + lower;  // res = 0x0000320E
res = (3.3/1024) * val;


有人可以帮我弄这个吗?

最佳答案

您如何检查这些值? –一些程序员
  
  在调试器中。


您不能将调试器显示的值视为已授予,因为变量只能采用abstract machine中出现的值。 (优化的C编译器可能会对代码进行各种重新排列,包括将寄存器不需要的部分用于其他目的。)您只能依靠observable behavior

也就是说,您的程序(实际上未显示)也可能确实覆盖了部分变量,例如e。 G。通过在读取数据时溢出i2cbyte[10]

07-24 09:46
查看更多