- #include <msp430x42x.h>
- #include "LCD_Display.h"
- unsigned int TA_OverflowCnt; // TA溢出次数存放变量
- unsigned long int Period; // 周期测量结果存放变量
- unsigned int PervCapVal; // 前一次捕获值存放变量
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
- FLL_CTL0 |= XCAP18PF; // 配置晶振负载电容
- P1DIR &=~(BIT2); // P1.2(TA1)设为输入(可省略)
- P1SEL |= BIT2; // P1.2设为第二功能(TA1)
- TACTL = TASSEL_2 + MC_2 + TAIE + TACLR; // TA连续计数,开始计时,SMCLK,开中断
- TACCTL1 = CAP + CM_1 + CCIS_1 + SCS + CCIE;
- //捕获模块1启动,选择TA1(P1.2)引脚作为捕获源,上升沿捕获,同步模式,开启捕获中断
- BTCTL=0;
- LCD_Init();
- _EINT(); // 总中断允许
- LPM0; // 进入低功耗模式3休眠,全部程序在中断内执行
- }
- #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; //溢出次数清零
- LCD_DisplayLongNumber(Period); //显示
- break;
- case 4: break;
- case 10: TA_OverflowCnt++; //TA每次溢出,溢出次数变量+1
- break;
- }
- }
复制代码 |