本帖最后由 bsdliao 于 2014-8-27 23:02 编辑
小弟自学单片机,打算用STC12c5a60s2来测电阻阻值,+5V与地之间串了R1,R2,R1=298,R2是被测电阻,将R2电压接入P1.3测其电压,根据R2电压就能算出R2的阻值了。现在显示阻值虽然比较稳定,但是与实际电压有偏差,1K以下基本就相差一两欧,但是R2越大偏差就愈大,求大神些解惑,复制个AD转换程序
void ADC_1_3()
{
int j;
P1M1=0xF8;
P1M0=0x08;
ADC_CONTR=0x80;
delay(250); //必要的延时
AUXR1=0; //即AUXR1的第3位:ADRJ=0,高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中
P1ASF=0x08; // 拟功选P1.3为AD模拟通道
ADC_CONTR=0xe3; //转换速度 90 时钟周期一次, 选P1.3为AD通道
_nop_;
_nop_;
_nop_;
_nop_;
for(j=0;j<200;j++)
{
ADC_RES=0; //高八位数据清零
ADC_RESL=0; //低两位清零
ADC_CONTR|=0x08; //开启AD转换
_nop_;
_nop_;
_nop_;
_nop_;
_nop_;
while(1) //判断AD转换是否完成
{
if(ADC_CONTR&0x10)
{break;}
}
ADC_CONTR=0xe3;//ADC_CONTR&=0xe7;清ADC_FLAG位, 关闭A/D转换
_nop_;
_nop_;
_nop_;
_nop_;
_nop_;
q0=(ADC_RES*4)+(ADC_RESL&0x03);//取10位AD转换值
q0=1024/q0;//求U总/UR2
q=q+q0;//将200次比值装入q
}
pp=q/200;//求总电压与所测电阻电压比值的平均值.
qq=298/(pp-1);// 根据:U总/UR2=(R1+R2)/R2 ,计算出R2阻值
R=(int)qq;//将double转为int
ADC_disp();显示阻值
}
|