<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 80C51復位標志位的設置與應用分析

          80C51復位標志位的設置與應用分析

          作者: 時間:2011-05-18 來源:網(wǎng)絡 收藏

            對于沒有配備備用電源的單片機系統(tǒng),還可以考慮利用E2PROM在斷電之前的瞬間來轉(zhuǎn)存位,以便在斷電之后也不會徹底消失。該情況下既可選用外掛E2PROM數(shù)據(jù)存儲器(如8腳串行的24C01、93C46或25C040等)的電路方案,也可選用內(nèi)部本身帶有E2PROM數(shù)據(jù)存儲器的單片機型號,如AT89S8252等。這樣在斷電之前的瞬間,利用電源濾波電容C2上的少量殘留能量,即可完成對于E2PROM的燒寫操作。

          2 位的方法

            一般的初始化程序段落的編寫方法很簡單,不過它僅適用于那些要求不高、功能也很簡單的單片機項目。這類項目(如一些小家電之類的單片機)幾乎不存在很強的“過程性”或“不間斷性”,對于隨時可能發(fā)生的操作以及重新從頭運行的用戶程序,不會帶來太大的影響或破壞性后果。

            而對于“過程性”或“不間斷性”要求很強的單片機項目,一旦發(fā)生偶然性復位操作,并且重新從頭運行用戶程序,那么將會帶來極大的負面影響或破壞性后果。例如,單片機控制的面包機,在一次加工面包的過程中,會經(jīng)歷攪拌、加熱等工序;假若其間發(fā)生意外復位并且重新從頭執(zhí)行程序,則會導致成為廢品或者燒焦。電腦控制的手術機器人,在一次手術過程中如果發(fā)生意外復位并且返工,將會帶來難以想象的嚴重后果。電腦控制的導彈,在對準目標發(fā)射之后的飛行過程中,如果發(fā)生意外復位并且重新從頭執(zhí)行程序,那么將會產(chǎn)生難以預料的結(jié)果。

            綜上所述,單片機在工作過程中,受到意外干擾而進行復位操作,如果說是不可避免的,那么復位之后從何處或在何種背景下開始運行程序,則是可以人為安排的。因此,復位位的應用方法實質(zhì)上就是復位處理程序的編寫方法。復位處理程序的處理流程如圖2所示。

          按此在新窗口瀏覽圖片
          圖2 復位處理程序流程

            類似于編寫UART串口通信中斷服務程序的思路,在進入中斷程序之后首先要檢測中斷標志位,看是一次接收中斷(RI=1)還是一次發(fā)送中斷(SI=1),然后再進入不同程序分支進行針對性服務。從圖2中可以看出,在從復位矢量0000H開始執(zhí)行用戶程序時,首先應該檢測復位標志寄存器,判斷是電源初始加電還是其他復位源引起的復位或程序計數(shù)器PC清零。

            ① 如果是電源初始加電,則進行原始狀態(tài)的初始化。這種情況最簡單。

           ?、?如果屬于程序跑飛引起的軟件復位、軟硬件復位、非法地址復位,或者人工強行復位,則應該依據(jù)具體情況盡量恢復數(shù)據(jù)或修正參數(shù),以便盡最大可能不影響或少影響程序的正常運行(恢復和修正數(shù)據(jù)的具體算法這里不再深入探討)。

           ?、?如果是欠壓復位,則盡量從被打斷的程序斷點處重新開始執(zhí)行程序。具體的實現(xiàn)方法和步驟可以是: 復位之前——單片機響應PFO中斷請求而進入其服務程序后,保存堆棧指針SP當前值到指定RAM單元,把單片機推入停機狀態(tài);復位之后——待電源恢復后,MAX813L得電而從RESET端送出高電平信號,喚醒停機狀態(tài)下的單片機。若喚醒后的單片機再檢測到是欠壓復位,則首先復原先前的SP值,再利用一條RET(或RETI)指令彈出停機之前的程序斷點到PC,從而可以繼續(xù)執(zhí)行前面的任務。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();