stc单片机型号12c5a16s2 a/d转换为什么总是FF? 哪位高手解释下!!!a/d程序见问题补充

INT8U get_AD_result(INT8U channel)
{
INT8U AD_finished=0; //存储 A/D 转换标志

ADC_RES = 0;
ADC_RESL = 0;

channel &= 0x07; //0000,0111 清0高5位
ADC_CONTR = AD_SPEED;
_nop_();
ADC_CONTR |= channel; //选择 A/D 当前通道
_nop_();
_nop_();
_nop_();
_nop_();
ADC_CONTR |= 0x80; //启动 A/D 电源
delay(1); //使输入电压达到稳定
ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 启动A/D转换,
AD_finished = 0;
while (AD_finished ==0 ) //等待A/D转换结束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否
}
ADC_CONTR &= 0xf7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,

return (ADC_RES); //返回 A/D 高 8 位转换结果
}
感谢各位了,问题已经解决

void AD_Init()
{
P1M0 = 0xf6; //1111,0110用于A/D转换的P1.x口,先设为开漏
P1M1 = 0xf6; //1111,0110P1.0--P1.1先设为开漏。断开内部上拉电阻
Delay1ms(100);
}
float Read_ADC(unsigned char adcvcc)
{
ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
Delay1ms(20); //20ms
ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
ADC_CONTR = ADC_CONTR&0xf8|adcvcc; //设置当前通道号
Delay1ms(10); //延时使输入电压达到稳定
ADC_DATA = 0; //清A/D转换结果寄存器
ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
do { ; } while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG和ADC_START位,停止A/D转换
return ADC_DATA;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-19
你相关寄存器设置正确了吗
第2个回答  2012-07-11
请问你的问题是怎样解决的,我现在遇到了同样的问题。