STC单片机软复位
//*******************stc 单片机不断电下载程序******************
#include <REG52.H> sfr ISP_CONTR=0xe7;
软复位寄存器声明
void main(void)
{ //////////////将这段代码嵌入到程序中//////////////// if((PCON&0x10)==0) //如果 POF 位=0
ISP/IAP 控制寄存器(ISP_CONTR)
STC 单片机 ISP/IAP 控制寄存器在特殊功能寄存器中的字节地址为 E7H,
不能位寻址,该寄存器用来管理和 ISP/IAP 相关的功能设定及是否软件复位
等。单片机复位时该寄存器全部被清 0。其各位的定义如表 4.3.1 所示。
表 1 ISP/IAP 控制寄存器(ISP_CONTR)
在以前的教程中,曾利用单片机串口收到某个有效数据后,执行从 isp 引导区软启动的 命令(ISP_CONTR=0x60;),实现程序不断电下载。但该方法为实现程序不断电下载,占用 了一些单片机资源——串口、中断等,实际应用中有一些不便。下面介绍另一种程序不断电
利用单片机的 reset 复位键下载程序:
单片机上电复位时,POF=1;单片机手动复位时,POF=0 单片机上电运行时对 POF 位进行判断,如果 POF 位=0,将 POF 位置 1,让单片机从 isp 引 导区软复位。如果 POF 位=1,将 POF 位清 0。 将实现以上功能的代码加入到你的程序中,当需要下载程序时,按下复位按钮,此时 POF 位=0,单片机再次从 isp 引导区软复位,从而实现程序下载。 该方法只需在用户程序中嵌入一段判断 POF 标志位的代码就能实现程序不断电下载,无需 占用任何单片机内部资源。
{ PCON=PCON|0x10; ISP_CONTR=0x60;
//将 POF 位置 1 //软复位,从 ISP 监控区启动
}
else
{ PCON=PCON&0xef; //将 POF 位清零
}
//////////////////////////////////////////////
while(1) {
位序 号 位符 号
D7 ISPEN
D6
D5
D4 D3 D2 D1 D0
SWBS
SWRST
--
-- WT2 WT1 WT0
ISPEN:ISP/IAP 功能允许位。0:禁止 ISP/IAP 编程改变 Flash。1:允许编
程改变 Flash。
SWBS:软件选择从用户应用程序区启动(0),还是从 ISP 程序区启动(1)。要
正常情况下,stc 单片机只有在上电复位时才执行 isp 引导程序,其它复位(看门狗复位、 rst 引脚复位)则直接执行用户程序。通过阅读 stc 单片机手册发现,在用户程序运行时,利 用软件复位方式,可以让 stc 单片机复位后从 isp 引导程序处运行,利用该特性,可以模拟 stc 单片机上电复位状态,实现不断电程序下载。STC 单片机有热启动和冷启动两种复位形 式。两种复位方式区别如下:
们通过人为设定可以给 CPU 一个最长的等待时间,若在此时间段内相应的操
作未完成,数据将丢失或错误。以下给出芯片厂商推荐的等待时间关系表,
如表 3.4.2 所示:
表 2 ISP/IAP 编程 CPU 等待时间参考表
设置等待时间 WT2 WT1 WT0 011 010 001 000
读操作 6 11 22 43
CPU 等待时间(机器周期)
写操作 擦除操作 要求系统时钟
30
5741
小于 5MHz
60
10942
小于 10MHz
120
21885
小于 20MHz
240
43769
小于 40MHz
SWBS 与 SWRST 组合情况如下: 从用户应用程序区(AP 区)软件复位并切换到用户应用程序区(AP 区)开始 执行程序: ISP_CONTR=00100000B,SWBS=0(选择 AP 区),SWRST=1(软复位)。 从系统 ISP 监控程序区软件复位并切换到用户应用程序区(AP 区)开始执行 程序: ISP_CONTR=00100000B,SWBS=0(选择 AP 区),SWRST=1(软复位)。 从用户应用程序区(AP 区)软件复位并切换到系统 ISP 监控程序区开始执行 程序: ISP_CONTR=01100000B,SWBS=1(选择 ISP 区),SWRST=1(软复位)。 从系统 ISP 监控程序区软件复位并切换到系统 ISP 监控程序区开始执行程 序: ISP_CONTR=01100000B,SWBS=1(选择 ISP 区),SWRST=1(软复位)。 本复位是整个系统复位,所有的特殊功能寄存器都会复位到初始值,I/O 口 也会被初始化。 用户应用程序区(AP 区)指仅仅是用户自己编写的程序区。 ISP 监控程序区 ISP 区是指芯片出厂时就已经固化在单片机内部的一段程 序,STC 单片机可以进行 ISP 串行下载程序,这就是因为芯片在出厂时已经在 单片机内部固化了 ISP 引导码,程序首次上电时先会从 ISP 区开始执行代码, 体现在实际实验中时,就是我们在下载程序时,先要点击下载软件界面上的下载, 然后再开启单片机电源,当单片机检测到上位机有下载程序的需要时,便启用 ISP 下载功能给单片机下载程序。若经过短暂的时间没有检测到上位机有下载程 序的需求,单片机便会从用户应用程序区(AP 区)开始执行代码。
用户应用程序在运行过程中,有时会有特殊需求,需要实现单片机系统复位(热启动之一), 传统的 8051 单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦 。 STC 单片机增加了相应的硬件功能,内部的 ISP/IAP 控制寄存器 ISP_CONTR 便可以实现此功
能。用户只需简单的控制 ISP_CONTR 特殊功能寄存器的其中两位 SWBS 和 SWRST 就可以实 现系统复位。
因学习需要,本人从网上整理了一些 STC 单片机不断电程序下载的方法,拿出来分享一下。 stc 单片机 isp 实现原理如下:
stc 单片机每次上电复位后首先执行 isp 引导程序,如果串口检测到合法的数据流,则进 行 isp 程序下载;串口没有检测的合法的数据流,则跳出 isp 程序,执行用户程序。
` ` ` } }
色代码复制到您的程序中,首次使用时应利用断电下载的方式将含有 红色代码的程序下载到单片机中 2 将hex文件载入stc单片机isp软件,点击下载按钮 3 按下单片机开发板上复位键,单片机进行is程序下载
。
与 SWRST 直接配合才可以实现。
SWRST:0:不操作;1:产生软件系统复位,硬件自动清零。
WT2、WT1、WT0:ISP/IAP 编程时设定 CPU 等待的最长时间。ISP/IAP 编程时
可对 Flash 进行读操作、写操作、擦除操作,当进行这些操作时,时钟将被
CPU 锁定只进行这些操作,而不同的操作将会耗费 CPU 不同的时间,这里我