历史上的今天
今天是:2025年01月26日(星期日)
2019年01月26日 | STC51系列单片机不断电自动下载程序
2019-01-26 来源:eefocus
以前在进行单片机编程时比较烦恼的时每次下载程序都需要断电,点击下载,再上电才能将程序下载到单片机,如果偶尔一两次这样操作可以忍受,但是往往我们都是需要调试代码,多次进行下载操作,不断的断电上电无疑对单片机来说是一个很大的损伤。
根据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这一条命令,但在什么情况下运行这条命令就需要根据自己的想法和实际使用来设计了。
上一篇:51单片机定时器和波特率
史海拾趣
|
D:\WINCE600\PUBLIC\DIRECTX\SDK\SAMPLES\ddraw\src\DDex1怎么编译成DDex1.exe? wince6.0下DDraw的sample应用程序 如题:D:\\WINCE600\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\ddraw\\src\\DDex1怎么编译成DDex1.exe? sources中编译为.lib,在命令行中输入: cd D:\\WINCE600\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\ddraw\\src\\DDex1 b ...… 查看全部问答> |
|
关于6410把内存从128改为512或者更大?散分!!!!!! 现在6410跑的是128M的内存,现在想改为512M。系统为wince6.0。 wince6.0最大支持多大的内存? 如果要改内存,需要修改那些部分?能否说的清楚一点。 高手指点!!… 查看全部问答> |
|
RegOpenKeyEx后报错,FormatMessage取出来的信息是乱码 RegOpenKeyEx后报错,FormatMessage取出来的信息是乱码。怎么解决。下面是代码。 #define BUFSIZE 80 HKEY hKey; char szProductType[BUFSIZE]; DWORD WordType = REG_SZ; DWORD dwBufLen = BUFSIZE; &nb ...… 查看全部问答> |
|
简单说,就是做一个板子,pci接口的,在与计算机通信这一块使用了plx的9052芯片来简化设计。我们所需要的功能是,计算机上编一个界面,可以发送指令读和写该设备,将指令写入设备上的芯片中,再将芯片中的存储信息读回来显示一下。 请熟悉该芯片的 ...… 查看全部问答> |
|
STM32F101和STM32F103的固件函数库对STM32F105和STM32F107适用吗 请问 STM32F101和STM32F103的固件函数库对STM32F105和STM32F107适用吗… 查看全部问答> |




