www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機 >> 正文

MCS-51單片機系統(tǒng)軟復位的深入研究

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2009-6-12
摘要 在沒有硬件看門狗的系統(tǒng)以及一些對單片機I/O口線狀態(tài)高度敏感的系統(tǒng)中,軟復位功能相當重要。標準MCS-51以及很多常見的51內(nèi)核單片機沒有提供“軟復位”方法。本文分別以5lasm子程序和C51函數(shù)的形式,為MCS-51單片機系統(tǒng)提供完善的“軟復位”方法。
關(guān)鍵詞 MCS-51單片機軟復位51asm C51


引 言
    復位是單片機的初始化操作,其作用是使單片機和系統(tǒng)中其他部件處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。
    標準MCS-51的復位邏輯比較簡單,只有通過復位引腳RST進行外部擴展。對于具有外部看門狗芯片的系統(tǒng),當單片機由于某種原因程序“跑飛”而沒有按時“喂狗”,或由軟件陷阱捕捉到程序運行的異常,而故意不“喂狗”時,看門狗芯片會給單片機的RST引腳提供一個復位信號,讓單片機進行一次“硬”復位,以恢復程序的正常運行;有些5l內(nèi)核的單片機具有片內(nèi)的看門狗,或者提供可訪問的寄存器實現(xiàn)“軟件復位”。一般實現(xiàn)的也都是與在RST引腳提供復位信號等價的“硬”復位。
    在有些應用中,由于單片機所接外設嚴格依附干單片機口線的時序,甚至不允許硬件復位時對口線的復位操作;或由于系統(tǒng)沒有外部看門狗,只能用軟件監(jiān)測程序運行異常并重新對單片機進行初始化操作,這時就需要所謂的“軟復位”了。
    在互聯(lián)網(wǎng)上可以找到一些軟復位的方法,但都不夠完善或不方便使用,基于C5l的軟復位更是一個難點。本文提出一種功能完善、占用資源少的實現(xiàn)方法,在51asm和C51下都可方便使用。


1 “軟復位”要實現(xiàn)的功能
    對于MCS-51系統(tǒng),所謂“軟復位”是一種由用戶軟件控制的復位活動,利用一系列指令來模擬硬件復位所實現(xiàn)的各種操作內(nèi)容,并且重新從頭開始執(zhí)行用戶程序。其內(nèi)容包括:
    ①程序計數(shù)器PC的復位,從0000H開始執(zhí)行程序;
    ②中斷優(yōu)先級狀態(tài)觸發(fā)器的復位;
    ③特殊功能寄存器的復位;
    ④程序跑飛前狀態(tài)的盡量恢復。
    其中,特殊功能寄存器的復位可根據(jù)具體系統(tǒng)的需要,在軟復位以前對相關(guān)寄存器逐個賦值再軟復位的方法完成,或在復位以后的初始化程序中實現(xiàn);程序跑飛前狀態(tài)的恢復也可根據(jù)RAM中存留的數(shù)據(jù)來進行判斷處理。本文重點討論關(guān)于程序計數(shù)器的復位和中斷優(yōu)先級狀態(tài)觸發(fā)器的復位,在此基礎上不難再增加特殊功能寄存器的復位和程序跑飛前狀態(tài)的恢復,下文不再涉及相關(guān)代碼。
    程序計數(shù)器的復位容易實現(xiàn),一條“LJMP 0000H”即可。中斷優(yōu)先級狀態(tài)觸發(fā)器的復位則比較困難,由于它們對于用戶程序是不可見的,無法直接讀寫其內(nèi)容,只有用RETI指令才能清除。又由于51單片機兩級中斷機制,低優(yōu)先級中斷有可能被高優(yōu)先級中斷再次中斷而形成中斷再入,而一次RETl只能退出當前優(yōu)先級中斷并清除相應的中斷優(yōu)先級狀態(tài)觸發(fā)器,因此最壞情況下需要兩次RETI才能確保中斷優(yōu)先級狀態(tài)觸發(fā)器的復位。綜合考慮,可先用壓棧的方法準備跳轉(zhuǎn)后的入口地址,再用RETI來完成跳轉(zhuǎn)和清除中斷優(yōu)先級狀態(tài)觸發(fā)器的雙重任務,把以上過程執(zhí)行兩次,前一次的目標地址是后一次的入口,后一次則跳轉(zhuǎn)到0000H,完成復位過程。


