標(biāo)題: STC單片機(jī)不斷電下載程序 [打印本頁(yè)]

作者: 無量壽經(jīng)    時(shí)間: 2020-10-8 15:02
標(biāo)題: STC單片機(jī)不斷電下載程序
本帖最后由 無量壽經(jīng) 于 2020-10-8 15:06 編輯

時(shí)間長(zhǎng)了,居然把這個(gè)簡(jiǎn)單實(shí)用的功能忘了,重新整理了下,適用于STC89、STC12、STC15、STC8等所有型號(hào)的STC單片機(jī)快速高效下載程序。完整工程可查看附件。


STC單片機(jī)不斷電下載程序.rar (723.45 KB, 下載次數(shù): 56)
原理:先測(cè)試出STC-ISP下載軟件下發(fā)的串口命令,在程序中開啟串口中斷,中斷接收得到下載命令就執(zhí)行一條單片機(jī)復(fù)位命令,程序就自動(dòng)下載進(jìn)去了,整個(gè)過程不斷電,也不需要操作復(fù)位按鈕,下載過程不需要觸碰硬件。

   1   下載最低波特率9600



   2   接收波特率9600
接收波特率9600,接收到的連續(xù)數(shù)據(jù)為7F,接收波特率不同,結(jié)果也會(huì)不一樣。
知道了STC-ISP軟件下發(fā)的數(shù)據(jù),我們程序開啟串口接收中斷,判斷接收的數(shù)據(jù)如果是這里7F,讓單片機(jī)執(zhí)行一條復(fù)位命令,程序就下載進(jìn)去了。

#include "STC15W4K.H"      // 包含 "STC15W4K.H"寄存器定義頭文件

unsigned  char num=0;       // 存放接收到的1個(gè)字節(jié)的數(shù)據(jù)
void delay500ms(void)
{
   unsigned char i,j,k;
  for(i=93;i>0;i--)     //注意后面沒分號(hào)
  for(j=235;j>0;j--)    //注意后面沒分號(hào)
  for(k=125;k>0;k--);    //注意后面有分號(hào)
}
void UART_init(void)
{        
    // 下面代碼設(shè)置定時(shí)器2
    T2H  = 0xFD;  //波特率:9600 /22.1184MHZ,1T
    T2L  = 0xC0;  //波特率:9600 /22.1184MHZ,1T
    AUXR = 0x15;    // 0001 0101,T2R=1啟動(dòng)T2運(yùn)行,T2x12=1,定時(shí)器2按1T計(jì)數(shù),S1ST2=1
    // 下面代碼設(shè)置定串口1
    SCON = 0x50;  // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接收)
    // 下面代碼設(shè)置中斷
    ES   = 1;     //開串口1中斷
    EA   = 1;     //開總中斷
}

void main()
{
    UART_init();
    P00=0;
    delay500ms();
    P00=1;
    while(1)
    {
       P01=!P01;
       delay500ms();
    }
}  

void UART1(void) interrupt 4 // 串行口1中斷函數(shù)
{
    if(TI)
    {
       TI = 0;           
    }
    if(RI)
    {
       RI = 0;
       num = SBUF;
       if (num==0x7F)  
       {
           IAP_CONTR   =    0x60;   //0110,0000  軟復(fù)位到系統(tǒng)ISP監(jiān)控區(qū)
       }      
    }
}





