- #include <msp430x42x.h>
- #include "LCD_Display.h"
- unsigned int TA_OverflowCnt; // TA溢出次數(shù)存放變量
- unsigned long int Period; // 周期測量結(jié)果存放變量
- unsigned int PervCapVal; // 前一次捕獲值存放變量
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
- FLL_CTL0 |= XCAP18PF; // 配置晶振負載電容
- P1DIR &=~(BIT2); // P1.2(TA1)設(shè)為輸入(可省略)
- P1SEL |= BIT2; // P1.2設(shè)為第二功能(TA1)
- TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // TA連續(xù)計數(shù),開始計時,SMCLK,開中斷
- TACCTL1 = CAP + CM_1 + CCIS_1 + SCS + CCIE;
- //捕獲模塊1啟動,選擇TA1(P1.2)引腳作為捕獲源,上升沿捕獲,同步模式,開啟捕獲中斷
- BTCTL=0;
- LCD_Init();
- _EINT(); // 總中斷允許
- LPM0; // 進入低功耗模式3休眠,全部程序在中斷內(nèi)執(zhí)行
- }
- #pragma vector=TIMERA1_VECTOR
- __interrupt void TA_ISR(void) //計滿至65536溢出
- {
- switch( TAIV )
- {
- case 2: Period=TA_OverflowCnt*65536 + TACCR1 - PervCapVal;//計算周期
- PervCapVal=TACCR1; //保存捕獲值,供下一次使用
- TA_OverflowCnt=0; //溢出次數(shù)清零
- LCD_DisplayLongNumber(Period); //顯示
- break;
- case 4: break;
- case 10: TA_OverflowCnt++; //TA每次溢出,溢出次數(shù)變量+1
- break;
- }
- }
復制代碼 |