用過STC單片機的人,都知道用STC_ISP軟件下載單片機程序,單片機要斷電后再上電才開始下載的。這樣來說非常麻煩,手頭上有一個單片機不斷電下載程序的方法,這個方法比較笨,不過按復位鍵總比斷電好吧?
有的人用了繼電器,或者MOS管的方法,覺得都非常好。如果不想動用硬件,那么這個方法還是不錯的。
不過第一次還是要斷電下載程序,以后下載程序都不用了。看看吧
//*******************stc單片機不斷電下載程序******************
#include <REG52.H>
sfr ISP_CONTR=0xe7; 軟復位寄存器聲明
void main(void)
{
//////////////將這段代碼嵌入到程序中////////////////
if((PCON&0×10)==0) //如果POF位=0
{
PCON=PCON|0×10; //將POF位置1
ISP_CONTR=0×60; //軟復位,從ISP監控區啟動
}
else
{
PCON=PCON&0xef; //將POF位清零
}
//////////////////////////////////////////////?br /> while(1)
{?br /> //用戶程序
}
}
******************************************************
//////////////////////////////
// -----------串口中斷服務程序-------------------//
static void com_isr(void) interrupt 4 using 1{
if (RI){
RI = 0;
if (SBUF == 0x0d) ISP_CONTR = 0x60; // 軟復位到ISP區
}
else if (TI) TI = 0;
}
//-----------------------------------------------//
void main (void){
SCON = 0xd0; // 串口方式3
TMOD = 0x20;
TH1 = 0xfa; // badu 4.8k 11.0592M 12clk
TR1 = 1;
ES = 1;
EA = 1;
while (1){
}
}
為了保險,我們可以采用兩字節密碼的,
//////////////////////////////////////////////
//////////////////////////////////////////////////
/////////////////////////////////////////////////////
看到網上有一些STC單片機免斷電下載程序的例子。但是都是要用串口中斷來完成。以下是一個程序片斷
拿來說明
在調試程序中加入串口初始化代碼,串口中斷代碼即可實現不斷電下載程序
TMOD|=0x20;
SCON=0x50;
TH1=0xfd; //12T時鐘9600bps
TL1=0xfd;
TR1=1;
ES=1;
EA=1;
AUXR=AUXR|0x40; //定時器1使用1T時鐘 9600*12=115200bps
void uart(void) interrupt 4
{
uchar cdd;
if(RI)
{
RI=0;
cdd=SBUF;
if(cdd==0xaa)
{
ISP_CONTR=0x60;//軟復位,從ISP監控區啟動
}
else if(cdd==0x55)
{
ISP_CONTR=0x20; //軟復位,從用戶程序區啟動
}
else
{
senddata(cdd);
}
}
else
{
TI=0;
}
}
還有另一種更簡單的不斷電下載的方法更請看:http://www.zg4o1577.cn/mcu/1432.html