首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C将两个8位寄存器读入ADXL362的12位值

用C将两个8位寄存器读入ADXL362的12位值
EN

Stack Overflow用户
提问于 2018-07-18 16:59:08
回答 2查看 572关注 0票数 1

我正在查询一个ADXL362数字输出微机械加速度计的轴数据,它作为两个8位寄存器,结合给出一个12位的值,我试图找出如何组合这些值。我从来不擅长按位操作,所以任何帮助都是非常感谢的。我可以想象是这样的:

代码语言:javascript
复制
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轴数据寄存器

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-18 17:34:00

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

代码语言:javascript
复制
int16_t number;
number = (Z_data_H << 8) | Z_data_L;

符号扩展名意味着您可以像读取16位有符号整数一样读取该值。该值永远不会超出12位整数的范围。重要的是,为了正确处理负值,必须保留这些位元。

票数 0
EN

Stack Overflow用户

发布于 2018-07-18 17:30:06

你只需要做:

代码语言:javascript
复制
signed short number;

number = Z_data_H << 8 | Z_data_L;

8位与您已经计算出的较低位相结合的偏移正在正确地组合2字节。只要使用适当的数据大小,C代码就可以正确地重新计算12位数字的符号。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51407372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档