<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    TimerA流水燈問題分析

    發布時間:2008-11-3 21:06    發布者:MSP430
    關鍵詞: TimerA , 流水
    在調試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;
    但結果還是一樣的.這當然要和<位與>區分了 ^_^
    本文地址:http://www.portaltwn.com/thread-2874-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設計風險
    • 想要避免發生災難,就用MPLAB SiC電源仿真器!
    • Cortex-M4外設 —— TC&TCC結合事件系統&DMA優化任務培訓教程
    • 我們是Microchip
    • 貿澤電子(Mouser)專區

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