AFE4400数据处理——C语言实现22位数据转换

        AFE4400集成模拟前端是集成了红光及红外LED发射和接收、光电转换以及AD转换的一个模块,该模块可以用来获得人体脉搏波信号以及血样饱和度数据。红光、红外、红光对应的环境光、红外对应的环境光、红光与红光环境光的差值以及红外与其对应环境光的差值,共计六个数据经过AD转换之后的32位数据存储在6个寄存器中。以红光为例,寄存器共计32位,其中前八位为无效位,根据数据手册,其第9位和第10位为可以忽略的位,同样可以视作无效位,第11位为数据的符号位,而真正的数据位为从第12位到第32位的21位存储。

    从后往前数,共计22位数是我们所需要的数据,而这个数是以补码的形式进行记录的,我们的目的是通过定义函数,获得真正的数据。从存储上来讲,就是将的到的AD转换的值变换为32位数据的正确表示值。

    函数实现:

long Transform(long input)        //定义函数返回值为long(32位数据需要)
{
     long output;                
     long preoutput, preinput, temp; 
     preinput = input&0x00200000;  //数据的第22位是否为1,判断正负
     if (preinput == 0)             //preinput为0,说明输入为正数
     {
            output = input;           //输入数据的后21位即为输出值
            output &= 0x001FFFFF;   //经过与运算之后,清除前10位数据存储
     }
     else                       //输入数据为负数
     {
            temp = input & 0x001FFFFF;  //获得后21位补码
            output = ~temp + 1;          //补码取反再加1得到原码数据
     }
     return output;                  //返回输出值,数据类型为long
}

总结:

    在写函数时,应当注意到,补码变换为原码的方法为取反加1,同时,经过与运算之后,已经获得正确的补码数据,只需进行向原码变换的操作就可以实现。而不需要考虑在首位加1得到负数,这样的思路是错误的。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值