KittyYang 发表于 2024-7-10 11:22:11

用STC8H1K08的P3.1口无法做ADC检测问题,已解决。

本帖最后由 KittyYang 于 2024-7-11 11:19 编辑

我用P3.6口和P3.1口做两个温度传感器的检测

以下是我的部分代码

#define ADC_PowerENABLE() (ADC_CONTR |= 0x80)
#define ADC_PowerDISABLE() (ADC_CONTR &= 0x7F)

#define TEMPERATURE_AD_CH 14   // ADC14
#define TEMPERATURE2_AD_CH 9   //ADC9

void ADC_config(void)
{
    ADCCFG            = (ADCCFG & ~ADC_SPEED_2X16T) | ADC_SPEED_2X1T;
    ADC_CONTR         |= 0x80;
    ADCCFG            |= (1 << 5);               
    EADC                = 0;                        
    P_SW2               |= 0x80;
    ADCTIM            = (0 << 7) | (1 << 5) | (31);
    P_SW2               &= 0x7f;
    ADC_PowerENABLE();                           
}
u16      Get_ADC12bitResult(u8 channel)      //channel = 0~15
{
                ADC_RES = 0;
                ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;    //启动 AD 转换
    _nop_();
    _nop_();
    _nop_();
    while((ADC_CONTR & 0x20) == 0);   //等待ADC结束
    ADC_CONTR &= ~0x20;   //清除ADC结束标志
    return (((u16)ADC_RES << 8) | ADC_RESL);
}

u16 get_adc_value(u8 chn)
{
                u16 adcBuff;
    u8 i;
    u8 varout, varin;
    u16 temp,average;

                Get_ADC12bitResult(chn);                //参数i=0~15,查询方式做一次ADC, 切换通道后第一次转换结果丢弃. 避免采样电容的残存电压影响.
                Get_ADC12bitResult(chn);                //参数i=0~15,查询方式做一次ADC, 切换通道后第二次转换结果丢弃. 避免采样电容的残存电压影响.

                for(i=0;i<5;i++)
                {
                              adcBuff = Get_ADC12bitResult(chn);
                }
                temp = adcBuff + adcBuff + adcBuff;
                average = temp/3;
    return average;
}

static void temperature_rise_limit(void)
{
    u16 result1,result2;

               
                result1 = get_adc_value(TEMPERATURE_AD_CH);
               
               
                P3M0 &= ~0x02;
                P3M1 |= 0x02;
               result2 = get_adc_value(TEMPERATURE2_AD_CH);
}

hsrzq 发表于 2024-7-10 12:39:59


看红字部分,是不是ADC电源启动之后等待时间不足?

神农鼎 发表于 2024-7-10 12:46:31


请将你实际原理图的高清PDF 发上来,大家帮你分析





网老四 发表于 2024-7-10 14:43:05

P31默认上电是准双向,如果程序里没有重新配置为高阻,有可能影响ADC检测,具体要看外围电路.

梁工 发表于 2024-7-10 14:51:00

有什么问题能描述一下吗?只说有问题,我难以猜测。
页: [1]
查看完整版本: 用STC8H1K08的P3.1口无法做ADC检测问题,已解决。