STC 单片机AD 采集问题,求教!
本帖最后由 a_2012_m 于 2012-9-26 09:06 编辑用STC15L204EA单片机采集电压,液晶显示
程序上电,ad初始化之后的第一次采集,液晶显示结果是对的
之后间隔采集中显示的结果就不对,都是0,不知道其中的问题出在哪,请高手指教
以下是ad部分代码
ad初始化:
void adc_init(void)
{
P1ASF = 0x03; //SetP1.0,1.1 as analog input port
ADC_RES = 0; //Clear previous result
ADC_RESL = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | CH0;
Delay(2);
}
读结果
unsigned int adc_vol(void)
{
unsigned int variable_adc;
while(!(ADC_CONTR&ADC_FLAG)) ;
ADC_CONTR&=~ADC_FLAG ;
variable_adc=ADC_RESL;
valtage=ADC_RES*4+variable_adc; //h8+l2
return valtage;
}
main()
{
.........
adc_init();
dispmap=0x20; //护航
for(i=0;i<250;i++)
{
Delayms(8);
}
voltage=adc_vol();
speed_write(1,voltage); //显示结果是正确的
................
while(1)
{
...............
if(one_sec>VOL_WT)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START |CH0 ;
Delayms(40);
voltage=adc_vol(); //这个结果就不正确,显示的都是0,不知道是什么原因?
ad_flag=0xaa;
}
......................
}
} 继续求教! void adc_pwon()// adc电源打开
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
}
uint adc_dat(adch)
{ uint temp;
ET0=0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | adch | ADC_START;
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ET0=1;
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= ~ADC_FLAG; //Close ADC
temp=ADC_RES;
temp=(temp<<2)+ADC_RESL;
return temp; //Return ADC result
}
水平有限没看出来,上面我的adc程序 用着没问题你试一下 和你的程序基本上是一样的,不过可以试试!
页:
[1]