如从机收到复位指令(软件指令),程序怎样使机器复位?尽管要使软件一直处于可控状况,最好不要用”复位”,由于复位是纯硬件进程,软件是不行控的.可是咱们仍是要评论方法,一般撒播的方法如下:
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?荒馨阉?ササ氐背墒歉次唬?Ω媒猩系绺次弧?r
方法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不能跑到函数外面去履行一个指令。
上电复位RAM会清零,软件复位,如WDT,或ISP-conter,RAM数据一般坚持不变
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/262498.html