void ADC_Init(void)
{
P5M0 = 0x00;
P5M1 = 0x20; //P5.5设为ADC5输入
P_SW2 |= 0x80; //使能访问XFR,没有冲突不用关闭
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //设置ADC时钟为系统时钟FOSC/2/16,ADC_RES/ADC_RESL转换结果右对齐
ADC_CONTR = 0x85; //使能ADC模块,并选择ADC5通道
//ADC_CONTR |= 0x40; //启动AD转换
//EADC = 1; //使能ADC中断
}
int ADC_Read(void)
{
int res;
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
res = (ADC_RES << 8) | ADC_RESL; //读取ADC结果
ADC_RES=ADC_RESL=0;
return res;
}
float ADC_Result(void)
{
int i=0,res=0,tmp=0;
float result=0.0;
for(i=0;i<8;i++)
{
tmp=ADC_Read(); //查询方式
res+=tmp;
}
res>>=3; //取平均值
result=5.0*res/1024+BiasVol; //10位ADC
return result;
}
接下来在main()函数初始化,调用即可。 |