在調試TimerA OR TimerB上發了將兩次將近兩天的時間.在此如不 做出總結與糾正,以后可能會出現同樣的問題.當然全不是TimerA 定時器設置問題而是在MSP430基礎方面做得不夠. 程序如下: #include"MSP430x16x.h" unsigned char LED; void Init_SystemClock(void) { unsigned char i; BCSCTL1=0x00; //XT2OFF XT2 DIVA.1 DIVA.0 XT5V RSE.2 RSE.1 RSE.0 BCSCTL2|=SELM1+SELS; //SSEL1 SSEL0 DIVM.1 DIVM.0 SELS DIVS.1 DIVS.0 DOR do { IFG1&=~OFIFG; for(i=0xFF;i>0;i--); } while((IFG1&OFIFG)!=0); P5DIR=BIT4+BIT5+BIT6; //MCLK SMCLK ACLK P5SEL|=BIT4+BIT5+BIT6; //功能端口輸出 } void Init_Port(void) { P4DIR=0xFF; P4SEL=0x00; // return; } void Init_TimerA(void) { TACTL=TASSEL0+TACLR; TACCTL0=CCIE; // TACCR0=32768; TACTL|=MC0; //TACTL|=TAIE; return; } #pragma vector = TIMERA0_VECTOR __interrupt void TimerA_ISR(void) { LED=((LED==0X80)?0x01LED<<1)); P4OUT=LED; } void main(void) { WDTCTL=WDTPW+WDTHOLD; Init_SystemClock(); Init_Port(); Init_TimerA(); _EINT(); LED=0x80; while(1); } 程序下載到MSP430F1611后出現如下情況: 1:程序編譯通過卻LED不能顯示 2ED出現后不是按設定的部位顯示--0X01--而是顯示0X02- >0X01...0X80; 經過單步跟蹤發現for(i=0xFF;i>0;i--);上的問題, 原定義為: unsigned char i; for(i=0;i<256;i++); i已經超值.定義unsigend char i 取值范圍是:0 ~ 255 最好寫成 unsigned char i; for(i=0xff;i>0;i--); 寫成: unsigned char i; for(i=0;i<255;i++); 在觀察窗口發現 i:Error(col1):Unknown or ambiguous symbol.i --i的值不能確定(模棱兩可) 解決情況1 出現情況2. 原ED=0x01;放在 _EINT(); 前; 但ED=0x01;放在 _EINT(); 后顯示0X40->0x02>0X01...0X80; 經分析: 將LED=0X80 放在 _EINT(); 后,顯示正常. 同時發現MSP430各寄存器是采用位操作. <位或>是采用:BCSCTL2=SELM1+SELS; 還是 :BCSCTL2|=SELM1+SELS; 但結果還是一樣的.這當然要和<位與>區分了 ^_^ |