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