huaidan2088 发表于 2019-3-16 18:29:48

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结果
}

小李非刀 发表于 2019-3-20 15:36:20

楼主可以向STC的技术支持索要16通道ADC测试程序。

国学芯用 发表于 2019-3-20 16:25:30

本帖最后由 国学芯用 于 2019-3-20 16:26 编辑

页: [1]
查看完整版本: STC8A8K64S4A12的ADC转换只有第一次是正确的,求指导