很給力的STC單片機復位方法總結
1、放狗;
本文引用地址:http://dyxdggzs.com/article/201611/323548.htm2、((void(code *)(void))0x0000)();
3、用單片機一個(gè)引腳控制點(diǎn)一下RSTRST;
4、用單片機一個(gè)引腳控制重新加電;
5、用單片機自帶的軟件復位指令或內狗指令;
6、goto大法;
方法1:“放狗”是單片機軟復位的最好辦法,也基本上是唯一的一個(gè)辦法。但并不是所有單片機都具備看門(mén)狗的功能,也不是一個(gè)萬(wàn)全之策。
辦法2:這不是復位,只是把程序轉到地址0去執行,不如用一個(gè)JMP更直接。目前可能極少數單片機或者用戶(hù)已經(jīng)自行添加Boot load時(shí)用戶(hù)程序的程序開(kāi)始地址并不為0x0000,所以需要查找這些特定單片機的啟動(dòng)地址。
在keil C51下面可以這樣實(shí)現:
void soft_reset(void)
{
((void (code *) (void)) 0x0000) ();
}
在需要軟件復位的地方使用語(yǔ)句:
soft_reset();
一般可實(shí)現軟件復位。
辦法3:用軟件實(shí)現的硬復位。需要犧牲一個(gè)單片機引腳,且增加了單片機外部電路構造的復雜性,很不可??r
辦法4:類(lèi)似辦法3,同樣需要犧牲一個(gè)單片機引腳,且增加了單片機外部電路構造的復雜性.
辦法5:Atmel 89C不帶內狗,S的有內狗,只是一條指令就行。如STC的單片機有軟件復位指令,即ISP_CONTR,地址在0E7H 單元(即str ISP_CONTR=0xE7),MOV ISP_CONTR,#00100000B(C語(yǔ)言為ISP_CONTR=0x20),內狗也是一條指令MOV WDT_CONTR,#00111100B!
STC 51系列單片機Datasheet中指出:傳統的8051 單片機由于硬件上未支持此功能,用戶(hù)必須用軟件模擬實(shí)現,實(shí)現起來(lái)較麻煩?,FSTC 新推出的增強型8051 根據客戶(hù)要求增加了ISP_CONTR 特殊功能寄存器,實(shí)現了此功能。用戶(hù)只需簡(jiǎn)單的控制ISP_CONTR 特殊功能寄存器的其中兩位 SWBS / SWRST 就可以系統復位了。
辦法6:程序從頭(上電復位處)開(kāi)始運行,且只有一個(gè)循環(huán)這種情況,當然可以用goto,如在main()的開(kāi)頭設一個(gè)start:,在程序的唯一循環(huán)中設定一個(gè)條件,然后goto命令。但需要注意,如果是在中斷例程里,那么中斷掛號寄存器仍置位,同級中斷不能執行。所以必須先使中斷掛號寄存器清零,EA = 0。只有RETI指令可以使中斷掛號寄存器清零。51單片機有兩級中斷優(yōu)先級,所以需要執行兩次RETI指令。這用匯編是很簡(jiǎn)單的事,而C則比較難以實(shí)現。但是,goto命令盡量不要用,因為goto會(huì )到處亂竄,而且goto不能跑到函數外面去執行一個(gè)命令。
評論