打印

51四字节除法请教

[复制链接]
1358|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
彪哥|  楼主 | 2013-6-26 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 彪哥 于 2013-6-26 12:51 编辑

      一个AD转换的程序如下,连续累加28次,每次连续转换两次,分别是两个通道数据。现在的问题是:
     12位AD的AD出来的结果最高是0xFFF;可是累加求平均后,得到的数据是0x1EFC(7932),百思不得其解。请高人相助!
   
    注:整段程序编译后代码7K多,data使用94字节。使用89S52芯片,时钟22.1184MHz
   
    uchar AD_BufL;
    uchar AD_BufH;
    ulong Result_L;
    ulong Result_H;
    uchar i,ii;
    ulong  Chanal_A = 0;
    ulong  Chanal_B = 0;
     
for(ii=0;ii<28;ii++)
  {

  for(i=0;i<2;i++)
     {
          while(AD_ST==0);  //等待AD转换结束
          while(AD_ST==1);
   
          AD_HL = 0;             //读高8位数据
          AD_BufH = AD_RESULT;
      
           AD_HL = 1;             //读低4位数据
          AD_BufL = AD_RESULT;
           
          Result_L = (AD_BufH<<4)+(AD_BufL>>4);
          Result_H = AD_BufH>>4;

          if(i==0)      //A道数据

          Chanal_A = (Result_L + Result_H<<8) + Chanal_A;

          else       //B道数据

          Chanal_B = (Result_L + Result_H<<8) + Chanal_B;     
   }

}
    Chanal_A = Chanal_A/28;
    Chanal_B = Chanal_B/28;

相关帖子

沙发
coody| | 2013-6-26 11:43 | 只看该作者
你软仿就会发现问题啦。
Result_L = (AD_BufH<<4)+(AD_BufL>>4);
这句会得到结果Result_L = 0x0fff;
因为会自动把AD_BufH强制为ulong再移。

后面有一句也错误,
Chanal_B = (Result_L + Result_H<<8) + Chanal_A;
后面应该是 + Chanal_B;

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
彪哥 + 4
板凳
彪哥|  楼主 | 2013-6-26 12:51 | 只看该作者
本帖最后由 彪哥 于 2013-6-26 13:03 编辑
coody 发表于 2013-6-26 11:43
你软仿就会发现问题啦。
Result_L = (AD_BufH4);
这句会得到结果Result_L = 0x0fff;


我试试 多谢楼上!
  第2个错误属于笔误,抱歉!

使用特权

评论回复
地板
彪哥|  楼主 | 2013-7-2 08:25 | 只看该作者
想结贴了!可是怎么给分呀?

使用特权

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

本版积分规则

44

主题

171

帖子

1

粉丝