双极性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]