微控制器MSP430 - Timer_A 定時器中斷程式
阿新 • • 發佈:2018-12-04
一、利用定時器定時功能,實現定時器單個溢位中斷,實現 P3.0 方波輸出
#include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDTHOLD; // 停止看門狗定時器 P3DIR |= 0x04; // P3口初始化,設定為輸出模式 TA0CCR0 = 32768; // 定義中斷計數週期1s,時鐘頻率為32.768MHZ,32768 / 32768 = 1s TA0CCTL0 = CCIE; // TA0CCR0捕獲/比較中斷暫存器中斷使能 TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK時鐘源 MC_1,增計數模式 _BIS_SR(LPM3_bits + GIE); // 進入LPM3低功耗模式,開啟總中斷 } #pragma vector = TIMER0_A0_VECTOR __interrupt void Timer_A(void) // 定時器中斷觸發,P3輸出口異或,電平翻轉 { P3OUT ^= 0x04; }
二、利用定時器定時功能,實現定時器多個溢位,對應產生多箇中斷,實現 P3.0 輸出
#include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDTHOLD; // 停止看門狗定時器 P3DIR |= 0x04; // P3口初始化,設定為輸出模式 TA0CCR0 = 32768; // 定義中斷計數週期1s,時鐘頻率為32.768MHZ,32768 / 32768 = 1s TA0CCTL0 = CCIE; // TA0CCR0捕獲/比較中斷暫存器中斷使能 TA0CCR1 = 3276; // 定義中斷溢位週期100ms TA0CCTL1 = CCIE; // TA0CCR0捕獲/比較中斷暫存器中斷使能 TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK時鐘源 MC_1,增計數模式 _BIS_SR(LPM3_bits + GIE); // 進入LPM3低功耗模式,開啟總中斷 } #pragma vector = TIMER0_A0_VECTOR __interrupt void Timer_A(void) // 1s溢位中斷 { P3OUT = ~0x04; } #pragma vector = TIMER0_A1_VECTOR __interrupt void Timer_A1(void) // 100ms溢位中斷 { switch(TA0IV) { case 2:P3OUT = 0x04;break; case 4:break; case 10:break; } }