智能车制作

标题: XS128多通道AD采集 [打印本页]

作者: bobo_12300    时间: 2012-11-16 19:18
标题: XS128多通道AD采集
下面是我的一段AD多通道采集代码,调用AD_get_more()的时候就会在while里面了,这是为什么?转换没完成吗?
不太理解啊


/*************************************************************/
/*                      初始化AD模块(多通道转换)        */
/*************************************************************/
void Init_AD_more(void)
{
  ATD0DIEN = 0X00;          // 禁止数字输入  
  ATD0CTL1_SRES = 2;  //选用12位模数转换
  ATD0CTL2 = 0X40;   //启动A/D转换,快速清零,禁止中断
  delay_atd();                //延时
  ATD0CTL3=0Xa0;     //10100000 转换序列长度为4   右对齐
  ATD0CTL4 = 0x07;   //AD模块时钟频率为2MHz  fA=fBUS/(PRS+1)/2   
  ATD0CTL5=0X30;   //多通道,连续转换,起始通道AD0   AD1,AD2,AD3,

}

void AD_get_more(void)
{   

   while(!ATD0STAT2_CCF0);   
   {
    PORTA_PA0=1;  ad_value[0]=ATD0DR0;            
   }
   while(!ATD0STAT2_CCF1);
    {
        PORTA_PA1=1;  ad_value[1]=ATD0DR1;
    }
   while(!ATD0STAT2_CCF2);
     {
        PORTA_PA2=1;  
        ad_value[2]=ATD0DR2;
     }
   while(!ATD0STAT2_CCF3);
      {
        PORTA_PA3=1;  ad_value[3]=ATD0DR3;  
      }
}


作者: melon_1    时间: 2012-11-16 19:46
多了一个分号
作者: bobo_12300    时间: 2012-11-16 20:00
melon_1 发表于 2012-11-16 19:46
多了一个分号

好吧~~真心的请教呐~~是要有分号的。转换完成置位相应的标志位,在进行读取AD值的。我的理解是,程序一直等待AD转换完成,或者AD就根本没有转换。但不知道怎么解决,感觉初始化的配置应该没问题啊,我是在中断中调用这个函数的。
作者: melon_1    时间: 2012-11-16 20:03
感觉中断不是那么好玩的,干嘛非要用函数调用呢,
作者: melon_1    时间: 2012-11-16 20:05
中断最好不要调用函数:
作者: bobo_12300    时间: 2012-11-16 20:08
melon_1 发表于 2012-11-16 20:03
感觉中断不是那么好玩的,干嘛非要用函数调用呢,

要每个一定时间采集AD进行处理,要不CPU就干一件事情了。我不在中断中调用也是一样的情况
作者: bobo_12300    时间: 2012-11-16 20:09
melon_1 发表于 2012-11-16 20:05
中断最好不要调用函数:

我觉得中断调用函数只要中断时间大于函数执行时间就不会有太大问题的呢~~

作者: bobo_12300    时间: 2012-11-16 22:50
已经解决了~~配置没问题。把读寄存器的前面一句去掉
作者: 竹叶    时间: 2013-3-27 20:55
bobo_12300 发表于 2012-11-16 22:50
已经解决了~~配置没问题。把读寄存器的前面一句去掉

是去掉哪一句哈,谢谢
作者: 心,狼在吼    时间: 2013-4-6 08:46
PORTA给设置成输出了,PORTA_PA0=0;应该也可以吧!。!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2