2 軟復位的實現(xiàn)方法
    前已述及軟復位要完成的功能,包含程序計數(shù)器PC的復位、中斷優(yōu)先級狀態(tài)觸發(fā)器的復位、特殊功能寄存器的復位(略)和程序跑飛前狀態(tài)的恢復(略)。下面分別用匯編程序和C51程序來實現(xiàn),重點介紹C51程序的實現(xiàn)方法。
2.1 51asm匯編程序?qū)崿F(xiàn)

    使用時,在軟件陷阱處理程序段或軟件看門狗中用“LJMP #RST_O”指令跳轉(zhuǎn)到此段程序入口處即可。
2.2 C51程序?qū)崿F(xiàn)
    用C語言實現(xiàn)MCS-51系統(tǒng)的軟復位,互聯(lián)網(wǎng)上出現(xiàn)過多種版本,但都不夠完善。以下基于業(yè)界應用最廣泛的編譯器Keil C51來討論。如:

    這段程序,用強制類型轉(zhuǎn)換把地址0000H轉(zhuǎn)換成re-set_not_best_O()函數(shù)的入口。實際上調(diào)用函數(shù)reset_not_best_O()等價于“LJMP 0000H”,沒有處理可能的中斷狀態(tài)問題。
    又如:

    這段代碼中,一維字符數(shù)組中為復位代碼的機器碼。“(*((Void(*)())(rst)))()”是把rst這個字符數(shù)組的地址強制轉(zhuǎn)換成函數(shù)指針,并調(diào)用。實際上調(diào)用函數(shù)reset_not_best_1()是執(zhí)行了一段如下代碼:

    可見,調(diào)用一次reset_not_best_l()函數(shù)相當于執(zhí)行了1次清除中斷優(yōu)先級狀態(tài)觸發(fā)器的動作,然后跳轉(zhuǎn)到0000H重新執(zhí)行。但此段代碼仍然可能被再次中斷失效,或者當原來堆棧已經(jīng)溢出時導致對0000H地址的壓棧錯誤,不能正確實現(xiàn)“軟復位”功能。除此之外,由于KeilC5l在把控制權(quán)交給函數(shù)main()之前對內(nèi)部RAM進行初始化的代碼是:

    此處R0作為循環(huán)變量使用,對內(nèi)部RAM從7FH單元開始,按照每次遞減的方法對內(nèi)部RAM逐一進行清零。當R0指向00H時,以上程序可以很好地完成清零工作;然而R0依據(jù)RS0、RSl取值的不同,可以指向00H、08H、10H或18H單元。當:R0指向08H、10H或18H時,上面所列清零程序?qū)⑾萑胨姥h(huán)。分析如下:
    以RS0=1、RSl=0,即RO指向08H為例。自標號LOOP處起始的循環(huán)進入時的狀態(tài)是:R0=7FH,PC=#LOOP。設程序已執(zhí)行到R0=08H,PC=#LOOP,此時執(zhí)行PC指向處的指令“MOV @RO,A”,將把(RO)清零,也即08H單元清零。由于R0指向08H,實際上R0也被清零了,此時RO=00H,PC=#LOOPl;再執(zhí)行一條指令“DJNZ R0,LOOP”,R0將由00H自減為OFFH,回到R0=OFFH,PC=#LOOP的狀態(tài);繼續(xù)執(zhí)行,將再次出現(xiàn)R0==08H,PC=#LOOP的狀態(tài),陷入死循環(huán)。當R0指向10H或18H單元時也類似會陷入死循環(huán)。為了避免上述問題,可以把字符數(shù)組中機器碼改為與以下程序段對應:

    調(diào)用改造后的reset_not_best_l()函數(shù)將清除中斷優(yōu)先級狀態(tài)觸發(fā)器,并跳轉(zhuǎn)到0000H單元繼續(xù)執(zhí)行,從而實現(xiàn)了軟復位。但由于只執(zhí)行了1次RETT指令,在復位前出現(xiàn)了中斷再入的極端情況下,仍會出現(xiàn)低優(yōu)先級中斷放鎖死的現(xiàn)象。由于無法在字符數(shù)組中實現(xiàn)對最終代碼地址的取得,無法如2.1節(jié)匯編程序中的“MOV DPTR,#RSTl”一樣讀取絕對地址,因此也無法實現(xiàn)如同2.1節(jié)中的兩次RETl來保證清除全部的中斷優(yōu)先級狀態(tài)觸發(fā)器。解決的辦法是,在內(nèi)存中設置標志flag,每次復位后都檢查特定標志,接如下偽代碼來判定(假定復位標志設為0x55,若復位后發(fā)現(xiàn)標志字為0x55則轉(zhuǎn)正常初始化程序,否則置復位標志為0x55,再次復位):

    但這種辦法有兩個弊端:其一,萬一在程序跑飛時剛好處在中斷再入中,且flag所在的RAM地址中由于某種原因恰好是0x55,低級中斷仍是被鎖死的;其二,Keil C5l的缺省編譯模式是加上了初始化程序段startup.A51的,在這段程序中對全部的內(nèi)部RAM都進行了初始化,復位標志也會被清0,flag將失效。因此要正常使用標志flag必須手工修改startup.A5l,不要清除flag單元,或者禁止stanup.A5l的使用,自己對內(nèi)部RAM進行初始化,都比較繁瑣。
    若用以下reset_best()函數(shù),則可順利解決上述問題:

    在此函數(shù)中,首先定義了結(jié)構(gòu)體類型ResetStruct,它包含字符數(shù)組rstcode和16位整型數(shù)addr兩個成員。在結(jié)構(gòu)體變量的RST實例中,RST.rstcode是復位代碼對應的機器碼,RST.a(chǎn)ddr的值是RST.rstcode這個數(shù)組的首地址+偏移量0x15。其實是以下匯編代碼中標號rstl處的地址,也即是“#rstl”,由Keil C51在編譯時自動計算得到。


    此reset_best()函數(shù)巧妙地利用C語言中數(shù)組名即是數(shù)組首地址(其實質(zhì)就是這一段“軟復位”代碼的入口地址!),把數(shù)組名+偏移量0x15賦值給結(jié)構(gòu)體的int型的成員addr,則正好把軟復位代碼中標號rstl的入口地址兩個字節(jié)取了出來(由KeilC51在編譯連接時完成),存放在RST.a(chǎn)ddr中,由于結(jié)構(gòu)體連續(xù)存儲,RST.a(chǎn)ddr會緊接著軟復位代碼RST.rstcode存放。見上段程序中的“DB #LOW(rstcode+OFH)”和“DB #HIGH(rstcode+09H)”。
    當本程序被調(diào)用并執(zhí)行到“MOVC A,@A+PC”時,分兩次取到的分別是“#rstl”的低位和高位字節(jié),把它們壓棧以后再調(diào)用RETI指令,除了清除可能有的中斷優(yōu)先級狀態(tài)記錄外,還會跳轉(zhuǎn)到rstl執(zhí)行后續(xù)的連續(xù)兩次壓棧操作,把第2次RETI的返回地址設為0000H,再通過緊接著的RETI指令,清除可能還有的中斷優(yōu)先級狀態(tài)記錄,并跳轉(zhuǎn)到0000H完成完整的復位操作。
    本程序使用一個C51函數(shù)完成了完整的包含兩次RETI在內(nèi)的復位操作,消除了所有已知隱患,只需在應用程序中包含此reset_best()函數(shù),在需要軟復位時調(diào)用即可。2.1節(jié)中所列匯編語言的子程序也可使用本節(jié)分析時所用匯編代碼代替。


