myemcu 发表于 2018-12-7 17:15:39

STC8A多路ADC采集求教。

问下大家,为什么我这程序只能采集一路而无法轮询?

while(1)
{
//       ADC_Value0 = Get_ADC12bitResult(0);delay(10000);
//       ADC_Value1 = Get_ADC12bitResult(1);delay(10000);
//       ADC_Value2 = Get_ADC12bitResult(2);delay(10000);
//       ADC_Value3 = Get_ADC12bitResult(3);delay(10000);
       
       ADC_Value4 = Get_ADC12bitResult(4);
       delay(60000);
       vol4 = ADC_Value4;
       vol4 /= 128;
       Send_Byte_U2(vol4);
       adc_dis = vol4 /10+'0';
       adc_dis = vol4 %10+'0';
       Send_Str_U1(adc_dis);
       Send_Byte_U1(0x0D);
   Send_Byte_U1(0x0A);
       
       ADC_Value5 = Get_ADC12bitResult(5);
       delay(60000);
       vol5 = ADC_Value5;
       vol5 /= 128;
       Send_Byte_U2(vol5);
       adc_dis = vol5 /10+'0';
       adc_dis = vol5 %10+'0';
       Send_Str_U1(adc_dis);
       Send_Byte_U1(0x0D);
   Send_Byte_U1(0x0A);
}       

初始化:
void        ADC_config(void)
{       
        ADC_CONTR|=0x80;              //开AD转换电源
        delay(10000);         //适当延时等待AD转换供电稳定
       
        //ADC_CONTR|=0x0E;                          //选择P1.6作为模拟功能AD使用
       
       
//        ADCCFG&=0xFC;             //AD转换速度为96个时钟周期转换一次
//        ADCCFG|=0x0C;             //AD转换速度为96个时钟周期转换一次
       
        ADCCFG|=0x0C;
       
        ADC_CONTR&=0xDF;          //清AD转换完成标志
               
        EADC=0;                   //禁止ADC转换中断
        ADCCFG|=0x20;             //ADC转换结果ADC_RES存高4位,ADC_RESL存低8位
        ADC_CONTR|=0x40;          //启动AD转换,ADC_START=1
}

采集:
uint        Get_ADC12bitResult(uchar ch)        // 获取12位ADC值
{
        uint        AD_Dat=0;
       
        ADC_CONTR |= ch;                          
       
ADC_CONTR|=0x40;         //启动AD转换,ADC_START=1
        delay(10);
       
        while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
        ADC_CONTR &= ~0x20;                     //清完成标志
       
        ADC_CONTR&=~0x40;      //关闭AD转换,ADC_START=0
        delay(10);
       
        AD_Dat = ADC_RES;                     //将ADC_RES低4位移到应在的第9位至第12位
        AD_Dat <<= 8;
        AD_Dat|= ADC_RESL;             //将ADC_RESL的8位移到应在的低8位
       
        return        AD_Dat;       
}

myemcu 发表于 2018-12-7 17:19:43

型号:STC8A8K64S4A12。

向北 发表于 2018-12-24 10:15:31

不太清楚,帮顶,是不是ADC_CONTR |= ch; 这里有问题呀?选择0.4口后 下次再或上去就变成了0.5,然后你就或不回来了{:lol:}不知道我说的对不对哦。。。

myemcu 发表于 2018-12-24 12:33:17

向北 发表于 2018-12-24 10:15
不太清楚,帮顶,是不是ADC_CONTR |= ch; 这里有问题呀?选择0.4口后 下次再或上去就变成了0.5,然后你就或 ...

兄弟说到点子上了。。
页: [1]
查看完整版本: STC8A多路ADC采集求教。