/********************************************************************************
CCR0捕獲/比較寄存器--比較功能中斷定時
簡述:本程序是利用了定時器A 模塊中的CCR0 捕獲/比較寄存器的值與定時器A 的值進(jìn)行
比較。如果比較相等就產(chǎn)生CCR0 中斷,進(jìn)入Timer A0 中斷服務(wù)程序進(jìn)行中斷處理。以P1.0
作為指示,反轉(zhuǎn)速度= 32768/(2*1000) = 16.384 。
ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO ~800kHz
本程序TA(Timer A)采用增計(jì)數(shù)模式。在增計(jì)數(shù)模式時,當(dāng)TA 中的計(jì)數(shù)值與CCR0的值相
等時(或TA>CCR0 的值時),TA 被清零并且重新由0 開始計(jì)數(shù)。在此同時,CCR0 產(chǎn)生中斷。
產(chǎn)生CCIFG0 標(biāo)志置位,及TAIFG 定時器A 溢出標(biāo)志置位。CCIFG0,TAIFG 在被中斷服務(wù)程
序處理時是自動復(fù)位。如本例中執(zhí)行__interrupt void Timer_A (void)時,CCIFG0已被清除標(biāo)志
位。
例程:
***********************************************************************************/
//*********************************************************************
#include <msp430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看門狗定時器
P3DIR |= BIT4; //設(shè)P3.4 為輸出
CCTL0 = CCIE; //CCR0開中斷允許
CCR0 = 10000-1; //向CCR0捕獲/比較寄存器裝入初值,用于比較
TACTL = TASSEL_1 + MC_1; //選ACLK為定時器A 時鐘源, 增計(jì)數(shù)模式
_BIS_SR(LPM3_bits + GIE); //進(jìn)入LPM3模式/ 開中斷允許
}
// Timer A0中斷服務(wù)程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P3OUT ^= BIT4; //反轉(zhuǎn) P3.4
}
//**********************************************************************
比較。如果比較相等就產(chǎn)生CCR0 中斷,進(jìn)入Timer A0 中斷服務(wù)程序進(jìn)行中斷處理。以P1.0
作為指示,反轉(zhuǎn)速度= 32768/(2*1000) = 16.384 。
ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO ~800kHz
本程序TA(Timer A)采用增計(jì)數(shù)模式。在增計(jì)數(shù)模式時,當(dāng)TA 中的計(jì)數(shù)值與CCR0的值相
等時(或TA>CCR0 的值時),TA 被清零并且重新由0 開始計(jì)數(shù)。在此同時,CCR0 產(chǎn)生中斷。
產(chǎn)生CCIFG0 標(biāo)志置位,及TAIFG 定時器A 溢出標(biāo)志置位。CCIFG0,TAIFG 在被中斷服務(wù)程
序處理時是自動復(fù)位。如本例中執(zhí)行__interrupt void Timer_A (void)時,CCIFG0已被清除標(biāo)志
位。
例程:
***********************************************************************************/
//*********************************************************************
#include <msp430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看門狗定時器
P3DIR |= BIT4; //設(shè)P3.4 為輸出
CCTL0 = CCIE; //CCR0開中斷允許
CCR0 = 10000-1; //向CCR0捕獲/比較寄存器裝入初值,用于比較
TACTL = TASSEL_1 + MC_1; //選ACLK為定時器A 時鐘源, 增計(jì)數(shù)模式
_BIS_SR(LPM3_bits + GIE); //進(jìn)入LPM3模式/ 開中斷允許
}
// Timer A0中斷服務(wù)程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P3OUT ^= BIT4; //反轉(zhuǎn) P3.4
}
//**********************************************************************