stc單片機(jī)不斷電下載程序
在調(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ù)位,從用戶程序區(qū)啟動(dòng)
}
else
{
senddata(cdd);
}
}
else
{
TI=0;
}
}
在上演示程序中,利用單片機(jī)串口收到某個(gè)有效數(shù)據(jù)后,執(zhí)行從isp引導(dǎo)區(qū)軟啟動(dòng)的命令(ISP_CONTR=0x60;),實(shí)現(xiàn)程序不斷電下載。但該方法為實(shí)現(xiàn)程序不斷電下載,占用了一些單片機(jī)資源——串口、中斷等,實(shí)際應(yīng)用中有一些不便。下面介紹另一種程序不斷電下載方法:
考慮到單片機(jī)開(kāi)發(fā)板在設(shè)計(jì)時(shí)一般都留有一個(gè)手動(dòng)復(fù)位按鈕,能否利用該按鈕實(shí)現(xiàn)程序不斷電下載呢?答案是肯定的!?。。。?P>單片機(jī)上電復(fù)位時(shí),POF=1;單片機(jī)手動(dòng)復(fù)位時(shí),POF=0
單片機(jī)上電運(yùn)行時(shí)對(duì)POF位進(jìn)行判斷,如果POF位=0,將POF位置1,讓單片機(jī)從isp引導(dǎo)區(qū)軟復(fù)位。
如果POF位=1,將POF位清0。
將實(shí)現(xiàn)以上功能的代碼加入到你的程序中,當(dāng)需要下載程序時(shí),按下復(fù)位按鈕,此時(shí)POF位=0,單片機(jī)再次從isp引導(dǎo)區(qū)軟復(fù)位,從而實(shí)現(xiàn)程序下載。
該方法只需在用戶程序中嵌入一段判斷POF標(biāo)志位的代碼就能實(shí)現(xiàn)程序不斷電下載,無(wú)需占用任何單片機(jī)內(nèi)部資源。
演示程序:
//*******************stc單片機(jī)不斷電下載程序******************
#include REG52.H>
sfr ISP_CONTR=0xe7; 軟復(fù)位寄存器聲明
void main(void)
{
//////////////將這段代碼嵌入到程序中////////////////
if((PCON0x10)==0) //如果POF位=0
{
PCON=PCON|0x10; //將POF位置1
ISP_CONTR=0x60; //軟復(fù)位,從ISP監(jiān)控區(qū)啟動(dòng)
}
else
{
PCON=PCON0xef; //將POF位清零
}
//////////////////////////////////////////////
while(1)
{
`
` 用戶程序
`
}
}
操作說(shuō)明:
1 將演示程序中的紅色代碼復(fù)制到您的程序中,首次使用時(shí)應(yīng)利用斷電下載的方式將含有紅色代碼的程序下載到單片機(jī)中
2 將hex文件載入stc單片機(jī)isp軟件,點(diǎn)擊下載按鈕
3 按下單片機(jī)開(kāi)發(fā)板上復(fù)位鍵,單片機(jī)進(jìn)行is程序下載
單片機(jī)相關(guān)文章:單片機(jī)教程
c++相關(guān)文章:c++教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
評(píng)論