本帖最后由 無量壽經 于 2020-10-8 15:06 編輯
時間長了,居然把這個簡單實用的功能忘了,重新整理了下,適用于STC89、STC12、STC15、STC8等所有型號的STC單片機快速高效下載程序。完整工程可查看附件。
STC單片機不斷電下載程序.rar
(723.45 KB, 下載次數: 56)
2020-10-8 14:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理:先測試出STC-ISP下載軟件下發的串口命令,在程序中開啟串口中斷,中斷接收得到下載命令就執行一條單片機復位命令,程序就自動下載進去了,整個過程不斷電,也不需要操作復位按鈕,下載過程不需要觸碰硬件。
1.jpg (179.37 KB, 下載次數: 86)
下載附件
2020-10-8 14:58 上傳
圖1 下載最低波特率9600
2.jpg (228.51 KB, 下載次數: 90)
下載附件
2020-10-8 15:00 上傳
圖2 接收波特率9600
接收波特率9600,接收到的連續數據為7F,接收波特率不同,結果也會不一樣。 知道了STC-ISP軟件下發的數據,我們程序開啟串口接收中斷,判斷接收的數據如果是這里7F,讓單片機執行一條復位命令,程序就下載進去了。
#include "STC15W4K.H" // 包含 "STC15W4K.H"寄存器定義頭文件
unsigned char num=0; // 存放接收到的1個字節的數據 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) { // 下面代碼設置定時器2 T2H = 0xFD; //波特率:9600 /22.1184MHZ,1T T2L = 0xC0; //波特率:9600 /22.1184MHZ,1T AUXR = 0x15; // 0001 0101,T2R=1啟動T2運行,T2x12=1,定時器2按1T計數,S1ST2=1 // 下面代碼設置定串口1 SCON = 0x50; // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允許接收) // 下面代碼設置中斷 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中斷函數 { if(TI) { TI = 0; } if(RI) { RI = 0; num = SBUF; if (num==0x7F) { IAP_CONTR = 0x60; //0110,0000 軟復位到系統ISP監控區 } } }
|