这个问题主要是符号位的问题~~
我用的已知符号位了,所以取了绝对值:
void AdsObj::AdsConvertStop(void) { unsigned short result; //char str[16]; // while(AdsReadReg(ADS7870_GAINMUX) & ADS7870_GAINMUX_CNVBSY); ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号 AdsReadWriteByte(ADS7870_REG_READ | ADS7870_REG_16BIT | ADS7870_RESULTHI); result = AdsReadWriteByte(0xff) << 0x08;//读转换电压高4/3位 result |= AdsReadWriteByte(0xff);//读转换电压低8位 ADSPORTCS->IOSET = (1 << ADCS);//关闭片选信号 if (result >= 0x8000) {//放电电流 result ^= 0xfff0; result += 0x0010;//划成绝对值.注意这里我有别的处理,所以相当于取反加一~~~ } AdsTestRes[AdsCount] = result; // sprintf(str, "AdsTestRes[%1d]=%04X", AdsCount, result); // Uart.puts(str); }
|