////*****重庆三峡学院电子与信息工程学院 创新实验室 唐老鸭*****//// //可以通过控制CCTL1 CCTL2 TAIE 控制三个定时 多源中断,需要用到中断标志位 #include <msp430x14x.h> unsigned char num=0; void main (void) { WDTCTL= WDTPW + WDTHOLD; //设置看门狗控制寄存器,关看门狗 /* unsigned char j;//使用外部高频晶体振荡器 BCSCTL1&=~XT2OFF; do{ IFG1&=~OFIFG; for(j=0XFF;j>0;j--); }while((IFG1&OFIFG)); BCSCTL2|=SELM_2; */ TACTL = TASSEL_1 +MC_2+TAIE; // 设置定时器A控制寄存器,必须选择为持续计数模式,且TAIE开 // TASSEL_1选择辅助时钟ACLK,TASSEL_2选择子系统时钟SMCLK; CCR1 = 8192; // CCTL2=CCIE; CCR2 = 4096; P2DIR |=BIT7+BIT0+BIT4; //P2.7为输出 _EINT(); //使能中断,这是一个C编译器支持的内部过程。 while(1); //无限次while循环 } #pragma vector=TIMERA1_VECTOR//固定的格式,必须为TIMERA1_VECTOR, __interrupt void Timer_A (void) //定时器A的CC0中断处理程序 必须是没有返回值的 //TIMERA0_VECTOR=6*2,等于基地址0xFFE0+12=0xFFEC { switch( TAIV ) { case 2: P2OUT ^= BIT0; //优先级最高 CCR1 += 8192; // 必须的,否则将重0计数到最大 break; case 4: P2OUT ^= BIT4; CCR2 +=4096;// 必须的,否则将重0计数到最大 break; case 10: num++;P2OUT ^= BIT7; if(num==5) CCTL1=CCIE; if(num==10) CCTL2=CCIE; if(num==15) { CCTL1=0; CCTL2=0; num=0; }
break; } }
|