STC12C5410AD 转换通道分别为p1.0 p1.1 P1.2() 硬件上电阻分压 8位精度
现在的问题是,只要调整一个通道上接的电阻,会影响其它通道的输出值,通过串口发送出来的数据看,确实是这样,
硬件上是电阻分压,一个通道调整时,我用电压表测另一个够通道上的输入电压,变化只有0.01-----0.04 V左右 将端口设置为开漏或是输入都不行,
软件部分,我都写了好几个版本了,实在是没招了,有经验的同仁琢磨下是什么问题
程序如下!!
unsigned char GetTem(unsigned char TemChanel) { unsigned char ADC_LopNum=0; ADC_CONTR=ADC_PowOn;//将ADC设为SPeed(0.1)=00,且开启基准电源 OSTimeDly(10);//10MS P1M0=0x07; P1M1=0x07; //将P1.x值为开漏 ADC_CONTR|=TemChanel; //将P1.x做为AD输入 下同 DelayXus(100); //延时20us---200us 因为不管通道是否发生变化,全部延时,使通道路输入稳定,这个延时函数要重新写 ADC_DATA=0; //对于ADC_DATA清0 ADC_CONTR|=ADC_ChStart; while((ADC_CONTR&ADC_Finish)!=ADC_Finish); //等待AD转换结束 ADC_CONTR&=ADC_ClrFS; //对Flag清0,停止AD转换 ADC_CONTR&=0x00; P1M0=0x00; P1M1=0x00;
return ADC_DATA; }
unsigned char DPTemDat(unsigned char ADCChanel) { unsigned char i,j,DatBuff; unsigned int Sum; unsigned char idata TemValue[6]; unsigned char idata MidValue;
for(i=0;i<6;i++) //连续采6次 TemValue=GetTem(ADCChanel); for(i=0;i<5;i++) //冒泡 for(j=0;j<6-i;j++) { if(TemValue[j]>TemValue[j+1]) { DatBuff=TemValue[j]; TemValue[j]=TemValue[j+1]; TemValue[j+1]=DatBuff; } } Sum=0; for(j=1;j<5;j++) //滤波 Sum+=TemValue[j]; MidValue=Sum>>2; return MidValue; }
|