标题: MSP430单片机 定时器TA计数 程序 [打印本页]

作者: 51hei单片    时间: 2016-3-14 18:55
标题: MSP430单片机 定时器TA计数 程序
本程序是《MSP430系列单片机系统工程设计与实践》书里面的源码,(包含工程文件 (例2.8.21)))完整例程下载:http://www.51hei.com/bbs/dpj-46245-1.html

关于本程序的详细解说大家可以下载电子书点击上图即可
  1. #include <msp430x42x.h>
  2. #include "LCD_Display.h"
  3. unsigned long int Freq;
  4. unsigned int TA_OverflowCnt;              //TA溢出次数存放变量
  5. void main( void )
  6. {
  7.    WDTCTL = WDTPW + WDTHOLD;          // 停止看门狗
  8.    FLL_CTL0 |= XCAP18PF;              // 配置晶振负载电容
  9.    P1DIR &=~BIT5;                     // P1.5(TACLK)作为输入引脚
  10.    P1SEL |= BIT5;                     // 允许第二功能,作为TACLK输入
  11.    BTCTL = BTDIV+BT_fCLK2_DIV128;     // BasicTimer 设为1秒1次中断
  12.    IE2 |= BTIE;                       // 允许BasicTimer中断
  13.    LCD_Init();
  14.    _EINT();                           // 允许总中断
  15.    while(1)
  16.    {
  17.      LPM3; //休眠,等待被BasicTimer唤醒
  18.      //-------------------------以下代码每秒运行一次------------------   
  19.      Freq=TA_OverflowCnt*65536 + TAR;  // 读取上次TA计数值及溢出次数,计算频率。
  20.      TA_OverflowCnt=0;                             // 溢出次数清零
  21.      TACTL = TASSEL_0 + MC_2 + TAIE + TACLR; // TA清零并重新开始计数
  22.      LCD_DisplayLongNumber(Freq);
  23.    }
  24. }

  25. #pragma vector = BASICTIMER_VECTOR
  26. __interrupt void BT_ISR(void)             // 1秒一次中断(由BasicTimer所产生)
  27. {
  28.    __low_power_mode_off_on_exit();        // 唤醒CPU
  29. }

  30. #pragma vector=TIMERA1_VECTOR             //为测量大于65536Hz频率,计数溢出中断
  31. __interrupt void TA_ISR(void)
  32. {
  33.   switch( TAIV )
  34.   {
  35.     case  2:   break;
  36.     case  4:   break;                          
  37.     case 10:  TA_OverflowCnt++;           //TA每次溢出,溢出次数变量+1
  38.                 break;
  39.   }
  40. }  
复制代码








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1