我利用以下程序,使用定时器A产生固定的38KHz波形,利用定时器B中断开关暂停定时器A,以实现断断续续的38KHz波形。 可结果一直持续输出38KHz的波形,为什么?
#include <msp430x14x.h>
#define T_CYC 104 //get 38kHz (timer 2MHz out_module7)
#define T_ON 35 //duty cycle (timer 2MHz out_module7)
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
volatile unsigned int i;
BCSCTL1 &= ~XT2OFF; // XT2= HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 = SELM_2 + SELS + DIVS_1; // MCLK= XT2 SMCLK= XT2/2 (safe)
P1DIR = 0;
P1DIR |= BIT6;
P1SEL = 0;
P1SEL |= BIT6; //SET P1.6 TA1 OUT module
CCTL1 = 0;
CCTL1 |= OUTMOD_7;
CCR0 = T_CYC;
CCR1 = T_ON;
TACTL = 0;
TACTL = TASSEL_2 + TAIE; // SMCLK, contmode
P2DIR = BIT0;
TBCCR0 = 32333;
TBCCTL0 = 0;
TBCCTL0 |= CCIE;
TBCTL = 0;
TBCTL = CNTL_0 + TBSSEL_1 + MC_1 + TBIE; //定时器B时钟信号选择ACLK,同时设置定时器B计数模式为连续增计模式,TBR(MAX) = 0xFFFFh
TACTL |= MC_1;
_EINT(); //中断允许
for(;;)
_BIS_SR(LPM0_bits + GIE); // Enter LPM0
}
#pragma vector=TIMERB0_VECTOR //定时器B TACCR0中断处理
__interrupt void timer_b0(void)
{
_BIC_SR_IRQ(LPM0_bits); // Clear LPM0 bits from 0(SR)
TACTL ^= MC_1;
P2OUT ^= BIT0;
}