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