本帖最后由 無量壽經(jīng) 于 2020-10-8 15:06 編輯
時間長了,居然把這個簡單實(shí)用的功能忘了,重新整理了下,適用于STC89、STC12、STC15、STC8等所有型號的STC單片機(jī)快速高效下載程序。完整工程可查看附件。
STC單片機(jī)不斷電下載程序.rar
(723.45 KB, 下載次數(shù): 56)
2020-10-8 14:52 上傳
點(diǎn)擊文件名下載附件
原理:先測試出STC-ISP下載軟件下發(fā)的串口命令,在程序中開啟串口中斷,中斷接收得到下載命令就執(zhí)行一條單片機(jī)復(fù)位命令,程序就自動下載進(jìn)去了,整個過程不斷電,也不需要操作復(fù)位按鈕,下載過程不需要觸碰硬件。
圖1 下載最低波特率9600
圖2 接收波特率9600
接收波特率9600,接收到的連續(xù)數(shù)據(jù)為7F,接收波特率不同,結(jié)果也會不一樣。 知道了STC-ISP軟件下發(fā)的數(shù)據(jù),我們程序開啟串口接收中斷,判斷接收的數(shù)據(jù)如果是這里7F,讓單片機(jī)執(zhí)行一條復(fù)位命令,程序就下載進(jìn)去了。
#include "STC15W4K.H" // 包含 "STC15W4K.H"寄存器定義頭文件
unsigned char num=0; // 存放接收到的1個字節(jié)的數(shù)據(jù) void delay500ms(void) { unsigned char i,j,k; for(i=93;i>0;i--) //注意后面沒分號 for(j=235;j>0;j--) //注意后面沒分號 for(k=125;k>0;k--); //注意后面有分號 } void UART_init(void) { // 下面代碼設(shè)置定時器2 T2H = 0xFD; //波特率:9600 /22.1184MHZ,1T T2L = 0xC0; //波特率:9600 /22.1184MHZ,1T AUXR = 0x15; // 0001 0101,T2R=1啟動T2運(yùn)行,T2x12=1,定時器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ū) } } }
|