登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

向C51高手门请教

作者:xuetian110 栏目:技术交流
向C51高手门请教
小弟向高手请教,这是一段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 11:37:11 修改者:xuetian110

2楼: >>参与讨论
沈老
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
}


3楼: >>参与讨论
xuetian110
真是感谢啊
有道理,真是高手啊!谢谢了

参与讨论
昵称:
讨论内容:
 
 
相关帖子
感激不尽!!!
我的帖子怎么不见了
为什么程序在仿真器上运行正确,写到片子里就运行错误??
一个PCB板问题,有点棘手!
新手总是,为什么会这样的?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号