CLKCON |=0x00;
CLKCON |=0x08; //HFON=1;
delay(10); //延时至少2mS
CLKCON |=0x04; //FS=1;
REGCON=0x01; //开启电源稳压器
PGAM = 0xb4; // 1011 0100 开启PGA模块 默认增益75倍 允许削波 1KHz
ADCON = 0x11; //0001 0001 禁止AD模块工作 ADCIF中断标志清零 选外部参考电压
ADT = 0xef;
ADRAND=0x00; //随机时钟控制寄存器
ADCH |= 0x0a; //选AIN1+AIN1-模拟输入 (voltage resistor采集) P1.5 1.6
EADC = 1; //允许AD中断
ADCON |= 0x80; //启动AD转转
void ADC_INT() interrupt 6 using 1
{
ADCON &= 0xbf; //1011 1111 ADCIF=0 中断标志ADCIF清零
if(!AD_bit0)
{
AD_middle=(((unsigned long)ADDH)<<12)|(((unsigned long)ADDM)<<8)|((unsigned long)ADDL);
AD_DATA[AD_counter0] = AD_middle;//
AD_counter0++;
if(AD_counter0 > 10) //判断是否十个数据采集完成
{
AD_bit0 = 1; //是,置完成标志
}
else
{
ADCON |= 0x80; //重新启动AD转转
}
}
}
long int ReadCount(void)
{
uchar i;
long int Count;
if(AD_bit0 == 1)
{
for(i = 0;i < 10;i++)
AD_sum = AD_sum + AD_DATA[i]; //求十个数据总合
for(i = 1;i < 10; i++) //循环十次
if(AD_DATA[0] < AD_DATA[i]) //找最大值
AD_DATA[0] = AD_DATA[i]; //交换值
_nop_();
_nop_();
_nop_();
_nop_();
for(i = 2;i < 10;i++) //循环九次
if(AD_DATA[1] > AD_DATA[i]) //找最小值
AD_DATA[1] = AD_DATA[i]; //交换值
_nop_();
_nop_();
_nop_();
_nop_();
AD_max_min = AD_DATA[0]+AD_DATA[1];
AD_sum = AD_sum-AD_max_min; //去掉最大值和最小值
AD_sum >>= 3; //求平均值
//AD_sum =AD_sum /10;
AD_Value = AD_sum; //取低字节数据
AD_bit0 = 0; //准备下次采集数据
AD_counter0 = 0; //清AD采集数据计数单元
AD_sum = 0; //AD总和值清零
Count = AD_Value;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADCON |= 0x80; //重新启动AD转转
}
return(Count);
} |