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

标签 c bit-manipulation byte bitwise-operators bit

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

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轴数据寄存器 Z axis data register

最佳答案

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

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

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

关于c - 在 C 中将两个 8 位寄存器读入 ADXL362 的 12 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407372/

相关文章:

cs50x pset4 恢复 : Recovers 50 JPEGS, 但图像的一半或更少

更改寄存器中的多个位

c++ - 位数 : preprocessor magic vs modern C++

c++ - __int128 的位操作

python - Python 2.6 和 3 中的字节与字节数组

ios - NSString 到 byte Array,操作它,以及 byte Array 到 NSString

c - 将指针传递给函数指针

c - 我正在尝试理解 K&R 的练习 1-21

go - 在Golang中将字节0附加到字节数组末尾的最佳方法

c - 物理载波监听返回的数据存储在哪里?