void GetAdc(unsigned char Chnum)
{
uint8 i,j;
uint32 AdcValue[250];
uint32 AdcSum;
uint32 AdcTemp;
AdcSum=0;
AdcData=0;
Chnum &= 0x07;
AD0CR = (1 << Chnum)
((Fpclk / 1000000 - 1) << 8) // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
(0 << 16) // BURST=0,软件控制转换操作
(0 << 17) // CLKS=0, 使用11clock转换
(1 << 21) // PDN=1,正常工作模式
(0 << 22) // TEST1:0=00,正常工作模式
(1 << 24) // START=1,直接启动ADC转换
(0 << 27); // 直接启动ADC转换时,此位无效
DelayNS(5);
AdcData = AD0DR; // 读取ADC结果,并清除DONE标志位
AdcData = 0;
for(i=0;i<250;i++)
{
AD0CR = 1 << 24; // 进行第一次转换
while ((ADDR & 0x80000000) == 0);
AdcValue[i] = (AD0DR &(0x3ff<<6))>>1;
if(AdcValue[i]>AdcMax) //保留下最大值
{
AdcMax=AdcValue[i];
}
if(AdcValue[i]<AdcMin) //保留下最小值
{
AdcMin=AdcValue[i];
}
AdcSum+=AdcValue[i];
}
AdcResult=(AdcSum-AdcMax-AdcMin)/(250-2);
}
