max0147 发表于 2012-9-27 11:56:27

双极性ADC输出负值时,无法得到正确结果,补码输出

本帖最后由 max0147 于 2012-9-27 11:58 编辑



ADC程序(截取):
unsigned int AD7324Conv(unsigned char ch)
{
         unsigned unwword=0;
         。
         。
         。
         。
          unwword=ReadFromAD();
          wword = unwword&0x1fff; //12b in 16bspi
          if(unwword &0x1000 !=0)
          {
            unwword= ((~unwword)+1);   //求原码
            unwword=unwword&oxfff;
            unwword|=0x8000;//或上0X8000,把最高位置1表示负数
          }

          return unwword;          
}



主程序:
                                  signed int wword;
                                   wword =AD7324Conv(0);

                                   //send_UART((unsigned char)(wword>>8));
                                   //send_UART((unsigned char)wword);
                                   vol =((float)wword/2048)*2.5;
                                   sprintf(print_tab,"Ref.Vol.= %.2fV",vol);
                                   serial_send_str(print_tab);

这颗ADC输出是16位SPI,其中12位数据跟在后面,双极性应用时,必须设置其输出值为twos complement(补码)形式,正值的话,补码与原码相同,负值的话要按上面程序作下求原码。
如果输入是正值,则结果是对的,如果是负值,则始终得不到正确的结果,请教问题出在哪,谢谢。
页: [1]
查看完整版本: 双极性ADC输出负值时,无法得到正确结果,补码输出