新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在軟件中判斷單片機(jī)的冷啟動(dòng)還是熱啟動(dòng)

在軟件中判斷單片機(jī)的冷啟動(dòng)還是熱啟動(dòng)

作者: 時(shí)間:2013-09-29 來(lái)源:網(wǎng)絡(luò) 收藏
  能利用AT89C52本身的資源,在軟件中判斷還是?

  正常工作時(shí)在某幾個(gè)RAM中置標(biāo)志,啟動(dòng)時(shí)判斷這個(gè)標(biāo)志即可,但要注意89C52內(nèi)部RAM在很低的殘余電壓下仍能保持?jǐn)?shù)據(jù),最好在電源上并一適當(dāng)大小的放電電阻。

  所謂“”是指掉電后再啟動(dòng),而過(guò)程是不掉電的。內(nèi)部RAM在掉電再上電后的值在理論上是隨機(jī)的(實(shí)際上大多會(huì)是0x00或0xff),這樣你可以在某幾個(gè)RAM中寫上一些特定的值,例如0x55,0xaa,在啟動(dòng)時(shí)檢查這幾個(gè)RAM中的值是否與你預(yù)先寫入的值相等,如相等,表示沒(méi)有掉過(guò)電,是,否則就是。多設(shè)幾個(gè)這樣的標(biāo)志,則隨機(jī)因素引起誤判的可能性極小。在PC中就是這樣判斷冷熱啟動(dòng)的,用了兩個(gè)字節(jié)的RAM作標(biāo)志,標(biāo)志值我記得好象是0xAA55

  如果是用C編程,要注意大多數(shù)C編譯器都會(huì)在調(diào)用main()之前對(duì)RAM進(jìn)行初始化(寫0或程序中指定的初始值),所以要改寫CSTARTUP,或?qū)?biāo)志變量分配在一個(gè)特殊的“不初始化段”中(在有些編譯器中叫“NVRAM段”?,對(duì)不起,我記不大清楚,請(qǐng)自己查一下編譯器手冊(cè))
==============================
檢查SP的直,如果為07H,這是冷啟動(dòng),如為其他直為熱啟動(dòng),因?yàn)槿魏我粋€(gè)程序員都不會(huì)把堆棧指針?lè)胚@末低,C51編譯器也一樣.而上電復(fù)位以后,SP=7.
================================
PCON的掉電標(biāo)志POF位,可行。
==============================
占用1個(gè)IO口,外接RC,然后讀該IO
===============================
  在你的軟件陷阱復(fù)位程序前寫一個(gè)標(biāo)志,而冷啟動(dòng)和看門狗復(fù)位沒(méi)這個(gè)標(biāo)志,這與在pc上同時(shí)按鍵盤上的3個(gè)鍵復(fù)位是一樣的。注意啟動(dòng)完后要清標(biāo)志。

51單片機(jī)相關(guān)文章:51單片機(jī)教程


單片機(jī)相關(guān)文章:單片機(jī)教程


單片機(jī)相關(guān)文章:單片機(jī)視頻教程


單片機(jī)相關(guān)文章:單片機(jī)工作原理


晶振相關(guān)文章:晶振原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