a_2012_m 发表于 2012-9-26 09:05:28

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;
                }
                              ......................
               }
}

a_2012_m 发表于 2012-9-26 10:27:16

继续求教!

lihw2@ 发表于 2012-9-26 10:30:06

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程序 用着没问题你试一下

a_2012_m 发表于 2012-9-26 11:02:56

和你的程序基本上是一样的,不过可以试试!
页: [1]
查看完整版本: STC 单片机AD 采集问题,求教!