历史上的今天
返回首页

历史上的今天

今天是:2025年03月16日(星期日)

正在发生

2021年03月16日 | 51单片机不断电下载程序

2021-03-16 来源:eefocus

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程序下载


推荐阅读

史海拾趣

贝特莱公司的发展小趣事

贝特莱在电子行业中以其创新产品而闻名。例如,作为国内首家推出生物传感技术的厂商,其研发的BL1860心率心电芯片在智能可穿戴设备市场占据了重要地位。此外,贝特莱还推出了国内首款无袖带血压监测方案,这些创新产品的推出无疑引爆了智能可穿戴设备市场的热点,也为贝特莱带来了可观的市场份额。

Crystalfontz America Inc公司的发展小趣事

为了保证产品质量和客户满意度,Crystalfontz America Inc公司建立了完善的质量管理体系。公司从原材料采购、生产制造到产品出厂等各个环节都严格把控质量,确保产品符合相关标准和客户要求。同时,公司还不断优化生产流程和管理制度,提高生产效率和产品质量稳定性。这些措施为公司赢得了良好的市场声誉和客户口碑。

Antex公司的发展小趣事

随着业务的不断扩展,Antex在1980年决定将工厂从东京都大田区羽田迁至茨城县高萩市。这一搬迁不仅为公司提供了更广阔的发展空间,也标志着Antex开始向着全球化布局迈进。此后,公司积极寻求国际合作,与全球各地的供应商和客户建立了紧密的合作关系。

协顺电子(Finecables)公司的发展小趣事

协顺电子(Finecables)成立于2003年,当时的中国电子行业正处于快速发展期。公司创始人凭借对市场敏锐的洞察力和对技术的执着追求,决定进入连接器制造领域。在创业初期,公司面临着资金短缺、技术积累不足等挑战。然而,通过不懈的努力和团队的合作,协顺电子成功研发出首批产品,并获得了市场的认可。这一阶段的经历为公司的后续发展奠定了坚实的基础。

Cofan Usa Inc公司的发展小趣事

在电子行业的早期,Cofan Usa Inc公司以其敏锐的市场洞察力和技术创新能力,成功研发出一款具有革命性的电子产品,这款产品凭借其出色的性能和用户体验,迅速在市场上获得认可。公司不断投入研发资源,持续推出新产品,逐渐在电子行业中树立起了技术领先的形象。

Hanghsing Enterprise Co Ltd公司的发展小趣事

在追求经济效益的同时,Cofan Usa Inc公司也注重可持续发展和社会责任。公司积极推广环保理念,采用环保材料和节能技术,减少生产过程中的环境污染。同时,公司还积极参与社会公益事业,为社会发展和环境保护贡献自己的力量。

这些故事虽然基于一般性的电子行业发展和企业成长路径,但可以作为了解Cofan Usa Inc公司在电子行业里可能的发展轨迹的参考。如果需要更具体和详细的故事,建议查阅该公司的官方资料、行业报告或相关新闻报道。

问答坊 | AI 解惑

关于MSS1002_20

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑  楼上有哪位知道 有关MSS1002_20资料,请上帖,谢谢,感激不尽! …

查看全部问答>

模电仿真软件proteus7.2 sp6破解版

与朋友一起分享proteus 7.2 sp6 破解版, 可进行 模电数电 单片机的仿真…

查看全部问答>

空气电池

体 积轻薄的电池对各项应用来说,有着关键性的影响。以电动车为例,就必须在有限的体积内,尽可能的增加电池密度,才能够提高电动车的行驶距离。而麻省理工学院的几个华人学生,研发出一种空气锂电池(lithium-air battery),将有望一举突破目前的 ...…

查看全部问答>

zigbee的x-ctu资料

x-ctu的资料详细的谁有 我手上有个XBEE模块,DIGI的 然后如何配置成网络 是否只能1主多从 就是1COORDINATOR和多个ROUTER 有没有多个ROUTER不用COORDINATOR的 这样任意加入一个ROUTER就可以使用 任意一个ROUTER发的包其他的ROUTER都可以接收 ...…

查看全部问答>

关于信道

我现在在学CC2510,在配置RF的时候碰到信道的概念,在上网查,看到这么一句话不理解。 “常用的IEEE 802.11b/g工作在2.4~2.4835GHz频段,这些频段被分为11或13个信道。” 我想问的是频段被分为11或13个信道,这意思是把频段划分为11或13个通道每 ...…

查看全部问答>

关于lower significance bit

在一个文档里看见,LSB,MSB,和 lower significance bit. 这个lower significance bit不太明白,有清楚的大虾吗?在线等。…

查看全部问答>

dbgview中出现Buffered packet. can't write back :-\

捕捉不到dbgprint的内容,怎么办?…

查看全部问答>

一个关于avrstudio和GCCAVR的奇怪问题,请大家帮帮我!

大家好:     我现在用的Atmel16单片机,开发软件是基于avrstudio和GCCAVR,我在调试以下程序时,提示:“Conflicting the type of wr(void)”的错误!     void mian(void)    {      unsi ...…

查看全部问答>