|
void ADC_init(void)
{
P1M0 = 0x00;//P1 设置为准双向口,P1.7设置为高阻输入 做AD使用
P1M1 = 0x80;
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置ADC内部时序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16 转换结果右对齐,ADC_RES 高2位,ADC_RESL低8位
ADC_CONTR = 0x80; //使能ADC模块
//EADC = 1; //使能ADC中断
//ADC_CONTR |= (0x40|7); //启动AD转换
}
u16 Get_ADCResult(u8 channel) //channel = 0~12
{
u16 adc;
u8 i;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xf0) | ADC_START | channel;
NOP(30); //对ADC_CONTR操作后等待会儿再访问
for(i=0; i<250; i++) //超时返回,正常i等于10以内就可以转换完成
{
if(ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
adc = ((u16)ADC_RES << 8) | ADC_RESL;
return adc;
}
}
return 4096; //错误,返回4096,调用的程序判断
}
|
|