[求助] 关于ad转换的一个简单问题

zhijun0906   2011-10-27 10:00 楼主

本人想用用ad转换做一个采样频率为1280hz的数据采集,采集128个点后对其进行处理,处理完后在进行下一次的采集;

由于对频率要求较高,所以我选择使用定时器中断,每次中断启动ad转换并将转换结果保存后退出中断等待下一次中断,但是对ad的初始化很迷惑,希望高手给指点一下,说说有哪里不对,程序如下:

 

#include "msp430x14x.h"

void ADCinit()      //ADC初始化
{ int i;
  P6SEL=0x01;                                                                          //设置端口第二功能
  ADC12CTL0&=~ENC ;                                                            //ENC设置为0从而修改ADC12寄存器

 ADC12CTL0 = ADC12ON + REFON + REF2_5V+SHT0_0;      //启动ADC12,使用内部参考电压,2.5V
 ADC12CTL1 = SHP;                                                               //使用采样定时器
 ADC12MCTL0 = SREF_1;   //Vr+ = Vref+
        for(i = 0; i < 0x3600; i++)                                              //为参考源启动提供延迟17ms以上
        {}

 ADC12CTL0 |= ENC;                                                                //允许转换
        return;
}

#pragma vector=TIMERA0_VECTOR                                //中断服务程序
__interrupt void Timer_A(void)
{

    ADC12CTL0 |= ADC12SC;                                            //启动转换
    while((ADC12IFG&ADC12BUSY)==0);                           //等待转换完成
    _NOP();
    dataIN[count].image=ADC12MEM0/4095.0;
    count++;
    if(count==128)
    {
      TACTL=0x02C4;                                //当采集点数达到128时定时器变为停止模式
      count=0;
    }
}

int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;                  // Stop watchdog timer to prevent time out reset
    BCSCTL1&=~XT2OFF;                                 //XT2启动
    BCSCTL2=SELS+DIVS1+DIVS0;         // 选择XT2CLK作为SMCLK时钟,分频比为8
    CCTL0=CCIE;                                            // 使能定时器中断
    CCR0=97;                                                             //采样频率为1280HZ
    _EINT();                                          //使能全局中断
    int i,j,k;
    ADCinit();    
    for(;;)
    { TACTL=0X02D4;                          //定时器加计数模式,分频比为8,使用SMCLK时钟
      for(i=1000;i>0;i--)                         //给采样充足时间
        for(k=125;k>0;k--);
      P4DIR=0xff;
      P4OUT=0Xff;
      for(j=100;j>0;j--)
        for(k=125;k>0;k--);
      P4OUT =0x0;
    }  
 return 0;
}

回复评论 (4)

楼主,代码中的count没有定义
点赞  2011-10-27 10:49

回复 沙发 wstt 的帖子

count我定义的是全局变量,用来统计采样点数的,忘了声明了!
点赞  2011-10-27 11:26

回复 楼主 zhijun0906 的帖子

顶~~~~~~~~~~~~~~~~
点赞  2011-10-27 11:27
fet140_adc12_01.rar (974 Bytes)
(下载次数: 17, 2011-10-27 20:26 上传)
建议看一下官网例程:
点赞  2011-10-27 20:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复