新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC單片機的自動程序下載--Auto ISP

        STC單片機的自動程序下載--Auto ISP

        作者: 時間:2016-11-25 來源:網絡 收藏
        很多朋友手頭上都有基于STC單片機的開發板或學習板,我看到大多數人都是通過切斷電源冷啟動的辦法下載程序,其實STC單片機的ISP軟件提供了無須冷啟動在線下載的辦法,即自定義下載。下面介紹一下具體過程:

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

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

        #ifndef _timer1_h_
        #define _timer1_h_

        //定時器1初始化,串口波特率初始化
        //自動ISP功能模塊

        void timer1_init(void)
        {
        //定時器T1工作在模式2,8位自動重裝載模式
        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);
        }

        //自動ISP功能函數

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

        //ISP標志字符
        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; //軟復位進入ISP下載模式

        }
        }

        //串行接收中斷

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

        #endif

        把上面的timer1.h文件包含進工程文檔,并在主程序中調用timer1.h內的初始化函數,如下所示:

        #include "STC89C51RC.H"

        #include "timer1.h"
        sbit beep=P1^7;//P1^7接揚聲器驅動電路
        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初始化,啟用串口設置
        while(1)
        {
        beep=1;
        delay_ms(400);
        beep=0;
        delay_ms(400);
        }
        }

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

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

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 灵川县| 龙井市| 洛阳市| 襄樊市| 房山区| 泰安市| 德昌县| 宜章县| 万盛区| 巨野县| 沛县| 静宁县| 乐昌市| 亳州市| 巴里| 六安市| 延庆县| 舞阳县| 葵青区| 沅陵县| 昌吉市| 平阴县| 莫力| 牙克石市| 全州县| 安多县| 墨玉县| 股票| 西乌珠穆沁旗| 临泽县| 安多县| 简阳市| 潼南县| 聊城市| 常熟市| 宁波市| 房产| 科技| 什邡市| 奉化市| 曲水县|