msp430定時器A中斷實例
#include <msp430x14x.h>
本文引用地址:http://www.ex-cimer.com/article/201611/316559.htm{
WDTCTL = WDTPW + WDTHOLD; //停止看門狗WDT,不使用內(nèi)部看門狗定時器。
P1DIR |= 0x01; //設(shè)置P1.0口方向為輸出。
CCTL0 = CCIE; //設(shè)置捕獲/比較控制寄存器中CCIE位為1,CCR0捕獲/比較功能中斷為允許。
CCR0 = 50000;//捕獲/比較控制寄存器CCR0初值為5000。
TACTL = TASSEL_2 + MC_2; //設(shè)置定時器A控制寄存器TACTL,使時鐘源選擇為SMCLK輔助時鐘。
_BIS_SR(LPM0_bits + GIE); //進入低功耗模式LPM0和開中斷
}
//定時器A 中斷服務(wù)程序區(qū)
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT ^= 0x01; //P1.0取反輸出
CCR0 += 50000; //重新載入CCR0捕獲/比較數(shù)據(jù)寄存器數(shù)據(jù)
}
//例程描述:利用定時器定時功能,實現(xiàn)P1.0方波輸出。
// 需要注意的是定時器中斷程序,采用向量查詢方式。
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止看門狗WDT
P1DIR |= 0x01; // 設(shè)置P1.0口方向為輸出。
TACTL = TASSEL_2 + MC_2 + TAIE; // 時鐘源選擇為SMCLK,選擇計數(shù)模式,定時器中斷開
_BIS_SR(LPM0_bits + GIE); //進入低功耗模式LPM0和開中斷
}
// Timer_A3 中斷向量(TAIV)處理
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; //CCR1不使用
case 4: break; //CCR2不使用
case 10: P1OUT ^= 0x01; //溢出
break;
}
}
評論