在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC單片機(jī)的自動(dòng)程序下載--Auto ISP

    STC單片機(jī)的自動(dòng)程序下載--Auto ISP

    作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
    很多朋友手頭上都有基于STC單片機(jī)的開發(fā)板或?qū)W習(xí)板,我看到大多數(shù)人都是通過切斷電源冷啟動(dòng)的辦法下載程序,其實(shí)STC單片機(jī)的ISP軟件提供了無須冷啟動(dòng)在線下載的辦法,即自定義下載。下面介紹一下具體過程:

    第一步:編寫串口操作程序。這種自動(dòng)下載方法需要用到串口中斷。所謂自動(dòng)下載,就是說當(dāng)前單片機(jī)已經(jīng)在運(yùn)行程序了,但這個(gè)程序必須具備串口中斷功能,通過串口接收特定字符標(biāo)志,使得單片機(jī)知道應(yīng)該從運(yùn)行用戶程序狀態(tài)退出,復(fù)位后進(jìn)入監(jiān)控狀態(tài)(即ISP狀態(tài)),為下載新的用戶程序做好準(zhǔn)備。所以,如果你總想不通過冷啟動(dòng)的辦法來自動(dòng)下載程序,就要求當(dāng)前單片機(jī)運(yùn)行的程序以及你將要下載的程序都具備串口中斷及識(shí)別特定字符標(biāo)志的功能,這就需要編寫串口操作程序。首先利用定時(shí)器產(chǎn)生波特率信號(hào),設(shè)置串口。建立頭文件timer1.h:

    本文引用地址:http://www.biyoush.com/article/201611/321400.htm

    #ifndef _timer1_h_
    #define _timer1_h_

    //定時(shí)器1初始化,串口波特率初始化
    //自動(dòng)ISP功能模塊

    void timer1_init(void)
    {
    //定時(shí)器T1工作在模式2,8位自動(dòng)重裝載模式
    TMOD = (TMOD & 0X0F) | 0X20;
    SCON = 0x50;
    PCON |= 0x80;//波特率加倍

    TH1 = 0xff;
    TL1 = 0xff;
    TR1 =1;
    ES = 1;
    EA = 1;
    }

    void delay(unsigned int time)
    {
    while(--time);
    }

    //自動(dòng)ISP功能函數(shù)

    void ISP_Check(unsigned char tmp)
    {
    static isp_counter=0;

    //ISP標(biāo)志字符
    unsigned char code isp_comm[16]= {0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};

    if(tmp != isp_comm[isp_counter++])

    {
    isp_counter = 0;
    return;
    }
    else if (isp_counter > 15)

    {
    EA = 0;
    delay(100000);
    ISP_CONTR = 0x60; //軟復(fù)位進(jìn)入ISP下載模式

    }
    }

    //串行接收中斷

    void Serial_int(void) interrupt 4 using 1
    {
    unsigned char tmp;
    if (RI)
    {
    tmp = SBUF;
    ISP_Check(tmp);
    RI = 0;
    }
    }

    #endif

    把上面的timer1.h文件包含進(jìn)工程文檔,并在主程序中調(diào)用timer1.h內(nèi)的初始化函數(shù),如下所示:

    #include "STC89C51RC.H"

    #include "timer1.h"
    sbit beep=P1^7;//P1^7接揚(yáng)聲器驅(qū)動(dòng)電路
    void delay_ms(const unsigned int DELAY)
    {
    unsigned int x,y;
    for(x=0;x<=DELAY;x++)
    {
    for(y=0;y<=120;y++);
    }
    }
    main()
    {
    delay_ms(500);
    timer1_init(); //timer1初始化,啟用串口設(shè)置
    while(1)
    {
    beep=1;
    delay_ms(400);
    beep=0;
    delay_ms(400);
    }
    }

    第二步:編譯工程得到HEX文件,運(yùn)行STC-ISP.exe。如下圖:

    注意紅線框內(nèi)的自定義下載的參數(shù)設(shè)置,即串口和標(biāo)志字符的設(shè)置,一定要與上面第一步在timer1.h文件中設(shè)置的一致。在Step1中,選定單片機(jī)型號(hào);在Step2中,選定要下載的HEX文件;在Step3中,設(shè)置串口;在Step4中,通常使用默認(rèn)設(shè)置。假設(shè)單片機(jī)正在運(yùn)行程序(此程序的串口設(shè)置、標(biāo)志字符和自定義下載的參數(shù)一致),點(diǎn)擊自定義下載選項(xiàng)頁的發(fā)送按鈕,即可完成新的用戶程序下載并運(yùn)行之。

    需要特別注意的是:(1)自定義下載選項(xiàng)頁中的波特率設(shè)置很重要,不能有錯(cuò);(2)主程序開始最好插入延時(shí)語句,避免串口通訊出現(xiàn)問題。(3)這種Auto ISP方式占用了串口和一個(gè)定時(shí)器,有一定局限性。



    評(píng)論


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

    關(guān)閉