標(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)
2020-10-8 14:52 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
原理:先測(cè)試出STC-ISP下載軟件下發(fā)的串口命令,在程序中開啟串口中斷,中斷接收得到下載命令就執(zhí)行一條單片機(jī)復(fù)位命令,程序就自動(dòng)下載進(jìn)去了,整個(gè)過程不斷電,也不需要操作復(fù)位按鈕,下載過程不需要觸碰硬件。
1.jpg (179.37 KB, 下載次數(shù): 86)
下載附件
2020-10-8 14:58 上傳
圖1 下載最低波特率9600
2.jpg (228.51 KB, 下載次數(shù): 90)
下載附件
2020-10-8 15:00 上傳
圖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
下載.png (263.08 KB, 下載次數(shù): 88)
下載附件
2020-10-9 09:47 上傳
作者: laopihappy123 時(shí)間: 2020-10-9 22:00
您好 您的這種做法是ne555的延時(shí)器的應(yīng)用嗎? 這樣子不還是要重新上電嗎、。。。。
作者: liyezhao2019 時(shí)間: 2020-10-16 10:57
這么麻煩干啥 弄個(gè)鼠標(biāo)按鍵搞定
作者: zmc419 時(shí)間: 2021-12-16 21:42
連續(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
這個(gè)可以發(fā)送多個(gè)同樣的字節(jié)就行了,網(wǎng)上有人做出來了,收到十個(gè)7f才下啟動(dòng)下載
作者: vscos 時(shí)間: 2021-12-17 00:32
有種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
剛試了一下的確可行.
作者: 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 |