本帖最后由 YZW977 于 2018-4-19 11:51 编辑
以下是ADC初始化及转换的程序
u16 ADCResult(u8 ch)
{
u16 Result;
P1ASF = 0x80; //设置P17位为输入口
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR |= ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
Result =(u16)((ADC_RES<<2)|(ADC_RESL));
return (Result);
}
u16 ADCResult1(u8 ch)
{
u16 Result1;
P1ASF = 0x20; //设置P15位为输入口
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR |= ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
Result1 =(u16)((ADC_RES<<2)|(ADC_RESL));
return (Result1);
}
下面是主程序中的ADC程序
void main()
{
u16 value,value1;
double dat,dat1;
while (1)
{
TI = 1;
// value1 = ADCResult1(0x05); //设置P15为输入口
// dat1 = (double)value1*0.0048828125;//10位ADC,5伏基准电压
// printf("电压:
");
// printf("dy = %.2f
",dat1);
value = ADCResult(0x07); //设置P17为输入口
dat = (double)value*0.0048828125;
printf("电压:
");
printf("dy = %.2f
",dat);
while(!TI);
TI= 0;
Delay1000ms();
}
}
在主程序中用串口显示时,注释掉一组显示,另一组就正常。如果不注释一组,同时显示,两组信号就一直保持5V
此帖出自
小平头技术问答
ADC_CONTR |= ADC_POWER | ADC_SPEEDLL | ADC_START | ch;这一句就可以切换通道和再启动
一周热门 更多>