打印

向C51高手门请教

[复制链接]
2322|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuetian110|  楼主 | 2007-1-6 11:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
dc, FOR, AC
小弟向高手请教,这是一段AD7328采集程序,下面的程序是采集完8路后,判断有没有负数,但我没看明白为什么这么编,有哪位大虾能给我将讲吗?最好详细点,小弟第感激不禁

                   for(chl=0;chl<8;chl++)
                   {

                     if(DC_data1[chl]&0x1000)
                      {
                       DC_data1[chl]-=0x0001;
                       DC_data1[chl]=~DC_data1[chl];
                       DC_data1[chl]&=0x0fff;
                       DC_data1[chl]=(-DC_data1[chl]);
                      }
                   }
                  DC_data[0]=DC_data1[0];
                  DC_data[1]=DC_data1[1];
                  DC_data[2]=DC_data1[4];
                  DC_data[3]=DC_data1[5];
                  DC_data[4]=DC_data1[7];
                  DC_data[5]=DC_data1[6];
                  DC_data[6]=DC_data1[3];
                  DC_data[7]=DC_data1[2];
                  each_volt();
主要是这一块:
if(DC_data1[chl]&0x1000)
                      {
                       DC_data1[chl]-=0x0001;
                       DC_data1[chl]=~DC_data1[chl];
                       DC_data1[chl]&=0x0fff;
                       DC_data1[chl]=(-DC_data1[chl]);
                      }

相关帖子

沙发
沈老| | 2007-1-6 21:58 | 只看该作者

13位补码

ADC通常有2种输出编码,1.偏移2进制码,2.2进制补码.AD7328输出2进制补码. 2进制补码的特点是正数等于原码,负数等于反码+1. 
if(DC_data1[chl]&0x1000)//负数
{
     DC_data1[chl]-=0x0001;//=+1
     DC_data1[chl]=~DC_data1[chl];//反码
     DC_data1[chl]&=0x0fff;//取12位值
     DC_data1[chl]=(-DC_data1[chl]);//加上符号,变成16位int
}

使用特权

评论回复
板凳
xuetian110|  楼主 | 2007-1-10 08:36 | 只看该作者

真是感谢啊

有道理,真是高手啊!谢谢了

使用特权

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

本版积分规则

24

主题

101

帖子

0

粉丝