单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:
1、放狗;
2、((void(code *)(void))0x0000)();
3、用单片机一个引脚控制点一下RSTRST;
4、用单片机一个引脚控制重新加电;
5、用单片机自带的软件复位指令或内狗指令;
6、goto大法;
方法1:“放狗”是单片机软复位的最好办法,也基本上是唯一的一个办法。但并不是所有单片机都具备看门狗的功能,也不是一个万全之策。
办法2:这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Boot load时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。
在keil C51下面可以这样实现:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ();
}
在需要软件复位的地方使用语句:
soft_reset();
一般可实现软件复位。
办法3:用软件实现的硬复位。需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可??r
办法4:类似办法3,同样需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性.
办法5:Atmel 89C不带内狗,S的有内狗,只是一条指令就行。如STC的单片机有软件复位指令,即ISP_CONTR,地址在0E7H 单元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#00100000B(C语言为ISP_CONTR=0x20),内狗也是一条指令MOV WDT_CONTR,#00111100B!
STC 51系列单片机Datasheet中指出:传统的8051 单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。现STC 新推出的增强型8051 根据客户要求增加了ISP_CONTR 特殊功能寄存器,实现了此功能。用户只需简单的控制ISP_CONTR 特殊功能寄存器的其中两位 SWBS / SWRST 就可以系统复位了。
办法6:程序从头(上电复位处)开始运行,且只有一个循环这种情况,当然可以用goto,如在main()的开头设一个start:,在程序的唯一循环中设定一个条件,然后goto命令。但需要注意,如果是在中断例程里,那么中断挂号寄存器仍置位,同级中断不能执行。所以必须先使中断挂号寄存器清零,EA = 0。只有RETI指令可以使中断挂号寄存器清零。51单片机有两级中断优先级,所以需要执行两次RETI指令。这用汇编是很简单的事,而C则比较难以实现。但是,goto命令尽量不要用,因为goto会到处乱窜,而且goto不能跑到函数外面去执行一个命令。
关键字:STC单片机 复位方法
引用地址:
很给力的STC单片机复位方法总结
推荐阅读最新更新时间:2024-03-16 14:24
【STC单片机学习】第八课:单片机的LED点阵
1.8.1.LED点阵简介 1.8.1.1、什么是LED点阵 点阵显示是后面显示显示器的基础,这节课对显示的理解很有帮助! (1)外观 在板子上什么样呢?每一个圆点是一个LED灯!显示方法和数码管很像,需要提前做好断码表! (2)作用 显示文字、数字、显示图标 (3)内部构造原理图。2.单片机完全学习系列课程课程配套ARM3.0开发板光盘资料步骤3 51例程9 、LED点阵datasheet-相关芯片手册 16*16的LED单色灯! 点阵的优势就是16(J34+J28)个IO口独立控制8*8个LED亮灭 (4)LED点阵如何工作 点亮:纵向和横向结合 8*8的LED点阵可以并联/串联拼成更大的LED点阵! 1.8.1.
[单片机]
STC单片机简介及其看门狗的应用
STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX232和一些廉价的元件就能写程序,可擦写10万次。因此是一款很好用的单片机。 在这里,简单说明一下其看门狗的使用。STC单片机的看门狗一旦启动,就不能停止,其看门狗溢出时间可以利用STC单片机用户手册计算,其简单举例如下: #i nclude //STC单片机头文件 #define uint unsigned int #define uchar unsigned char sbit led=P1^0; /
[单片机]
STC单片机自适应波特率串口的实现方法
STC单片机自适应波特率串口的实现方法通常有以下几种: (1)协议约定通信开始时主机固定发送1 个字符,从机以不同的波特率试探接收,当接收到的数据与约定相同时,确定该波特率即是正确的通信波特率。 (2)协议约定通信开始时主机发送1 串字符,从机以某固定波特率接收,然后通过软件分析接收到的数据,计算出接收数据与发送数据之间的倍数关系,从而确定正确的波特率。 (3)协议约定通信开始时主机固定发送1 个字符,从机用单片机定时器检测RXD 上的信号宽度,通过计算来确定主机的波特率。 以上3 种方法,第一种由于需要多次试探,效率很低;第二种计算量过大,不适合单片机处理;第三种方式单片机有现成的定时器资源,计算也相对简
[单片机]
STC单片机掉电断电失电瞬间EEPROM数据保存处理办法
由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回到掉电的状态,基于此,荣致电子科技做了大量的工作,并选用了很多种方案: 1、 通过1法拉大电容做掉电临时备份电池。 2、 通过备份电池或者DS1302里的31个字节ram+电池方案。 3、 通过MAX813L检测掉电,然后通过普通STC10某个引脚读取MAX813L的第五脚高低电平状态。 4、 购买铁电芯片来不停的存储用户数据。 基于以上4种方案,荣致电子科技做了大量的试验与验证工作,最后敲定方案3经济、安全、可靠,并且存储20个
[单片机]
STC单片机EEPROM的应用和程序
最近,由于工作的需要,用STC89C52来开发新产品,要用天STC的Eeprom的功能,上网也找了一点资料,得到很大帮助,真的非常感谢。程序是我在网上摘录的,调试通过了,不过我产品在用动态扫描显示的,由于在Eeprom擦除时要用几十毫秒,会有一闪烁的。不过这是正常的。 单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无 法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等 存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通 过IIC 或SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花 更多的心思。在
[单片机]
stc单片机IO口输入输出方式
个人感触: 我只想说,有些话,第一遍看根本不知道是什么意思或者记不得, 但是自己在项目中遇到这个问题困扰很久之后,再回来重新看到这句话,就会醍醐灌顶。 最近编PCA9306的驱动,遇到的问题就是片子只能读奇数地址,不能读偶数地址的寄存器,后来采用的办法是写完地址之后,SDIO强制拉高(因为9306的SPI数据线是SDIO双向的,只有1根) 当时不明白为什么,现在回头来看到这篇文章,终于懂了。 以下是转载的正文: 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路。 灌电流方式:LED正极接VCC,负极接IO口。IO为高电平是LED两极电平相同,没有电
[单片机]