學習單片機的朋友都知道,STC單片機雖然便宜,但是每次下載程序都需要冷啟動,才能下載程序,一個成品,需要調試N次,如果每次都要用手按,實在無語啊,我在數碼之家論壇,21IC電子論壇,阿莫論壇都看見有制作貼子。這個日志介紹我制作的stc單片機自動下載器
自動下載器工作原理:
在STC單片機中有兩個程序區,用戶程序區與ISP程序區。單片機上電后(冷啟動,并非外部手動復位或看門狗復位),先會運行ISP程序,檢測是否有合法的下載命令流,占時幾十毫秒到幾百毫秒,如果沒有合法的下載命令流,則立即運行用戶程序。
如果有合法的下載命令流,則ISP監控程序開始與ISP下載軟件通信,軟件也會進入編程模式,向監控程序發送程序碼,監控程序接收程序碼,并將其寫入用戶程序區中。在編程完畢,對程序校驗成功后,用戶程序立即生效,開始運行用戶程序。
STC-ISP嘗試與MCU握手連接的時候,是以“最低波特率”設置項中的波特率不斷的從串口發送“0x7F”信號,直到MCU上電冷啟(或者軟復位至ISP)經幾十毫秒到幾百毫秒檢測下載命令流后,MCU做出響應,STC-ISP才停止發送“0x7F”信號開始燒寫。
我的stc單片機自動下載器電路圖

制作好的圖片




stc單片機自動下載器程序
/***********************************
********STC單片機自動下載器********
**********MCU STC15F104W***11.0592MHZ********
**************荊棘鳥***************
**********************************/
#include <reg52.h>//52系列單片機特殊寄存器頭文件
#define uint unsigned int//宏定義
#define uchar unsigned char
/********單片機I/O功能聲明*********/
sbit DYKZD=P3^4;//電源控制端
sbit XZXHD=P3^3;//下載信號檢測端
uchar x;//下載信號低電平個數
/**************初始化**************/
void init()//初始化子函數
{
DYKZD=0;//電源控制端打開
XZXHD=1;
INT1= 1;
IT1= 1; //設置INT1的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
EX1= 1; //使能INT1中斷
EA = 1;//打開總中斷開關
}
/*************延時函數*************/
void delayms(uint xms)//延時子函數
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/************外部中斷ITN1********/
void exint1() interrupt 2 //INT1中斷入口
{
x++;
}
/**************主程序************/
void main() //主程序
{
init();
while(1)
{
if(x>60)
{
DYKZD=1;
delayms(500);
DYKZD=0;
delayms(60000);
x=0;
}
}
}
下載速度還是比較快,如果程序太大,可能會下載失敗,我的設置最高波特率也能下載,偶然也會失敗
|