<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          TimerA流水燈問題分析

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          在調(diào)試TimerA OR TimerB上發(fā)了將兩次將近兩天的時(shí)間.在此如不
          做出總結(jié)與糾正,以后可能會(huì)出現(xiàn)同樣的問題.當(dāng)然全不是TimerA
          定時(shí)器設(shè)置問題而是在MSP430基礎(chǔ)方面做得不夠.
          程序如下:
          #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后出現(xiàn)如下情況:
          1:程序編譯通過卻LED不能顯示
          2ED出現(xiàn)后不是按設(shè)定的部位顯示--0X01--而是顯示0X02-
          >0X01...0X80;
          經(jīng)過單步跟蹤發(fā)現(xiàn)for(i=0xFF;i>0;i--);上的問題,
          原定義為:
          unsigned char i;
          for(i=0;i<256;i++);
          i已經(jīng)超值.定義unsigend char i 取值范圍是:0 ~ 255
          最好寫成
          unsigned char i;
          for(i=0xff;i>0;i--);
          寫成:
          unsigned char i;
          for(i=0;i<255;i++); 在觀察窗口發(fā)現(xiàn) i:Error(col1):Unknown
          or ambiguous symbol.i --i的值不能確定(模棱兩可)
          解決情況1 出現(xiàn)情況2.
          原ED=0x01;放在 _EINT(); 前;
          但ED=0x01;放在 _EINT(); 后顯示0X40->0x02>0X01...0X80;
          經(jīng)分析:
          將LED=0X80 放在 _EINT(); 后,顯示正常.
          同時(shí)發(fā)現(xiàn)MSP430各寄存器是采用位操作.
          <位或>是采用:BCSCTL2=SELM1+SELS;
          還是 :BCSCTL2|=SELM1+SELS;
          但結(jié)果還是一樣的.這當(dāng)然要和<位與>區(qū)分了 ^_^


          關(guān)鍵詞: TimerA流水燈問題分

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();