STC12C5A60S2单片机的A/D转换问题
现将一个电位器的输出端接到STC12C5A60S2的P1.1口(即ADC1),利用A/D模块将电位器电压信号的转换结果通过串口2发送给PC,利用串口调试助手来看转换结果。...
现将一个电位器的输出端接到STC12C5A60S2的P1.1口(即ADC1),利用A/D模块将电位器电压信号的转换结果通过串口2发送给PC,利用串口调试助手来看转换结果。
程序如下:
#define ADC_POWER 0X80
#define ADC_FLAG 0X10
#define ADC_START 0X08
void AD_init()
{
ADC_CONTR |= ADC_POWER; //开启AD电源
delay_ms();
delay_ms();
P1ASF=0x02; // P1.1口作为模拟功能AD使用
ADC_RES=0; //清零转换结果寄存器高8位
ADC_LOW2=0; //清零转换结果寄存器低2位
ADC_CONTR |= 0x01; //P1.1作为A/D输入
ADC_CONTR |= ADC_START; //启动A/D转换
delay_ms();
}
void main()
{
serial2_init();
AD_init();
EA=1;
while(1)
{
ADC_CONTR |= ADC_START; //启动A/D转换
while(ADC_CONTR&ADC_FLAG); //等待ADC_FLAG置位
ADC_CONTR &= ~ADC_FLAG;; //ADC_FLAG清零
serial2_sendchar(ADC_RES);
serial2_sendchar(ADC_LOW2);
}
现在的问题是ADC_FLAG不置位,也就是没有完成A/D转换。上面程序是用查询方式,利用中断也是同样的问题。
请高手指教一下,问题出在哪儿?感谢~ 展开
程序如下:
#define ADC_POWER 0X80
#define ADC_FLAG 0X10
#define ADC_START 0X08
void AD_init()
{
ADC_CONTR |= ADC_POWER; //开启AD电源
delay_ms();
delay_ms();
P1ASF=0x02; // P1.1口作为模拟功能AD使用
ADC_RES=0; //清零转换结果寄存器高8位
ADC_LOW2=0; //清零转换结果寄存器低2位
ADC_CONTR |= 0x01; //P1.1作为A/D输入
ADC_CONTR |= ADC_START; //启动A/D转换
delay_ms();
}
void main()
{
serial2_init();
AD_init();
EA=1;
while(1)
{
ADC_CONTR |= ADC_START; //启动A/D转换
while(ADC_CONTR&ADC_FLAG); //等待ADC_FLAG置位
ADC_CONTR &= ~ADC_FLAG;; //ADC_FLAG清零
serial2_sendchar(ADC_RES);
serial2_sendchar(ADC_LOW2);
}
现在的问题是ADC_FLAG不置位,也就是没有完成A/D转换。上面程序是用查询方式,利用中断也是同样的问题。
请高手指教一下,问题出在哪儿?感谢~ 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询