原标题:单片机软复位几种方法
如从机收到复位命令(软件命令),程序怎么使机器复位?虽然要使软件始终处于可控状态,最好不要用"复位",因为复位是纯硬件过程,软件是不可控的.但是我们还是要讨论方法,一般流传的方法如下:
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,同样需要牺牲一个单片机引脚,且增加了单片