#include <msp430f5529.h>
void main(void) { WDTCTL=WDTPW+WDTHOLD; P1DIR|=(BIT1+BIT2+BIT3+BIT4+BIT5);//P1.1-P1.5為輸出方向 P1OUT=0x00; //全部拉低,初始化LED全滅 TA0CCTL1=CCIE; //捕獲比較器1開啟CCIFG位中斷 TA0CCR1=13107; //置入要比較的數(shù)值0xff/5=13107 TA0CCTL2=CCIE; //捕獲比較器2開啟中斷 TA0CCR2=26214; //13107*2=26214 TA0CCTL3=CCIE; //捕獲比較器3開啟中斷
TA0CCR3=39321; //13107*3=39321 TA0CCTL4=CCIE; //捕獲比較器4開啟中斷 TA0CCR4=52428; //13107*4=52428 TA0CTL|=TACLR+TAIE; //開啟中斷并清零 TA0CTL|=TASSEL_1+MC_2+TAIE;//選擇SCLK32.768KHZ作為時鐘,選用連續(xù)模式,并開啟中斷 /*這樣的話,5個燈閃一遍的時間為0xffff/32768=2S*/ __enable_interrupt(); //開啟總中斷 while(1); } /*TIMER0_A0_VECTOR是計時器0的CCR0的中斷寄存器,TIMER0_A1_VECTOR是計時器0的CCR1-CCR4、TA的寄存器*/ /*同理定時器TA1也是分為兩個TIMER1_A0_VECTOR和TIMER1_A1_VECTOR*/ #pragma vector=TIMER0_A1_VECTOR __interrupt void TimerA(void) { switch(__even_in_range(TA0IV,14)) /* 這句話的意思是:只有在TA0IV的值是在0--14內的偶數(shù)時才會執(zhí)行switch函數(shù)內的語句 其作用是提高switch語句的效率*/ { case 2:P1OUT=BIT1;break; //TACCR1 CCIFG置位,表明計數(shù)值和設定的13107相等了,也就是說計了0.4S了 case 4:P1OUT=BIT2;break; //TACCR2 CCIFG置位,表明計了0.8S了 case 6:P1OUT=BIT3;break; //TACCR3 CCIFG置位,表明計了1.2S了 case 8:P1OUT=BIT4;break; //TACCR4 CCIFG置位,表明計了1.6S了 case 14:P1OUT=BIT5;break; //TAIFG置位,表明計了2S了 default:break; } }
|