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
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;c<256;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;i<124;i++)
{;}
}
}
______________________________
在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序
///******************
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;
}
}
_____________
操作录像见附件:
|
文件: | 录像1.zip |
大小: | 2028KB |
下载: | 下载 |
|
阅读(3471) | 评论(0) | 转发(1) |