STC8A8K64S4A12的ADC转换只有第一次是正确的,求指导
代码如下:使用ADC2和ADC3,现在只调用函数每3秒查询一次ADC2,ADC3没调用,只有上电后的第一次转换结果是正确的,后面的结果就偏大很多/*----------------------------
//初始化ADC
----------------------------*/
void InitADC_Poll(void)
{
P1M1 |=((1 << 2) | (1 << 3));
P1M0 &= ~((1 << 2) | (1 << 3)); //设置P1.2和P1.3为高阻输入
EADC = 0; //禁止ADC转换中断
ADCCFG = ADC_RESFMT | 0; //设置ADC时钟为32个CPU时钟,转换结果右对齐
ADC_CONTR = ADC_POWER | 2; //ADC上电,选择ADC2
Delay_ms(10);
}
/*----------------------------
//读取ADC结果12Bit
//ch:ADC通道号0-14(P10-P17,P00-P06)
----------------------------*/
u16 GetADCResult12Bit_Poll(u8 ch)
{
u16 adc_result = 0;
ADC_CONTR = ADC_POWER |ADC_START | ch; //启动ADC转换
_nop_(); //等待2个NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG)); //查询ADC完成标志
ADC_CONTR &= ~ADC_FLAG; //清完成标志
adc_result = ADC_RES; //读取ADC结果高8位
adc_result = (adc_result << 8) | ADC_RESL;//读取ADC结果低8位
return adc_result; //返回ADC结果
} 楼主可以向STC的技术支持索要16通道ADC测试程序。 本帖最后由 国学芯用 于 2019-3-20 16:26 编辑
页:
[1]