新聞中心

        TimerA流水燈問題分析

        作者: 時(shí)間:2016-12-02 來(lái)源:網(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)閉
        主站蜘蛛池模板: 蒙自县| 新晃| 尤溪县| 高州市| 故城县| 信丰县| 筠连县| 临洮县| 溧阳市| 肥乡县| 望都县| 普安县| 惠州市| 泰和县| 金阳县| 八宿县| 玉门市| 石屏县| 绥芬河市| 靖边县| 河东区| 成都市| 昌乐县| 乡宁县| 广水市| 潍坊市| 东源县| 新沂市| 荥经县| 长寿区| 宝坻区| 榆林市| 潜江市| 镇江市| 普兰店市| 呼图壁县| 德阳市| 大连市| 观塘区| 施秉县| 平和县|