作者: 51hei團(tuán)團(tuán)    時(shí)間: 2020-10-8 16:19
這個(gè)在調(diào)試程序的時(shí)候,確實(shí)很方便,謝謝版主,牛逼
作者: liuhailan5757    時(shí)間: 2020-10-8 17:53
是不是程序里面加上這一段就可以了不斷電下載了,調(diào)試OK后,再把這段程序刪掉  是不是這樣?
作者: guysxpf    時(shí)間: 2020-10-9 06:46
還有一種方法是通過ne555定時(shí)器電路自動(dòng)斷電再自動(dòng)上電。免去第二片單片機(jī),節(jié)省成本
作者: aking991    時(shí)間: 2020-10-9 09:10
你這種只適用不帶串口通訊的工程或項(xiàng)目,如果有用到串口通訊就不可能用這樣就能解決的事,因?yàn)樵谕ㄓ嵾^程中也完全有接到7F這個(gè)字符的數(shù)據(jù)
作者: zhlzhang    時(shí)間: 2020-10-9 09:48
在串口通訊程序里面加一個(gè)復(fù)位程序就可以實(shí)現(xiàn)了file:///C:/Users/zhang/Desktop/%E4%B8%8B%E8%BD%BD.png
作者: laopihappy123    時(shí)間: 2020-10-9 22:00
guysxpf 發(fā)表于 2020-10-9 06:46
還有一種方法是通過ne555定時(shí)器電路自動(dòng)斷電再自動(dòng)上電。免去第二片單片機(jī),節(jié)省成本

您好 您的這種做法是ne555的延時(shí)器的應(yīng)用嗎? 這樣子不還是要重新上電嗎、。。。。
作者: liyezhao2019    時(shí)間: 2020-10-16 10:57
這么麻煩干啥 弄個(gè)鼠標(biāo)按鍵搞定
作者: zmc419    時(shí)間: 2021-12-16 21:42
aking991 發(fā)表于 2020-10-9 09:10
你這種只適用不帶串口通訊的工程或項(xiàng)目,如果有用到串口通訊就不可能用這樣就能解決的事,因?yàn)樵谕ㄓ嵾^程中 ...

連續(xù)重復(fù)檢測(cè)進(jìn)行計(jì)數(shù),可以避免
作者: vscos    時(shí)間: 2021-12-17 00:15
只是這方法寫的程序老要帶多一點(diǎn)代碼?
作者: vscos    時(shí)間: 2021-12-17 00:18
這個(gè)方法老要帶點(diǎn)一點(diǎn)沒用的代碼?芯片燒好程序了,就是多余的了,用來測(cè)試倒還有點(diǎn)用
作者: vscos    時(shí)間: 2021-12-17 00:27
aking991 發(fā)表于 2020-10-9 09:10
你這種只適用不帶串口通訊的工程或項(xiàng)目,如果有用到串口通訊就不可能用這樣就能解決的事,因?yàn)樵谕ㄓ嵾^程中 ...

這個(gè)可以發(fā)送多個(gè)同樣的字節(jié)就行了,網(wǎng)上有人做出來了,收到十個(gè)7f才下啟動(dòng)下載
作者: vscos    時(shí)間: 2021-12-17 00:32
aking991 發(fā)表于 2020-10-9 09:10
你這種只適用不帶串口通訊的工程或項(xiàng)目,如果有用到串口通訊就不可能用這樣就能解決的事,因?yàn)樵谕ㄓ嵾^程中 ...

有種USB轉(zhuǎn)UART接口的下載器,我測(cè)試過了,他們做的是接收到40個(gè)7F就自動(dòng)斷電重啟的方法下載的
作者: aking991    時(shí)間: 2021-12-17 08:22
這種只適用無校驗(yàn)位的程序,如果項(xiàng)目是偶校驗(yàn)或是其它的呢,能實(shí)現(xiàn)嗎
作者: KTZL    時(shí)間: 2021-12-17 09:17
好文章!謝謝分享!
作者: zmc419    時(shí)間: 2021-12-18 21:10
驗(yàn)證通不過,IAP_CONTR   = 0Xe0也許可以
作者: snsoyang    時(shí)間: 2022-3-19 21:59
zhlzhang 發(fā)表于 2020-10-9 09:48
在串口通訊程序里面加一個(gè)復(fù)位程序就可以實(shí)現(xiàn)了

剛試了一下的確可行.
作者: joyb    時(shí)間: 2023-8-26 18:52
第一次需要斷電,后續(xù)調(diào)試方便
作者: cnfloatleaf    時(shí)間: 2023-8-26 21:30
好辦法,人多力量大,相互學(xué)習(xí)才能進(jìn)步
作者: 06123    時(shí)間: 2023-11-6 16:23
可行,可字自定義字節(jié)內(nèi)容和字節(jié)數(shù)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1