我正在查询一个ADXL362数字输出微机械加速度计的轴数据,它作为两个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数据表 (第26页)
Z轴数据寄存器

发布于 2018-07-18 17:34:00
你的第一行应该是你所需要的:
int16_t number;
number = (Z_data_H << 8) | Z_data_L;符号扩展名意味着您可以像读取16位有符号整数一样读取该值。该值永远不会超出12位整数的范围。重要的是,为了正确处理负值,必须保留这些位元。
发布于 2018-07-18 17:30:06
你只需要做:
signed short number;
number = Z_data_H << 8 | Z_data_L;8位与您已经计算出的较低位相结合的偏移正在正确地组合2字节。只要使用适当的数据大小,C代码就可以正确地重新计算12位数字的符号。
请注意,short不一定引用16位值,这取决于编译器和体系结构-因此,您可能希望尝试这样做。
https://stackoverflow.com/questions/51407372
复制相似问题