首页 资讯 应用 高压 设计 行业 低压 电路图 关于

单片机

旗下栏目: PLC 嵌入式 单片机 DCS

单片机对于传感器输出的有符号数据的使用和处理

单片机 | 发布时间:2018-11-02 | 人气: | #评论# | 本文关键字:单片机,传感器
摘要:在应用中传感器输出的是16bit的 2’s complement (即补码)形式表示的数据,这是带符号的数据,定义一个16位int变量保存该数据即可。但是在单片机中通常我们使用无符号数据进行运算,所以,

在应用中传感器输出的是16bit的 2’s complement (即补码)形式表示的数据,这是带符号的数据,定义一个16位int变量保存该数据即可。但是在单片机中通常我们使用无符号数据进行运算,所以,获得传感器的值后需要转换为无符号型数据,在需要把这些数据进行发送或保存时再把数据转换成有符号型数据。现在以一款传感器的输出数据来具体说明数据转换过程。输出的数据格式是补码形式表示的数据,范围从0xF800到0x07FF,如果超出量程则输出-4096.把传感器数据转换为无符号型数据,即-2048到2047转换为0到4095,假定数组XYZ[]存放的是传感器数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

for(i=0;i<3;i++)
{
if((XYZ[i]&amp;0xF800)==0xF800) //是负数、且在量程范围内
{
XYZ[i]=((~XYZ[i])+1); //补码取反加一,得到其原码
XYZ[i]=(2048-XYZ[i]);
}
else if(XYZ[i]==0xf000) //量程溢出
{
;
}
else if(XYZ[i]<0x800) //是正数,且在量程范围内
{
XYZ[i]=XYZ[i]+2048;
}
}

把无符号的数据转换为有符号的正常数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

for(i=0;i<3;i++)
{
if(XYZ[i]<2048) //原来是负数
{
XYZ[i]=(XYZ[i]|0xf800); //应该减2048,即+(-2048)=+(0xF800)
}
else if(XYZ[i]<4096) //原来是正数
{
XYZ[i]=(XYZ[i]-2048);
}
else //溢出
{
XYZ[i]=0xF000;
}
}


责任编辑:传感器输出
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。