標題:
MSP430單片機 定時器TA計時 程序
[打印本頁]
作者:
51hei單片
時間:
2016-3-14 18:52
標題:
MSP430單片機 定時器TA計時 程序
本程序是《MSP430系列單片機系統(tǒng)工程設(shè)計與實踐》書里面的源碼,(包含工程文件 (例2.8.19)))完整例程下載:
http://www.torrancerestoration.com/bbs/dpj-46245-1.html
#include <msp430x42x.h>
#include "LCD_Display.h"
#define Circle 207 /*輪圈周長,單位cm*/
unsigned int TA_OverflowCnt; //TA溢出次數(shù)存放變量
unsigned long int Period; //周期測量結(jié)果存放變量
unsigned int Speed;
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 停止看門狗
FLL_CTL0 |= XCAP18PF; // 配置晶振負載電容
P1DIR &=~(BIT7); // P1.7設(shè)為輸入(可省略)
P1IES |= BIT7; // P1.7設(shè)為下降沿中斷
P1IE |= BIT7; // 允許P1.7中斷
TACTL = TASSEL_1 + MC_2 + TAIE + TACLR; // TA清零并開始計時,ACLK,開中斷
BTCTL=0;
LCD_Init();
_EINT(); // 總中斷允許
LPM3;
}
#pragma vector = PORT1_VECTOR //P1口中斷入口
__interrupt void P1_ISR(void)
{
int i;
_BIC_SR(SCG0); //清除SR寄存器的SCG0控制位,恢復時鐘準確性
for(i=0;i<600;i++); //抗抖動,略延遲后再做判斷
if((P1IN & BIT7) == BIT7) //如果P1.7變高(斷開),則判為毛刺
{
P1IFG=0; return; //認為開關(guān)信號無效,不作處理直接退出
}
if(P1IFG & BIT7) //判斷P1中斷標志第7位(P1.7)
{
Period=TA_OverflowCnt*65536+TAR; //得到相鄰兩次中斷之間的間隔時間
TA_OverflowCnt=0;
TACTL |= TACLR; // TA清零,重新計時
Speed=(long)32768*Circle*36/(10*Period);
LCD_DisplayDecimal(Speed,2);
}
P1IFG=0; //清除P1所有中斷標志位
}
#pragma vector=TIMERA1_VECTOR
__interrupt void TA_ISR(void) //計滿至65536溢出
{
switch( TAIV )
{
case 2: break;
case 4: break;
case 10: TA_OverflowCnt++; //TA每次溢出,溢出次數(shù)變量+1
break;
}
}
復制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1