歡迎您光臨本站 登入註冊首頁

概述

能利用AT89C52本身的資源,在軟體中判斷單片機的冷啟動還是熱啟動?正常工作時在某幾個RAM中置標誌,啟動時判斷這個標誌即可,但要注意89C52內部RAM在很低的殘餘電壓下仍能保持數據,最好在電源上……

能利用AT89C52本身的資源,在軟體中判斷單片機的冷啟動還是熱啟動?

正常工作時在某幾個RAM中置標誌,啟動時判斷這個標誌即可,但要注意89C52內部RAM在很低的殘餘電壓下仍能保持數據,最好在電源上並一適當大小的放電電阻。

所謂“冷啟動”是指掉電后再啟動,而熱啟動過程是不掉電的。單片機內部RAM在掉電再上電后的值在理論上是隨機的(實際上大多會是0x00或0xff),這樣你可以在某幾個RAM中寫上一些特定的值,例如0x55,0xaa,在啟動時檢查這幾個RAM中的值是否與你預先寫入的值相等,如相等,表示單片機沒有掉過電,是熱啟動,否則就是冷啟動。多設幾個這樣的標誌,則隨機因素引起誤判的可能性極小。在PC中就是這樣判斷冷熱啟動的,用了兩個位元組的RAM作標誌,標誌值我記得好象是0xAA55

如果是用C編程,要注意大多數C編譯器都會在調用main()之前對RAM進行初始化(寫0或程序中指定的初始值),所以要改寫CSTARTUP,或將標誌變數分配在一個特殊的“不初始化段”中(在有些編譯器中叫“NVRAM段”?,對不起,我記不大清楚,請自己查一下編譯器手冊)
==============================
檢查SP的直,如果為07H,這是冷啟動,如為其他直為熱啟動,因為任何一個程序員都不會把堆棧指針放這末低,C51編譯器也一樣.而上電複位以後,SP=7.
================================
PCON的掉電標誌POF位,可行。
==============================
佔用1個IO口,外接RC,然後讀該IO
===============================
在你的軟體陷阱複位程序前寫一個標誌,而冷啟動和看門狗複位沒這個標誌,這與在pc上同時按鍵盤上的3個鍵複位是一樣的。注意啟動完后要清標誌

[admin via 研發互助社區 ] 在軟體中判斷單片機的冷啟動還是熱啟動已經有2181次圍觀

http://cocdig.com/docs/show-post-439.html