问下各位大神,这个msp430的ADC采样保持时间是多少

2019-03-24 13:32发布

想问下下面这串代码中,ADC的采样保持时间怎么算?转换一次的时间又是多少?怎么算?最好能告诉我是由什么控制的
//             -----------------
//         /||              XIN|-
//           ||                 |32kHz
//          --|RST          XOUT|-
//            |                 |
//            |                 |
//     Vin -->|P6.0/A0          |

#include<msp430x54x.h>

#define uchar unsigned char
#define uint unsigned int

uchar  T_5S;               //AD转换,5秒定时。
uchar  AD_Start;           //AD_Start=1 允许AD转换,AD
uint Results[32];          //存放ADC的转换结果
uint Average;              //AD平均值
void Init_Ta0(void);



void main(void)
{   
      WDTCTL=WDTPW+WDTHOLD;                          //设置看门狗控制寄存器,关看门狗
      Init_Ta0();                                    //TA0初始化
      T_5S=0;                                        //AD转换,5秒定时。
  //---------------------------------------------------------------------- 
      ADC12CTL0 = ADC12SHT02 + ADC12ON;         // Sampling time, ADC12 on
      ADC12CTL1 = ADC12SHP+ADC12CONSEQ0;        // Use sampling timer
      ADC12IE = 0x01;                           // Enable interrupt
      ADC12CTL0 |= ADC12ENC;                    //
      P6DIR&=~BIT0;                             //P6.0输入
      P6SEL |= 0x01;                            // P6.0口第二功能 P6.0 ADC option select
  //---------------------------------------------------------------------
     _EINT();                                   //打开总中断   
     while (1)
  {
    if(AD_Start==1){ADC12CTL0 |= ADC12SC;}         // T_5S每隔5S转换一次AD    ,Start sampling/conversion
  }
}

/*************************************************
  函数(模块)名称:voidInit_Ta0(void)
  功能:  TA0初始化
  本函数(模块)调用的函数(模块)清单:
  调用本函数(模块)的函数(模块)清单:
  输入参数:         void
  输出参数:         void
  函数返回值说明:
  使用的资源
  其它说明:
*************************************************/
void Init_Ta0(void)
{
      TA0CTL=TASSEL_0 + TACLR;                       //选择辅助时钟ACLK,计数器清除
      TA0CCTL0=CCIE;                                 //CCR0中断使能
      TA0CCR0=16384;                                 //设置计数器CCR0的初值, 1S
      TA0CTL|=MC_0;                                  //减计数模式
}

//------------------中断服务程序---------------------------
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)           //1S中断
{
    T_5S++;
    if(T_5S>=5){ AD_Start=1;T_5S=0;}    //当定时5秒时启动AD

}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR(void)

{
      static uchar index = 0;
   
    Results[index++] = ADC12MEM0;                      // Move results, IFG is cleared
    if(index == 9)               //采集10次AD
    {
         uchar i;
        
         Average = 0;
         for(i = 0; i < 10; i++)                  //10个数据
            Average += Results;                //结果累加   
         average=(average/10);                    //即除以10求平均值 (最后得到的AD值)
                                    
        
         index = 0;                              //清0
 
    }  
 
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
挨紧
2019-03-24 18:48
< ADC12CTL0 = ADC12SHT02 + ADC12ON;         // Sampling time, ADC12 on
根据这句话自己计算,看数据手册和程序

一周热门 更多>

相关问题

    相关文章