winnie 发表于 2009-4-25 15:24:41

18系列内部AD连续采样的问题

为什么我的AD采样一次就是正常的啊
程序如下:
//===================================================================================//
//                     采样AD初始化
//===================================================================================//
void adyqint(void)
{   
ADON=0;
GODONE=0;
ADCON0=0x69;                                 //选择A/D通道为RE0,
                                                               //选择A/D通道为RE0,打开A/D转换器0110,1001                                                            
ADCON1=0X8A;                                        //转换结果右移,及ADRESH寄存器的高6位为"0"               
delayms(200);
}
//===================================================================================//
//                      采样显示
//===================================================================================//
void ad_yq(void)
{
GODONE=0;   
ADIF=0;
GODONE=1;
while(1)
      if(GODONE==0) break;         
dy_cj.adre=ADRESL;
dy_cj.adre=ADRESH;      
o2value=dy_cj.dy;
}
而我连续采样32次就变的不正常拉啊
//===================================================================================//
//                     采样AD初始化
//===================================================================================//
void adyqint(void)
{   
ADON=0;
GODONE=0;
ADCON0=0x69;                                    
   //选择A/D通道为RE0,打开A/D转换器0110,1001                                                      
ADCON1=0X8A;                                        //转换结果右移,及ADRESH寄存器的高6位为"0"               
delayms(50);
}
//===================================================================================//
//                     采样显示
//===================================================================================//
void read_yqad( void )
{
unsigned char loop;         
for(loop=32;loop>0;loop--)
{
      GODONE=0;
      ADIF=0;
      GODONE=1;
      while(1)
          if(GODONE==0) break;         
      dy_cj.adre=ADRESL;
      dy_cj.adre=ADRESH;      
      acdyqval=acdyqval+dy_cj.dy;
      delayms(5);                                        //延时5ms
   }   
}
//===================================================================================//
//                  采样显示
//===================================================================================//
void ad_yq(void)
{ read_yqad();
acdyqval=acdyqval>>5;
o2value=acdyqval;
acdyqval=0;
}
显示的o2value好像 就是一次的采样值除以32的来的.好像有31次都没有采到.

winnie 发表于 2009-4-25 15:24:51

AD采样数值一般是有浮动的,建议采样多次,去掉最大最小值,然后求平均显示。

winnie 发表于 2009-4-25 15:25:31

问题解决···把接受32次采样值的变量定义成CHAR型拉
页: [1]
查看完整版本: 18系列内部AD连续采样的问题