專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

stc單片機(jī)不斷電下載程序

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月16日   【字體:

用過(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

關(guān)閉窗口

相關(guān)文章