1. 51單片機如何實現軟體復位系統(c語言),謝謝
單片機實現軟體復位(軟復位)的方法及討論
單片機實現軟體復位(軟復位)的方法及討論
(天堂雨林博客blog.sina.com.cn/acer收集整理)
單片機軟復位有什麼好的方法?如從機收到復位命令(軟體命令),程序怎麼使機器復位?雖然要使軟體始終處於可控狀態,最好不要用"復位",因為復位是純硬體過程,軟體是不可控的.但是我們還是要討論方法,一般流傳的方法如下:
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:用軟體實現的硬復位。需要犧牲一個單片機引腳,且增加了單片機外部電路構造的復雜性,很不可取。
辦法4:類似辦法3,同樣需要犧牲一個單片機引腳,且增加了單片機外部電路構造的復雜性,很不可取。但不能把它單單地當成是復位,應該叫上電復位。
辦法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不能跑到函數外面去執行一個命令。
最後總結如下:最好使用辦法5最為簡潔方便,使用辦法2實現也不失為一種好方法
2. c語言獨立按鍵控製程序復位
第一,直接使用硬體來復位,將原本要接到P3.3的電平接到硬體復位上,當然需要一定的設計
第二,還是硬體,直接將此電平接到看門狗電路上
第三,軟體,前提是你的單片機支持軟體復位(包括直接復位和內置的看門狗)
3. 如何使用單片機C語言實現復位
樓主的意思只是要求復位到裝置的初始狀態,而不是單片機復位。這僅僅需要對所有輸出口轉換到規定的初始狀態即可,這在C編程時採用位操作即可,例如置位或者清除位操作。
4. STC89C51 單片機復位
該單片機正常工作時復位端電壓應保持低電平狀態,復位時給復位端加上一個短暫的高電平即可使單片機程序復位。該復位電路的工作原理是,電源通過電解電容再通過電阻串聯到地,電容兩段並聯一按鍵開關,正常工作時電容隔斷電源電壓,單片機復位端相當於通過電阻接地。因電路中無電流,所以復位端電壓為0伏。當運行過程中需要復位時,通過撥動按鍵開關,把電容直接短路,電源電壓加在電阻兩端,單片機復位端即可過得一個短暫的高電平從而復位。松開按鍵,復位結束,單片機即可正常跑馬。上電時,電解電容充電,串聯電路中有電流流過,電阻兩端獲得一個電壓,也可使單片機復位端為高電平而復位。所以復位包括上電復位和手動復位。
5. STC89C52單片機C程序復位的問題
MOV IAP_CONTR, #20H
或
IAP_CONTR = 0X20; 就可以了
6. 怎麼用C語言實現單片機復位
void (*reset)(void)=0x0000;
在需要復位的地方調用: reset();
7. 單片機(C語言)復位電路初始狀態值是多少初始值是怎麼得出來的復位電路的工作原理時鍾電路的工作
摘要 您好,這個得看你的電源是多少。
8. 單片機定時器用C語言程序如何復位
那要看是在什麼程序中用的,你的定時程序是查詢方式的話你只要把TR0或TR1等於零即可,如果是中斷的話,你可以關中斷,其實你可以在任何程序中用TR0=0;或TR1=0來關定時器。關掉後,定時器值自動回到0;無須刻意復位。
9. 因為單片機有復位鍵,那這個復位鍵的作用是什麼
復位是讓單片機做好准備,程序從頭開始運行。
10. 基於單片機C語言中復位的函數
一般是不可能的,你換個思路想,怎樣可以把這個問題解決,而不要去想怎樣復位。你應該是某些變數值位了,沒有清零吧,試一下把寫法稍微換一下。據我所知是沒有軟體復位的。給你一個思路吧,你可以吧八路都寫到中斷裡面,進中斷後在判斷是哪一路按下去了,這樣是不會死鎖的,又或者你另外再加一個鍵復位,不過這個不是重啟鍵哦,是把變數初始化的鍵