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

📄 lab-05b.c

📁 MSP430FG4619的TimerA子程序
💻 C
字号:
//******************************************************************************
//  MSP430xG46x Demo - Timer_A, TACCR2 CAP mode. Mode ISR, DCO SMCLK
//
//  Description: SMCLK provides clock source for TACLK.TACCR0 = 50000-1
//  TACCR2 CAP the TACCR1 out ,  CCR1 += 5000;
//  CPU is normally off and used only during TA_ISR.
//  ACLK = 32.768kHz, MCLK = SMCLK = TACLK = Default DCO
//
//           MSP430xG461x
//         ---------------
//     /|\|            XIN|-
//      | |               |   32kHz
//      --|RST        XOUT|-
//        |           P1.2|-->  TA1
//        |           P2.0|-->  TA2
//
//   FengLF
//   LSD SCIENCE& TECHNOLOGY CO.,LTD 
//   2007.06
//   Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include <msp430xG46x.h>


unsigned  int cap_data,data1,data2;
unsigned  int j;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             
  TACTL = TASSEL1 + ID0 + TACLR;        // 使用 SMCLK 信号, 清除 TAR
  CCTL2 = CM0 + SCS + CAP + CCIE;       // 上升沿捕获,同步捕获,使能 CCR2中断
  CCR0 = 50000-1;                          
  CCTL0 |= CCIE;
  CCTL1 |= OUTMOD_7;                     
  CCR1 = 0;
  P1DIR |= BIT2;                        // P1.2输出
  P1SEL |= BIT2;                        // P1.2 TA1
  P2DIR &= ~BIT0;                       // P2.0 输入
  P2SEL |= BIT0;                        // P2.0 TA2
  TACTL |= MC0;                         // Timer_a 增计数模式
  _EINT();

  for (;;)
  {
    if (data2 > data1)
    {
      cap_data = data2-data1;
    }
    else
    {
      cap_data = data1-data2 + 65535 ;
    }
    _BIS_SR(CPUOFF);
    _NOP();
  }
}

//------------------------------------------------------------------------
//  Timer A0 中断服务程序
//------------------------------------------------------------------------
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  if(CCR1 == 50000)
  {
    CCR1 = 0;
  }
  else
  {
    CCR1 += 500;
  }
}
//------------------------------------------------------------------------
//  Timer A1 中断服务程序
//------------------------------------------------------------------------
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void)
{
  switch(TAIV)                              
  {
    case 2: break;
    case 4:           
               if(CCTL2 & CM0)                    
         {
           data1 = CCR2 ;
           CCTL2 = (CCTL2 & (~CM0)) | CM1;   
         }
         else if (CCTL2 & CM1)                
         {
           data2 =CCR2 ;
           CCTL2 = (CCTL2 & (~CM1)) | CM0;   
         }                          
      
         break;
    case 10: break;
  }
}

⌨️ 快捷键说明

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