打印

pic877ad问题

[复制链接]
1326|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxd9199|  楼主 | 2012-2-21 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下边是ad采集处理一部分
adresult.adre[0]=ADRESL;
  adresult.adre[1]=ADRESH; //读取并存储 A/D转换结果,A/D转换的结果
  sum_temp=adresult.y1;   //通过共用体的形式放入了变量 y1 中
  adsum+=sum_temp;
  }
  adaver=adsum/m;            //采集的m次 取均值
  adaver=adaver/0x3ff;       //
  adaver=adaver*133;       //温度测量范围120*10/9
  adaver+=0;                  //修订值(调零或调幅)
  send_data=(uncha)adaver;    //存入数组
    };
如上所示。ad口输入电压 为0到5v 对应的温度为 0到120摄氏度
问题:这一步adaver=adsum/m;            //采集的m次 取均值
                adaver=adaver/0x3ff;       //
                 adaver=adaver*133;       //温度测量范围120*10/9
能与0到5v 0到120摄氏度对应么?

本人菜鸟 求解惑。
沙发
kvdong| | 2012-2-21 22:30 | 只看该作者
个人感觉 adaver = adaver/0x3ff;这句不太合适。
(当然如果你的adaver是浮点型的话就还好点)
采样值不会超过0x3ff好像,所以这句以后adaver的值应该变为0了(整形除法)。
所以在保证不溢出的情况下(比如adaver是长整形)最好先让其乘于133(具体乘133的含义我没仔细看)后再做除法。
推广开来就是说如果一段程序中既有乘法又有除法的话,最好在昨晚乘法再做除法(但要保证其不溢出),浮点型数据则较为随意些。

使用特权

评论回复
板凳
wxd9199|  楼主 | 2012-2-22 08:58 | 只看该作者
明白了。感性ing

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

1

粉丝