单片机软复位有什么好的办法?如从机收到复位指令(软件指令),程序怎样使机器复位?尽管要使软件一直处于可控状况,最好不要用”复位”,由于复位是纯硬件进程,软件是不可控的.可是咱们仍是要评论办法,一般撒播的办法如下:
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完成也不失为一种好办法。