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;
} 型号:STC8A8K64S4A12。 不太清楚,帮顶,是不是ADC_CONTR |= ch; 这里有问题呀?选择0.4口后 下次再或上去就变成了0.5,然后你就或不回来了{:lol:}不知道我说的对不对哦。。。 向北 发表于 2018-12-24 10:15
不太清楚,帮顶,是不是ADC_CONTR |= ch; 这里有问题呀?选择0.4口后 下次再或上去就变成了0.5,然后你就或 ...
兄弟说到点子上了。。
页:
[1]