#include "msp430g2553.h"
unsigned char num=0;
void main (void)
{
// Stop watchdog
timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL3 |= LFXT1S_2; // Set LFXT1为vol时钟即12kHZ
CCR0 =6000;
// CCTL0|= CCIE; //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断
CCR1 =3000; //设置捕获/比较寄存器,初始值为12000,对于ACLK时钟频率为12khz的频率,相当于1s
// CCTL2=CCIE;
CCR2 = 1500;
TA0CTL = TASSEL_1 +TACLR+MC_1+TAIE; // 设置定时器A控制寄存器,
// TASSEL_1选择辅助时钟ACLK,TASSEL_2选择子系统时钟SMCLK,与dco有关;
// TACLR=0x0004,清除定时器A计数器
//TACTL |= MC0(MC_1); //设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数
P1DIR |=BIT6+BIT0+BIT3;
_EINT(); //使能中断,这是一个C编译器支持的内部过程。
while(1); //无限次while循环
}
#pragma vector=TIMER0_A1_VECTOR//固定的格式,必须为TIMERA1_VECTOR,
__interrupt void Timer_A (void) //定时器A的CC0中断处理程序 必须是没有返回值的
{
switch( TAIV )
{
case 2: P1OUT ^= BIT0; //优先级最高
//CCR1 += 3000; // 必须的,否则将重0计数到最大
break;
case 4: P1OUT ^= BIT6;
//CCR2 +=6000;// 必须的,否则将重0计数到最大
break;
case 10: num++;
P1OUT ^= BIT3;
if(num==5)
CCTL1=CCIE;
if(num==10)
CCTL2=CCIE;
if(num==15)
{
CCTL1=0;
CCTL2=0;
num=0;
}
break;
}
}
//要是使用的持续计数模式,则应该每次进入中断后CCRx +=6000,确保每次重指定的数值开始计数
3