专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

stc单片机不断电下载程序

作者:huqin   来源:本站原创   点击数:  更新时间:2014年03月16日   【字体:

用过STC单片机的人,都知道用STC_ISP软件下载单片机程序,单片机要断电后再上电才开始下载的。这样来说非常麻烦,手头上有一个单片机不断电下载程序的方法,这个方法比较笨,不过按复位键总比断电好吧?
有的人用了继电器,或者MOS管的方法,觉得都非常好。如果不想动用硬件,那么这个方法还是不错的。
不过第一次还是要断电下载程序,以后下载程序都不用了。看看吧
//*******************stc单片机不断电下载程序******************
#include <REG52.H>
sfr ISP_CONTR=0xe7;          软复位寄存器声明
void main(void)
{
 //////////////将这段代码嵌入到程序中////////////////
 if((PCON&0×10)==0) //如果POF位=0
 {
   PCON=PCON|0×10;  //将POF位置1
   ISP_CONTR=0×60;  //软复位,从ISP监控区启动
 }
 else
 {
   PCON=PCON&0xef;  //将POF位清零
 }
 //////////////////////////////////////////////?br />  while(1)
 {?br />          //用户程序
  }
}
******************************************************
 

//////////////////////////////
// -----------串口中断服务程序-------------------//
static void com_isr(void) interrupt 4 using 1{
    if (RI){
      RI = 0;
       if (SBUF == 0x0d) ISP_CONTR = 0x60; // 软复位到ISP区
    }
    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){
    }
}

为了保险,我们可以采用两字节密码的,
//////////////////////////////////////////////
//////////////////////////////////////////////////
/////////////////////////////////////////////////////
看到网上有一些STC单片机免断电下载程序的例子。但是都是要用串口中断来完成。以下是一个程序片断
拿来说明
在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序
   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监控区启动
}
else if(cdd==0x55)
{
ISP_CONTR=0x20; //软复位,从用户程序区启动
}
else
{
senddata(cdd);
}           
   }
   else
   {
TI=0;
   }
}
还有另一种更简单的不断电下载的方法更请看:http://www.51hei.com/mcu/1432.html

关闭窗口

相关文章