以前在进行单片机编程时比较烦恼的时每次下载程序都需要断电,点击下载,再上电才能将程序下载到单片机,如果偶尔一两次这样操作可以忍受,但是往往我们都是需要调试代码,多次进行下载操作,不断的断电上电无疑对单片机来说是一个很大的损伤。
根据stc12c5a60s2(一片增强型的51单片机,兼容stc89c52单片机)的数据手册,可以通过单片机系统软复位,使单片机运行系统启动代码(这部分代码不同于我们的用户代码),我们断电再上电也是这个原理。通过往IAP_CONTR(C7H)写60H实现系统的软复位,然后进行自动下载。单片机复位后有两种启动形式,一种是从用户程序区启动,我们平时按复位键就是这种启动形式,另一种是从ISP程序区启动,断电启动属于这种方式,通过设置IAP_CONTR可以实现这种启动方式,我们需要下载程序,所以需要从ISP程序区启动。具体的寄存器设置请参考官方数据手册。
具体实现步骤如下:
首先将下面的代码通过我们以前的老方式下载到单片机中
IAP_CONTR EQU 0C7H
ORG 0000H
LJMP START
ORG 0023H
LJMP SERIAL
START:
LCALL SERIALINIT
MainLoop:
SJMP MainLoop
SERIALINIT:
MOV SP,#60H
MOV SCON,#50H
MOV TMOD,#20H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
SETB ES
SETB EA
SERIAL:
PUSH ACC
PUSH PSW
JNB RI,RIGO
CLR RI
MOV A,SBUF
CJNE A,#0AFH,RIGO;
NOP
NOP
NOP
MOV IAP_CONTR,#60H
RIGO:
POP PSW
POP ACC
RETI
END
然后对stc-isp进行如下设置
自定义命令可以根据自己需要修改,同时代码也要跟着修改。
上面代码的主要原理是打开单片机串口中断,当使用stc-isp下载程序时,软件会先往单片机写AFH命令,单片机通过串口检测到这个命令时就进行系统软复位,系统软复位后,单片机系统代码就将用户代码下载到单片机。
每次下载代码都需要将上面的代码加到自己的代码中去。
当然不止这一种通过串口发送特定命令的方式来使系统软复位,比如也可以设置一个按键,检测到这个按键按下就运行MOV IAP_CONTR,#60H。核心就是MOV IAP_CONTR,#60H这一条命令,但在什么情况下运行这条命令就需要根据自己的想法和实际使用来设计了。
关键字:STC51系列 单片机 自动下载『本文转载自网络,版权归原作者所有,如有侵权请联系删除』