STC单片机免断电下载程序的另一种更简单的方法

看到网上有一些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;
   }
}

另外还要在stc下载软件中进行自定义下载设置才能完成

从上面可以看出比较麻烦,那么有没有一种更为简单的方法呢,从上面的视频得知只要对0xe7这个地址赋予0x60就可以完成下载程序的功能了,那么我就想,stc下载软件用的是串口,用串口就必然用要发送数据到单片机,而单片机接收引脚是P3^0,那么我们只要检测这个引脚有没有电平的变化,如果有变化那么就对0xe7这个地址赋予0x60,就会完成自动下载的命令了,有了思路就开始验证。经过调试结果成功,说明本人只是对STC89C52RC做过测试,其它芯片能否可行请自行测试,以下为完整的程序,在stc下载软件中不需要做任何的设置,就像平常下载程序一样就行。

 

/***  STC单片机免断电下载程序的另一种更简单的方法*******************************************************************
**程序功能:STC单片机免断电下载程序
**芯片型号:STC89C52RC
**晶振频率:11.0592M                                                
*******************************************************************/

//以下为所需的头文件
//#include<absacc.h>
//#include<string.h>
//#include<stdio.h>
//#include <INTRINS.H>
#include <reg52.H> 
//定义关键字方便使用
#define uchar unsigned char    
#define uint unsigned int    
#define ulong unsigned long 
sfr iap=0xe7; //定义下载命令
sbit p30=P3^0; //串口接收引脚
/*                 主函数
*******************************************************************
**函数原型:main()
**函数功能:
**输入参数:无

**输出参数:无
**备注说明:完成程序的主要功能
*******************************************************************/
main()
{
while(1)  //主循环

   if(!p30) //判断串口是不是有数据
   {
    iap=0x60; //执行自动下载的命令 
   }
}

}

 

永不止步步 发表于11-30 09:06 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363741个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号