資料介紹
??標(biāo)準(zhǔn)80C51片內(nèi)現(xiàn)有的復(fù)位邏輯比較簡單,只有通過一條復(fù)位引腳RST進行外部擴展。技術(shù)手冊中給出了上電復(fù)位(POR,power on reset)和人工復(fù)位(MRST,manual reset)電路的接線方法;借助于一只專用外圍芯片,如MAX813L或DS1323等,來擴充欠壓復(fù)位(LVR,low voltage reset)和看門狗復(fù)位(WDR,watch dog timer reset)也有文章介紹。
??本文將介紹三種非常規(guī)擴展復(fù)位方式:軟件復(fù)位(SWR,software reset)、軟硬件復(fù)位(SHR,software and hardware reset)和非法地址復(fù)位(IAR,illegal address reset)。
?
??軟件陷阱技術(shù)及其改良方法
?
??軟件陷阱(software trap)是一種捕捉程序“跑飛”的編程方法。通??梢栽诔绦蛑性O(shè)置軟件陷阱,引導(dǎo)程序失控的單片機跳轉(zhuǎn)到一個指定的地址去執(zhí)行,最終回復(fù)到正常軌道上來。軟件陷阱可以設(shè)置在用戶程序的空隙處或者轉(zhuǎn)移指令之后,還可以利用一系列的陷阱指令來填充程序存儲器的空白區(qū)。實現(xiàn)軟件陷阱功能的指令是一個“5字節(jié)指令串”,通常包含2條單字節(jié)NOP指令和1條3字節(jié)跳轉(zhuǎn)指令。
??NOP ;利用空操作指令
??NOP ;來增加捕捉有效性
??LJMP SWRST;無條件跳轉(zhuǎn)到指定地址去
??其中“SWRST”可以是一段“軟件復(fù)位程序”的入口地址標(biāo)號,也可以是復(fù)位矢量“0000H”,即主程序入口地址。
??如果SWRST等于復(fù)位矢量0000H,則會把捕捉到的跑飛程序引導(dǎo)到初始化程序入口地址去執(zhí)行,從而達到回復(fù)到正常軌道的目的。這種處理方法只適合中斷功能沒有被啟用的場合??梢栽O(shè)想,假如是在(低級或高級)中斷服務(wù)程序中跑飛的,這時即使把程序拉回到起點,而中斷激活觸發(fā)器不能夠被清除,會影響以后的中斷請求無法被 CPU響應(yīng)。
??如果SWRST等于“軟件復(fù)位程序”的入口地址,則會引發(fā)一次“軟件復(fù)位”。關(guān)于軟件復(fù)位程序的設(shè)計方法,隨后介紹。
??總之,這種方法的指導(dǎo)思想是指,把未使用的ROM空間用跳轉(zhuǎn)引導(dǎo)指令填滿,作為軟件“陷阱”,以捕獲“飛掉”的程序,并強行將捕獲到的跑飛程序引向一個特定的地址,在那里由一段專門處理錯誤的程序進行處理,以恢復(fù)系統(tǒng)的正常運行。為提高跑飛程序的捕獲率,通常還要在引導(dǎo)指令之前放置上幾條空操作指令 NOP。理由是,8051的指令編碼采用的是不等長方式,長度分別為1~3字節(jié),而程序跑飛又是通過非法隨機改變PC值形成的。假若跑飛后的PC值落到3 字節(jié)指令LJMP的中間,就會把操作數(shù)當(dāng)作操作碼來執(zhí)行,將會產(chǎn)生不可預(yù)知的結(jié)果。為了提高捕捉的有效性,就在LJMP指令之前至少填充2條單字節(jié)的 NOP指令。
??如果把“5字節(jié)指令串”改換成如下作者新設(shè)計的“4字節(jié)指令串”,陷阱指令將會更加有效。理由是,該指令對應(yīng)的目標(biāo)碼為“00 20 00 20H”,這段碼無論重復(fù)多少次都是等同的。另外,應(yīng)該在程序存儲器0020H開始的3字節(jié)中再放置一條跳轉(zhuǎn)到“軟件復(fù)位程序”真正入口的中轉(zhuǎn)指令 LJMP SWRST。經(jīng)過核查,0020H~0022H字節(jié)恰好位于定時器T1中斷矢量區(qū)尾部和串口中斷矢量之前。
??SWRST0 EQU 0020H;定義“軟件復(fù)位程序”的間接入口地址為“0020H”
??NOP ;填充一條單字節(jié)的空操作指令,機器碼是“00H”
??LJMP SWRST0 ;無條件跳轉(zhuǎn)到指定地址去。對應(yīng)的機器碼是“20 00 20H”
?
??軟件復(fù)位技術(shù)
?
??軟件復(fù)位是一種新技術(shù),目前有越來越多的新型單片機配備了該功能。例如Philips公司的P87LPC700和P89LPC900系列、TI- BB公司的MSC1200系列和SunPlus公司的SPMC65系列等,內(nèi)部都設(shè)計了專門用于實現(xiàn)軟件復(fù)位的控制寄存器或者控制位。
??軟件復(fù)位是在利用軟件陷阱技術(shù)或軟件看門狗技術(shù)時,必需配套實施的一項后續(xù)處理工作。所謂“軟件復(fù)位”是一種由用戶軟件控制的復(fù)位活動,就是利用一系列指令來模擬硬件復(fù)位所實現(xiàn)的各種操作內(nèi)容,并且重新從頭開始執(zhí)行用戶程序。
??其中的操作內(nèi)容應(yīng)該包含:(1)對于標(biāo)準(zhǔn)80C51的21個特殊功能寄存器SFR的復(fù)位操作,利用MOV指令很容易實現(xiàn)。全部復(fù)位可能不是必需的,只管那些在用戶程序中用到的SFR即可,可以由用戶自己定制。
??2)對于無統(tǒng)一編址的程序計時器PC的復(fù)位,利用一條跳轉(zhuǎn)指令即可。(3)中斷激活觸發(fā)器的復(fù)位既容易被人們忽略,也不容易實現(xiàn)。理由是它們對于用戶程序是不可見的,無法直接讀寫其內(nèi)容。有的編程人員采用LJMP 0000H(機器碼為20 00 00H)作為軟件陷阱,認(rèn)為直接跳轉(zhuǎn)到復(fù)位矢量就完成了軟件復(fù)位,就是這類失誤案例的典型代表。
??清除中斷激活觸發(fā)器有何必要呢?程序的跑飛是隨機發(fā)生的,其起飛點完全可能發(fā)生在低級或高級中斷服務(wù)子程序中,這時的中斷激活觸發(fā)器已經(jīng)被置位。如果在程序回復(fù)之后沒有及時清除它們,將阻止以后出現(xiàn)的所有的同級或低級中斷請求。
?
??
??圖1 中斷激活觸發(fā)器示意圖
?
??中斷激活觸發(fā)器包含高權(quán)組和低權(quán)組兩個觸發(fā)器,電路組成如圖1所示,該圖是根據(jù)作者的理解和經(jīng)驗繪制的。電路中包括1個邏輯或門G1、兩個S-R觸發(fā)器FF1和FF2。當(dāng)CPU響應(yīng)低級中斷請求之后,F(xiàn)F1被置位,其Q = 0,封鎖“低權(quán)組”不再受理新的低級中斷請求;當(dāng)CPU響應(yīng)高級中斷請求之后,因為G1的作用而使FF1和FF2同時被置位,F(xiàn)F1的Q = 0封鎖“低權(quán)組”,F(xiàn)F2的Q = 0封鎖“高權(quán)組”,不再受理新的高級和低級中斷請求。
??如何設(shè)計“軟件復(fù)位程序”呢?其編寫方法如下。
??SWRST: ;定義軟件復(fù)位程序的實際入口地址
??CLR EA ;首先關(guān)閉中斷源總使能位
??SETB F0 ;設(shè)置一個軟件復(fù)位標(biāo)志位
??MOV P0,#0FFH ;設(shè)定通用端口P0為高阻輸入狀態(tài)
??MOV P1,#0FFH ;設(shè)定通用端口P1為高阻輸入狀態(tài)
??MOV P2,#0FFH ;設(shè)定通用端口P2為高阻輸入狀態(tài)
??MOV P3,#0FFH ;設(shè)定通用端口P3為高阻輸入狀態(tài)
??MOV PSW,#00H ;設(shè)定程序狀態(tài)字寄存器為原始值
??…… ;(據(jù)實際需要還可初始化其他SFR)
??MOV DPTR,#SWR0 ;為RETI準(zhǔn)備彈出地址,而又不想改變執(zhí)行順序
??PUSH DPL ;壓棧低字節(jié),在先
??PUSH DPH ;壓棧高字節(jié),在后
??RETI ;中斷返回指令,清除高級中斷激活觸發(fā)器
??SWR0: CLR A ;準(zhǔn)備復(fù)位地址
??PUSH ACC ;壓棧低字節(jié)00H
??PUSH ACC ;壓棧高字節(jié)00H
??RETI ;清除低級中斷激活觸發(fā)器,并跳到0000H
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 80C51單片機的最小系統(tǒng)
- 80C51單片機串行通信講解
- 模擬IC與80C51單片機的接口資料下載 12次下載
- 單片機基礎(chǔ)及應(yīng)用|80C51單片機的結(jié)構(gòu)及信號引腳資料下載
- 80C51單片機的串行口結(jié)構(gòu)和原理的程序免費下載
- 51單片機教程之80C51的結(jié)構(gòu)與原理知識點概述課件免費下載 14次下載
- 80C51單片機教程之80C51的匯編語言程序設(shè)計詳細(xì)資料總結(jié) 15次下載
- 80C51單片機教程之80C51單片機的指令系統(tǒng)詳細(xì)資料概述 25次下載
- 單片機教程之80C51的中斷系統(tǒng)及定時和計數(shù)器的詳細(xì)資料概述 9次下載
- 51單片機教程之80C51單片機的指令系統(tǒng) 36次下載
- 80C51單片機實用教程資料合集免費下載 60次下載
- 80C51單片機的硬件結(jié)構(gòu)是怎么樣的? 27次下載
- 80C51的非常規(guī)復(fù)位技術(shù) 69次下載
- 基于80C51的電動智能小車設(shè)計論文
- 80c51芯片中文資料
- MySQL三種日志講解 1.3k次閱讀
- STM32三種復(fù)位形式 1.5w次閱讀
- 用DS80C51/2微控制器代替Atmel TS80C320U323 2k次閱讀
- 干貨:三大實例講解三種C++運算符重載 4.1k次閱讀
- 80C51單片機內(nèi)部定時器和計數(shù)器的結(jié)構(gòu)及原理解析 1.6w次閱讀
- 80C51單片機實現(xiàn)專用寄存器位尋址的設(shè)計方案 3.9k次閱讀
- 80C51單片機與8051單片機的區(qū)別是什么 9.7k次閱讀
- 51單片機引腳簡介 5.6w次閱讀
- 80C51單片機的startup.a51程序模塊的作用 9.2k次閱讀
- 80C51單片機模擬I2C總線的主機程序分享 4.1k次閱讀
- 80C51單片機與8051單片機的主要差別在哪里 8.4k次閱讀
- 基于80C51單片機位尋址編程 3.9k次閱讀
- 基于80C51單片機的智能電表設(shè)計分析 1.5w次閱讀
- 解析80C51單片機中的cpu、存儲器配置以及并行輸入/輸出口 2.8w次閱讀
- mimo技術(shù)的三種模式介紹,mimo技術(shù)作用,mimo技術(shù)種類 6.8w次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊
- 0.74 MB | 1次下載 | 免費
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產(chǎn)品手冊
- 0.43 MB | 1次下載 | 免費
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費
- 3RV1126B系列開發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費
- 6【開源】60余套STM32單片機、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項目案例及入門學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論