在 C 中将两个 8 位寄存器读入 ADXL362 的 12 位值

Reading two 8 bit registers into 12 bit value of an ADXL362 in C

我正在查询 ADXL362 数字输出 MEMS 加速度计 的轴数据,它作为两个 8 位寄存器保存,它们结合起来给出 12 位值,我正在尝试弄清楚如何组合这些值。我从来都不擅长按位操作,因此将不胜感激任何帮助。我会想象它是这样的:

number = Z_data_H << 8 | Z_data_L;
number  = (number & ~(1<<13)) | (0<<13);
number  = (number & ~(1<<14)) | (0<<14);
number  = (number & ~(1<<15)) | (0<<15);
number  = (number & ~(1<<16)) | (0<<16);

ADXL362 data sheet(第 26 页)

Z轴数据寄存器

您只需要做:

signed short number;

number = Z_data_H << 8 | Z_data_L;

左移8位结合你已经有的低位 已经弄清楚正确组合了 2 个字节。只需使用适当的数据大小即可让 C 代码正确识别 12 位数字的符号。

请注意,short 不一定指 16 位值,具体取决于您的编译器和体系结构 - 因此,您可能想尝试这样做。

你的第一行应该是你需要的:

int16_t number;
number = (Z_data_H << 8) | Z_data_L;

符号扩展位意味着您可以像读取 16 位带符号整数一样读取该值。 value 永远不会超出 12 位整数的范围。为了正确处理负值,请务必保持这些位不变。