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

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4243|回复: 2
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2009-4-25 15:24:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我的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次都没有采到.
2#
 楼主| 发表于 2009-4-25 15:24:51 | 只看该作者
AD采样数值一般是有浮动的,建议采样多次,去掉最大最小值,然后求平均显示。
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 2009-4-25 15:25:31 | 只看该作者
问题解决···把接受32次采样值的变量定义成CHAR型拉
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-4-28 04:34 , Processed in 0.047992 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表