[资料分享] 有关MSP430F149的ADC转换过程解释

Aguilera   2018-1-17 22:02 楼主

关于MSP430F149的A/D转换:(都必须经过以下阶段)

1、设置通道                  

2、打开ADC,设置采样时间     

3、使用采用定时器                       

4、设置参考电压   

5、使能开始                  

6、采样开始               

7、等待转换完成                             

8、把转换的值存入变量                    

一、单通道单次转换()


#include

#define uint unsigned int

/**********************************************************************************

                 延时语句

*********************************************************************************/

#define CPU_F ((double)8000000.0)

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))


uint ad_temp;

void main(void)

{

     WDTCTL=WDTPW+WDTHOLD;                        //关闭看门狗

     P6SEL=0X01;                                                        //通道0

     ADC12CTL0=ADC12ON+SHT0_2+MSC;       //打开ADC12内核+采样周期+仅首次转换由SHI信号的上升沿触发采样定时器后面的采样在前一次完成后,立即进行

/*

1、ADC12ON: ADC12内核控制位   0:关闭内核   1:表示打开内核

2、ADC12CTL0 只有在ENC=0时才能被修改

*/

     ADC12CTL1=SHP+CONSEQ_0;                      //SAMPCON源自采样定时器,由采样输入信号的上升沿触发+单通道单次转换

/*

1、SHP  采样信号(SAMPCON)选择控制位

       0:采样信号源自采样触发器输入信号

       1:采样信号源自采样采样定时器,由采样输入信号的上升沿触发采样定时器

2、CONSEQ  转换模式选择位

       0:单通道单次转换

       1:序列通道单次转换模式

        2:单通道多次转换模式

        3:序列通道多次转换模式

*/

     ADCMCTL0=SREF_0;                                        //Vr+=AVcc,Vr-=AVss;

/*

SREF  参考电压选择位

*/

    ADC12CTL0|=ENC;                                               //首次转换由SAMPCON上升沿启动

/*

ENC 转换允许位

   0:ADC12为初始状态,不能启动A/D转换

   1:首次转换由采样信号上升沿启动

*/

    ADC12CTL0|=ADC12SC;                                     //采样/转换控制位开

/*

    ADC12SC  采样/转换控制位

*/

    delay_ms(100);                                                      //等待转换完成

   ad_temp=ADC12MEM0;                                       //将转换的值赋给变量ad_temp;

   delay_ms(50);

}

二、单通道多次转换

void main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  P6SEL=0x01;
  ADC12CTL0=ADC12ON+SHT0_0+MSC;//打开内核,设置采样时间,设置采样模式
  ADC12CTL1=SHP+CONSEQ_2;       //选择采样信号,采用单通道多次转换模式
  ADC12IE=0X01;                                 //使能中断ADC12IFG.0
  ADC12CTL0|=ENC;                //转换允许
  _EINT();
  ADC12CTL0|=ADC12SC;            //开始转换
  _BIR_SR(LPM0_bits);
}
#pragma vector = ADC_VECTOR
__interrupt void ADC12ISR(void)
{

  ad_temp = ADC12MEM0;
  
}


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复