結(jié) 語
    本文對MCS-51單片機的“軟復位”進行了深入討論,給出了分別基于51asm的匯編子程序和基于C5l的函數(shù)。使用本文所述的“軟復位”方法,無論是5lasm程序還是C51程序,所需的資源消耗都很小,只占用二三十個字節(jié)的程序存儲器,使用也非常簡單,不會增加編程負擔。當具體應用系統(tǒng)還需進行特殊功能寄存器的復位以度程序跑飛前狀態(tài)的恢復時,在此基礎上也很容易實現(xiàn)。特別是當單片機所接外設嚴格依附于單片機口線的時序,須盡量避免硬件復位對口線的復位操作或系統(tǒng)不具備硬件看門狗時,對于提高單片機系統(tǒng)的抗干擾能力有較大的實用價值。實際應用表明,這種軟復位方法是非常有效的。
Tags:單片機,復位,知識,單片機研究  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網(wǎng)友評論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務 - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久
欧洲一区二区av| 国产在线精品不卡| 欧美伊人精品成人久久综合97| 在线精品视频免费播放| 夜夜嗨av一区二区三区中文字幕 | 午夜精品福利一区二区三区蜜桃| 欧美美女黄视频| 日韩电影一区二区三区| 精品国产免费视频| 成人v精品蜜桃久久一区| 亚洲精品乱码久久久久久久久| 欧美日产在线观看| 国产在线播精品第三| 国产精品久久久久婷婷二区次| 91首页免费视频| 午夜精品视频一区| 91麻豆精品国产综合久久久久久 | 91久久精品日日躁夜夜躁欧美| 五月激情综合网| 国产女人水真多18毛片18精品视频 | 99精品偷自拍| 五月天视频一区| 日本一区二区三区在线不卡| 欧美亚洲综合网| 韩国三级电影一区二区| 一区二区三区在线影院| 日韩亚洲欧美一区| 99riav久久精品riav| 免费观看日韩电影| 日本一区二区成人在线| 欧美美女一区二区三区| 国产99久久久国产精品潘金| 亚洲v日本v欧美v久久精品| 久久亚洲一级片| 日本韩国欧美国产| 国产精品白丝jk黑袜喷水| 亚洲图片自拍偷拍| 欧美国产日韩a欧美在线观看| 欧美日韩国产高清一区二区三区 | 亚洲一区二区三区四区不卡| 精品福利视频一区二区三区| 色综合久久88色综合天天| 国产综合一区二区| 亚洲国产精品久久艾草纯爱| 久久久美女艺术照精彩视频福利播放| 欧洲一区二区av| 国产一区二区视频在线| 亚洲一区在线免费观看| 国产欧美日韩另类一区| 日韩亚洲欧美在线| 91黄色小视频| 高清不卡在线观看| 美女国产一区二区三区| 一区二区三区欧美在线观看| 国产视频不卡一区| 日韩视频一区二区三区在线播放| 色婷婷综合久久久中文字幕| 国产成人午夜99999| 免费成人在线观看视频| 亚洲国产毛片aaaaa无费看| 亚洲国产经典视频| 精品国产91九色蝌蚪| 5月丁香婷婷综合| 欧美在线啊v一区| 99精品热视频| 国产很黄免费观看久久| 理论电影国产精品| 午夜亚洲福利老司机| 亚洲视频每日更新| 国产日本亚洲高清| 2017欧美狠狠色| 日韩视频一区二区| 欧美二区乱c少妇| 欧美色中文字幕| 一本一道波多野结衣一区二区 | 国产美女在线观看一区| 久久精品99久久久| 日本不卡一区二区三区| 亚洲午夜私人影院| 亚洲乱码国产乱码精品精的特点| 国产精品你懂的| 久久精品一区二区| 欧美精品一区二区不卡| 日韩欧美国产综合一区 | 欧美怡红院视频| 欧美综合天天夜夜久久| 一本大道久久精品懂色aⅴ| 99热精品一区二区| www.亚洲色图| 成人妖精视频yjsp地址| 国产精品99久久久久久久vr| 国产在线看一区| 黄一区二区三区| 韩国v欧美v亚洲v日本v| 韩国毛片一区二区三区| 精品一区二区三区欧美| 国模套图日韩精品一区二区| 久久精品国产一区二区| 麻豆国产一区二区| 九一久久久久久| 国产一区在线观看麻豆| 国产精品99久久久久久似苏梦涵| 国产精品1区二区.| 国产99久久久国产精品潘金网站| 国产精品一区二区无线| 寂寞少妇一区二区三区| 精品在线你懂的| 国产成人亚洲精品青草天美| 国产 日韩 欧美大片| 99精品视频在线观看免费| 色综合咪咪久久| 欧美日韩高清在线播放| 日韩视频在线一区二区| 久久你懂得1024| 国产精品成人网| 亚洲午夜在线电影| 麻豆中文一区二区| 国产不卡视频在线播放| 91亚洲永久精品| 欧美男生操女生| 精品国产麻豆免费人成网站| 国产欧美va欧美不卡在线| 1000部国产精品成人观看| 亚洲综合区在线| 麻豆国产欧美日韩综合精品二区 | 日韩欧美电影一区| 亚洲精品一区二区精华| 久久嫩草精品久久久久| 91麻豆国产在线观看| 国产福利91精品一区二区三区| 午夜精品免费在线观看| 韩国女主播一区| 国产精品自拍在线| 国产精品一区二区久久不卡| 麻豆国产欧美一区二区三区| 成人久久久精品乱码一区二区三区 | 亚洲女同一区二区| 一区二区三区免费| 奇米精品一区二区三区四区| 日本va欧美va瓶| 美脚の诱脚舐め脚责91| 久色婷婷小香蕉久久| 天堂蜜桃91精品| 中文字幕在线观看不卡| 欧美精品一区二区高清在线观看 | 亚洲精品在线三区| 日韩欧美国产一区二区三区| 久久这里只有精品首页| 久久一区二区三区国产精品| 欧美国产精品一区| 最新国产成人在线观看| 亚洲主播在线播放| 国产精品综合一区二区| 岛国一区二区在线观看| 91一区在线观看| 欧美少妇bbb| 国产女人18毛片水真多成人如厕| 国产精品视频一二| 亚洲人一二三区| 亚洲妇女屁股眼交7| 一区二区三区蜜桃| 午夜激情综合网| 久久精品99久久久| 成人h动漫精品一区二| 欧美性生活大片视频| 91精品国产福利| 国产夜色精品一区二区av| 亚洲精品老司机| 日韩精品一二三| 国产精品一区二区在线看| 99久久国产免费看| 51精品秘密在线观看| 久久众筹精品私拍模特| 亚洲欧洲av另类| 日日摸夜夜添夜夜添精品视频| av高清久久久| 7777精品伊人久久久大香线蕉经典版下载| 日韩欧美区一区二| 国产精品电影院| 国产精品88av| 欧美在线短视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产精品一区二区在线看| 日本道色综合久久| 日韩欧美在线网站| 中文字幕日本不卡| 亚洲福利视频一区| 国产精一品亚洲二区在线视频| 色婷婷综合久久久中文一区二区| 欧美一级片在线看| 国产肉丝袜一区二区| 亚洲电影第三页| 国产精品18久久久久久久久| 欧美日韩你懂得| 夜夜嗨av一区二区三区四季av| 精品在线免费观看| 在线看国产一区二区| 国产精品伊人色| 91精品国产一区二区三区| 国产精品家庭影院|