当前位置:首页 > 单片机 > 单片机
[导读]stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。

 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;

}

}

在上演示程序中,利用单片机串口收到某个有效数据后,执行从isp引导区软启动的命令(ISP_CONTR=0x60;),实现程序不断电下载。但该方法为实现程序不断电下载,占用了一些单片机资源——串口、中断等,实际应用中有一些不便。下面介绍另一种程序不断电下载方法:

考虑到单片机开发板在设计时一般都留有一个手动复位按钮,能否利用该按钮实现程序不断电下载呢?答案是肯定的!!!!!

单片机上电复位时,POF=1;单片机手动复位时,POF=0

单片机上电运行时对POF位进行判断,如果POF位=0,将POF位置1,让单片机从isp引导区软复位。

如果POF位=1,将POF位清0。

将实现以上功能的代码加入到你的程序中,当需要下载程序时,按下复位按钮,此时POF位=0,单片机再次从isp引导区软复位,从而实现程序下载。

该方法只需在用户程序中嵌入一段判断POF标志位的代码就能实现程序不断电下载,无需占用任何单片机内部资源。

演示程序:

//*******************stc单片机不断电下载程序******************

#include

sfr ISP_CONTR=0xe7; 软复位寄存器声明

void main(void)

{

//////////////将这段代码嵌入到程序中////////////////

if((PCON&0x10)==0) //如果POF位=0

{

PCON=PCON|0x10; //将POF位置1

ISP_CONTR=0x60; //软复位,从ISP监控区启动

}

else

{

PCON=PCON&0xef; //将POF位清零

}

//////////////////////////////////////////////

while(1)

{

`

` 用户程序

`

}

}

操作说明:

1 将演示程序中的红色代码复制到您的程序中,首次使用时应利用断电下载的方式将含有红色代码的程序下载到单片机中

2 将hex文件载入STC单片机isp软件,点击下载按钮

3 按下单片机开发板上复位键,单片机进行is程序下载

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