• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > stc單片機(jī)不斷電下載程序

    stc單片機(jī)不斷電下載程序

    作者: 時間:2012-08-04 來源:網(wǎng)絡(luò) 收藏

    支持串口isp程序下載,不必使用專用下載器,僅使用串口就能。但每次都要斷電再上電,比較麻煩。
    下面介紹一種不需斷電就能的方法,在程序調(diào)試時比較方便。
    基本原理:
    有專用的復(fù)位寄存器,通過對該寄存器寫入不同的數(shù)值可以實(shí)現(xiàn)單片機(jī)熱啟動復(fù)位。
    寄存器功能如下圖所示:

    點(diǎn)擊瀏覽下一頁

    由上圖可以看出只要滿足某個條件,向ISP_CONTR寫入0x60,就可以實(shí)現(xiàn)從ISP監(jiān)控區(qū)軟啟動啟動
    某個條件設(shè)置為:當(dāng)串口接收到0xaa數(shù)據(jù)時,單片機(jī)執(zhí)行ISP_CONTR=0x60; 指令,從ISP監(jiān)控區(qū)軟啟動啟動。
    演示程序如下:

    //*************************STC12C5410AD軟啟動演示**************************
    //
    //收到0xaa,從ISP監(jiān)控區(qū)軟啟動,利用該特性,可以實(shí)現(xiàn)下載
    //收到0x55,從用戶程序區(qū)啟動
    //2010年3月13日21:58:49
    //************************************************************

    *************
    #include STC12C5410AD.H>
    uint c;
    //*************** 函數(shù)定義 ******************
    void delay1ms(unsigned int j);
    void senddata(uchar dc);
    //*************** 主程序 ********************
    void main(void)
    {
    ///******************
    TMOD|=0x20;
    SCON=0x50;
    TH1=0xfd; //12T時鐘9600bps
    TL1=0xfd;
    TR1=1;
    ES=1;
    EA=1;
    AUXR=AUXR|0x40; //定時器1使用1T時鐘 9600*12=115200bps
    ///******************
    delay1ms(30000);
    for(c=0;c256;c++)
    {
    senddata(c);
    delay1ms(200);
    }
    while(1)
    {

    }
    }
    //***************************發(fā)送數(shù)據(jù)**************************
    void senddata(uchar dc)
    {
    SBUF=dc;
    while(!TI); //當(dāng)TI=0時,發(fā)送未結(jié)束,循環(huán)等待
    TI=0; //當(dāng)TI=1時,發(fā)送結(jié)束,用軟件將TI清零
    }
    void uart(void) interrupt 4
    {
    uchar cdd;
    if(RI)
    {
    RI=0;
    cdd=SBUF;
    if(cdd==0xaa)
    {
    ISP_CONTR=0x60; //軟復(fù)位,從ISP監(jiān)控區(qū)啟動
    }
    else if(cdd==0x55)
    {
    ISP_CONTR=0x20; //軟復(fù)位,從用戶程序區(qū)啟動
    }
    else
    {
    senddata(cdd);
    }
    }
    else
    {
    TI=0;
    }
    }
    //*************************延時 n*1ms********************
    void delay1ms(unsigned int j)
    {
    unsigned int i;
    for(;j>0;j--)
    { for(i=0;i124;i++)
    {;}
    }
    }

    單片機(jī)相關(guān)文章:單片機(jī)教程


    c++相關(guān)文章:c++教程


    單片機(jī)相關(guān)文章:單片機(jī)視頻教程


    單片機(jī)相關(guān)文章:單片機(jī)工作原理



    上一頁 1 2 下一頁

    評論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 乐至县| 文昌市| 竹山县| 凤翔县| 新野县| 南阳市| 黄浦区| 林周县| 汽车| 乳山市| 嵊泗县| 清苑县| 佛山市| 吴川市| 新疆| 霍林郭勒市| 海伦市| 外汇| 长治市| 沂水县| 益阳市| 菏泽市| 天柱县| 望城县| 郧西县| 台前县| 昭苏县| 武功县| 明光市| 铁岭市| 哈尔滨市| 佳木斯市| 双桥区| 北辰区| 高阳县| 平阳县| 吕梁市| 新安县| 德兴市| 兖州市| 抚州市|