单片机实现软件复位(软复位)的方法及讨论

来源:本站
导读:目前正在解读《单片机实现软件复位(软复位)的方法及讨论》的相关信息,《单片机实现软件复位(软复位)的方法及讨论》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机实现软件复位(软复位)的方法及讨论》的详细说明。
简介:单片机软复位有什么好的方法?如从机收到复位命令(软件命令),程序怎么使机器复位?

虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:

1、放狗;

2、((void(code*)(void))0x0000)();

3、用单片机一个引脚控制点一下RSTRST;

4、用单片机一个引脚控制重新加电;

5、用单片机自带的软件复位指令或内狗指令;

6、goto大法;

天堂雨林博客对以上方法的意见:

方法1:“放狗”是单片机软复位的最好办法,也基本上是唯一的一个办法。但并不是所有单片机都具备看门狗的功能,也不是一个万全之策。

办法2:这不是复位,只是把程序转到地址0去执行,不如用一个JMP更直接。目前可能极少数单片机或者用户已经自行添加Bootload时用户程序的程序开始地址并不为0x0000,所以需要查找这些特定单片机的启动地址。

在keilC51下面可以这样实现:

voidsoft_reset(void)

{

((void(code*)(void))0x0000)();

}

在需要软件复位的地方使用语句:

soft_reset();

一般可实现软件复位。

办法3:用软件实现的硬复位。需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。

办法4:类似办法3,同样需要牺牲一个单片机引脚,且增加了单片机外部电路构造的复杂性,很不可取。但不能把它单单地当成是复位,应该叫上电复位。

办法5:Atmel89C不带内狗,S的有内狗,只是一条指令就行。如STC的单片机有软件复位指令,即ISP_CONTR,地址在0E7H单元(即strISP_CONTR=0xE7),MOVISP_CONTR,#00100000B(C语言为ISP_CONTR=0x20),内狗也是一条指令MOVWDT_CONTR,#00111100B!

STC51系列单片机Datasheet中指出:传统的8051单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。现STC新推出的增强型8051根据客户要求增加了ISP_CONTR特殊功能寄存器,实现了此功能。用户只需简单的控制ISP_CONTR特殊功能寄存器的其中两位SWBS/SWRST就可以系统复位了。

办法6:程序从头(上电复位处)开始运行,且只有一个循环这种情况,当然可以用goto,如在main()的开头设一个start:,在程序的唯一循环中设定一个条件,然后goto命令。但需要注意,如果是在中断例程里,那么中断挂号寄存器仍置位,同级中断不能执行。所以必须先使中断挂号寄存器清零,EA=0。只有RETI指令可以使中断挂号寄存器清零。51单片机有两级中断优先级,所以需要执行两次RETI指令。这用汇编是很简单的事,而C则比较难以实现。但是,goto命令尽量不要用,因为goto会到处乱窜,而且goto不能跑到函数外面去执行一个命令。

最后总结如下:最好使用办法5最为简洁方便,使用办法2实现也不失为一种好方法。

提醒:《单片机实现软件复位(软复位)的方法及讨论》最后刷新时间 2024-03-14 01:08:23,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机实现软件复位(软复位)的方法及讨论》该内容的真实性请自行鉴别。