stc單片機不斷電下載程序
stc單片機支持串口isp程序下載,不必使用專用下載器,僅使用串口就能下載程序。但每次下載程序都要斷電再上電,比較麻煩。
下面介紹一種不需斷電就能下載程序的方法,在程序調試時比較方便。
基本原理:
stc單片機有專用的復位寄存器,通過對該寄存器寫入不同的數值可以實現單片機熱啟動復位。
寄存器功能如下圖所示:
由上圖可以看出只要滿足某個條件,向ISP_CONTR寫入0x60,就可以實現從ISP監控區軟啟動啟動
某個條件設置為:當串口接收到0xaa數據時,單片機執行ISP_CONTR=0x60; 指令,從ISP監控區軟啟動啟動。
演示程序如下:
//*************************STC12C5410AD軟啟動演示**************************
//
//收到0xaa,從ISP監控區軟啟動,利用該特性,可以實現stc單片機不斷電下載
//收到0x55,從用戶程序區啟動
//2010年3月13日21:58:49
//************************************************************
*************
#include STC12C5410AD.H>
uint c;
//*************** 函數定義 ******************
void delay1ms(unsigned int j);
void senddata(uchar dc);
//*************** 主程序 ********************
void main(void)
{
///******************
TMOD|=0x20;
SCON=0x50;
TH1=0xfd; //12T時鐘9600bps
TL1=0xfd;
TR1=1;
ES=1;
EA=1;
AUXR=AUXR|0x40; //定時器1使用1T時鐘 9600*12=115200bps
///******************
delay1ms(30000);
for(c=0;c256;c++)
{
senddata(c);
delay1ms(200);
}
while(1)
{
}
}
//***************************發送數據**************************
void senddata(uchar dc)
{
SBUF=dc;
while(!TI); //當TI=0時,發送未結束,循環等待
TI=0; //當TI=1時,發送結束,用軟件將TI清零
}
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;
}
}
//*************************延時 n*1ms********************
void delay1ms(unsigned int j)
{
unsigned int i;
for(;j>0;j--)
{ for(i=0;i124;i++)
{;}
}
}
單片機相關文章:單片機教程
c++相關文章:c++教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
相關推薦
-
-
星際水手 | 2015-11-23
-
-
-
-
-
能力就是實力 | 2020-11-25
-
juste08301 | 2013-06-25
-
萬世浮華 | 2020-09-16
-
-
-
-
-
白嶺 | 2020-06-08
-
-
-
評論