|
本程序是《MSP430系列單片機(jī)系統(tǒng)工程設(shè)計(jì)與實(shí)踐》書里面的源碼,(包含工程文件 (例2.8.19)))完整例程下載:http://www.zg4o1577.cn/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; // 配置晶振負(fù)載電容
- P1DIR &=~(BIT7); // P1.7設(shè)為輸入(可省略)
- P1IES |= BIT7; // P1.7設(shè)為下降沿中斷
- P1IE |= BIT7; // 允許P1.7中斷
- TACTL = TASSEL_1 + MC_2 + TAIE + TACLR; // TA清零并開始計(jì)時,ACLK,開中斷
- BTCTL=0;
- LCD_Init();
- _EINT(); // 總中斷允許
- LPM3;
- }
- #pragma vector = PORT1_VECTOR //P1口中斷入口
- __interrupt void P1_ISR(void)
- {
- int i;
- _BIC_SR(SCG0); //清除SR寄存器的SCG0控制位,恢復(fù)時鐘準(zhǔn)確性
- for(i=0;i<600;i++); //抗抖動,略延遲后再做判斷
- if((P1IN & BIT7) == BIT7) //如果P1.7變高(斷開),則判為毛刺
- {
- P1IFG=0; return; //認(rèn)為開關(guān)信號無效,不作處理直接退出
- }
- if(P1IFG & BIT7) //判斷P1中斷標(biāo)志第7位(P1.7)
- {
- Period=TA_OverflowCnt*65536+TAR; //得到相鄰兩次中斷之間的間隔時間
- TA_OverflowCnt=0;
- TACTL |= TACLR; // TA清零,重新計(jì)時
- Speed=(long)32768*Circle*36/(10*Period);
- LCD_DisplayDecimal(Speed,2);
- }
- P1IFG=0; //清除P1所有中斷標(biāo)志位
- }
- #pragma vector=TIMERA1_VECTOR
- __interrupt void TA_ISR(void) //計(jì)滿至65536溢出
- {
- switch( TAIV )
- {
- case 2: break;
- case 4: break;
- case 10: TA_OverflowCnt++; //TA每次溢出,溢出次數(shù)變量+1
- break;
- }
- }
復(fù)制代碼
|
|