⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fet140_adc12_11.c

📁 msp430的C语言示例 来自TI官方
💻 C
字号:
//*****************************************************************************
//  MSP-FET430P140 Demo - ADC12, Single Channel Rpt Mode, TA1 as Sample Trigger
//
//  Description: Sample and convert A0 using Timer_A as sample trigger in
//  Pulse Sample mode. Put "Num_of_Results" ADC12MEM0 values in results[]
//  and Light LED (P1.0) when done.
//
//               MSP430F149
//             ---------------
//            |               |
//     Vin -->|P6.0/A0        |
//            |               |
//
//  H. Grewal
//  Texas Instruments Inc.
//  Feb 2005
//  Built with IAR Embedded Workbench Version: 3.21A
//*****************************************************************************
利用P6.0为ADC输入,用CCR1产生ADC12所需的采样触发信号源。
P6.0采用单通道多次采方式采样,共采样512次后进入LPM3模式。
TACLK = ACLK

#include  <msp430x14x.h>

#define   Num_of_Results   512
int results[Num_of_Results] = {0};

void ADC_Init(void);

void main(void)
{
  WDTCTL = WDTPW | WDTHOLD;                 // 停止看门狗
  ADC_Init();                               // 初始化ADC12
  ADC12CTL0 |= ENC;                         // ADC开始转换
  _BIS_SR(LPM0_bits);                       // 进入LPM0模式
}


void ADC_Init(void)
{
  P1DIR = 0xff;                             // 设P1方向为输出
  P1OUT = 0;                                // P1口输出0
  P6SEL |= 0x01;                            // P6.0设为AD0输入功能
  ADC12CTL0 = ADC12ON+SHT0_1+REF2_5V+REFON; // 设置ADC12
  //ADC12内核开+采样保持时间系数(2)+选择内部参考电压+打开内部参考电压发生器

  ADC12CTL1 = SHP+CONSEQ_2+SHS_1;           
  //采样触发源来自采样定时器,由采样输入信号(ADC12CLK)的上升沿触发采样定时器
  //+单通道多次采样+采样触发源为Timer_A的输出单元out1输出的信号(由CCR1定时产生)

  ADC12MCTL0 = INCH_0 + SREF_1;
  //选择AD通道0+正参考电压=Vref+,负参考电压=AVss

  ADC12IE = 0x0001;                         // 开中断允许-ADC12IFG.0

  TACCR0 = 1500;                            // 延时,允许有足够时间用于整理
  TACCTL0 |= CCIE;                          // TA为比较模式(TA与CCRO比较),TA开中断允许

  TACTL = TASSEL_1 | MC_1;                  // TACLK = ACLK,定时器A为增计数模式工作.

  _BIS_SR(LPM3_bits + GIE);                 // 进入LPM3模式,开总中断允许,等待延时时间结束

  TACCTL0 &= ~CCIE;                         // 关闭CCR0捕获比较寄存器的中断

  P2SEL |= BIT3;                            // 设P2.3为TimerA out1输出功能
  P2DIR |= 0x08;			    // 设p2.3为输出
  TACCR0 = 7;                               // 初始化TACCR0,采样时钟源周期=CCR0+1

  TACCR1 = 4;                               // 初始化TACCR1,用于产一个TimerA.out1信号给ADC12做采样触发信号源
  TACCTL1 = OUTMOD_3;                       // CCR1捕获比较寄存器的OUT1输出单元输出为置位/复位模式

  TACTL = TACLR | MC_1 | TASSEL_1;          // 定时器时钟=ACLK, 清除TA,增计数模式
}

// Timer_A0 CCR0中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
  TACTL = 0;				    // TA控制寄存器清零
  LPM3_EXIT;                                // 在返回时退出LPM3模式
}


// ADC12中断服务程序
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
  static unsigned int index = 0;	    //静态变量

  results[index++] = ADC12MEM0;             // 移动ADC结果往results数组

  if (index == 512)			    //是否转换了512次?
  {
    ADC12CTL0 &= ~ENC;                      // 是,则停止转换
    index = 0;
    P1OUT |= 0x01;			    // P1.0=1
    _BIS_SR(LPM3_bits);                     // 进入LPM3模式
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -