英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 18系列内部AD连续采样的问题 [打印本页]

作者: winnie    时间: 2009-4-25 15:24
标题: 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[0]=ADRESL;
  dy_cj.adre[1]=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[0]=ADRESL;
      dy_cj.adre[1]=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
AD采样数值一般是有浮动的,建议采样多次,去掉最大最小值,然后求平均显示。
作者: winnie    时间: 2009-4-25 15:25
问题解决···把接受32次采样值的变量定义成CHAR型拉




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2