我用了两全通道一个测电流 一个测电压,AIN4 AIN5
void ADC_Init(uchar Channel)
{ ADCCFG0=0x30;//1设定ADC输入
ADCCON |= 0X80;
ADCCON|=Channel;
}
uint ADC_ZH() //AD转换
{
unsigned int Tad=0,MinAd=0x0fff,MaxAd=0x0000,TempAdd=0;
unsigned char t=0;
for(t=0;t<10;t++)
{
ADCCON |= 0X40; //开始 ADC 转换
while(!(ADCCON&0x10)); //等待 ADC 转换完成
ADCCON&=~(0X10); //清中断标志位
Tad = ((unsigned int)ADCVH<<4)+(ADCVL>>4); //取得一次转换值
if (Tad>MaxAd)
{
MaxAd=Tad ;//获得当前的最大值
}
if (Tad<MinAd)
{
MinAd=Tad; //获得当前的最小值
}
TempAdd+=Tad; //转换值累加
}
TempAdd-=MinAd; //去掉最小值
TempAdd-=MaxAd; //去掉最大值
TempAdd>>=3; //求平均值
return(TempAdd);
}
void ad_dq()
{
ADC_Init(4);
u1 = ADC_ZH();
shuo=((unsigned long)u1*240/4096*11);
ADC_Init(5);
u2 = ADC_ZH();
x= u2;//*24*30/4096*1000/47;
} |