A. 單片機實驗注意事項
單片機開發規則與注意事項
隨著大規模集成電路技術的發展,單片微型計算機也隨之大發展,各種新穎的單片機層出不窮。單片機具有體積小、重量輕、應用靈活且價格低廉等特點,廣泛地應用於人類生活的各個領域,成為當今科學技術現代化不可缺少的重要工具。
單片機系統的開發融合了硬體和軟體的相關技術。要完成單片機系統的開發,用戶不僅需要掌握編程技術,還需要針對實際應用選擇合理的單片機晶元和外圍器件,以此為基礎,設計硬體電路。
正確估計單片機的能力,知道單片機能做什麼,最大程度的挖掘單片機的潛力對一個單片機系統設計者來說是至關重要的。單片機的能力的關鍵就在軟體設計者編寫的軟體上。只有充分地了解到單片機的能力,才不會做出「冗餘」的系統設計。而採用許多的外圍晶元來實現單片機能實現的功能。這樣做,即增加了系統成本,也可能會降低了系統的可靠性。
要完成單片機系統的開發,用戶不僅需要掌握編程技術,還需要針對實際應用選擇合理的單片機晶元和外圍器件,以此為基礎,設計硬體電路。
單片機開發規則與注意事項
設計滿足要求的最精簡的系統
正確估計單片機的能力,知道單片機能做什麼,最大程度的挖掘單片機的潛力對一個單片機系統設計者來說是至關重要的。單片機的能力的關鍵就在軟體設計者編寫的軟體上。只有充分地了解到單片機的能力,才不會做出「冗餘」的系統設計。而採用許多的外圍晶元來實現單片機能實現的功能。這樣做,即增加了系統成本,也可能會降低了系統的可靠性。
看門狗電路通常是一塊在有規律的時間間隔中進行更新的硬體。更新一般由單片機來完成,如果在一定間隔內沒能更新看門狗,那看門狗將產生復位信號,重新復位單片機。更新看門狗的具體形式多是給看門狗晶元相關引腳提供一個電平上升沿或讀寫它的某個寄存器。使用看門狗電路將在單片機發生故障進行死機狀態時,重新復位單片機,像EN8F154本身就帶有看門狗。
確定系統的復位信號可靠
一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。
確定系統的初始化有效
系統中的晶元以及器件從上電開始到正常工作的狀態往往有一段時間,程序開始時延時一段時間,是讓系統中所有器件到達正常工作狀態。究竟延時多少才算合適?這取決於系統的各晶元中到達正常工作狀態的時間,通常以最慢的為准。一般來說,EN8F154的延時20-100毫秒已經足夠。對於系統中使用嵌入式MODEM等「慢熱」型的器件來說,則應更長。當然,這都需要在系統實際運行中進行調整。
當然,模擬是單片機開發過程中非常重要的一個環節,除了一些極簡單的任務,一般產品開發過程中都要進行模擬,模擬的主要目的是進行軟體調試,當然藉助模擬機,也能進行一些硬體排錯。一塊單片機應用電路板包括單片機部份及為達到使用目的而設計的應用電路,模擬就是利用模擬機來代替應用電路板(稱目標機)的單片機部份,對應用電路部份進行測試、調試。模擬有CPU模擬和ROM模擬兩種,所謂CPU模擬是指用模擬機代替目標機的CPU,由模擬機向目標機的應用電路部份供給各種信號、數據,進行調試的辦法。
B. 什麼是冗餘指令
指令冗餘法
單片機操作時序完全由程序計數器PC控制,一旦PC因干擾出現錯誤,
程序便脫離正常軌道,出現「亂飛」、改變操作數數值以及將操作數誤認為
操作碼等。為了使「亂飛」程序迅速納入正軌,應該多用單位元組指令,並在
關鍵地方插入一些空操作指令NOP或將有效單位元組指令重寫,這就叫做指
令冗餘。
1. NOP指令的使用:
在雙位元組指令或三位元組指令之後插入兩條NOP指令,可保證其後
的指令不被拆散。在對程序流向起決定作用的指令
(如RET、ACALL、LJMP、JZ、JNZ、JC、JNC、
DJNZ等)和對系統狀態起決定作用的指令(如SETB、EA等)
之前插入兩條NOP指令,使「亂飛」程序迅速納入正軌。
2. 重要指令冗餘:
在對程序流向起決定作用的指令(如RET、ACALL、LCALL
LJMP、JZ、JNZ、JC、JNC等)和某些對系統狀態起決定
作用的指令(如SETB、EA等)的後面可重復寫這些指令,以確保
這些指令的正確執行。採用冗餘法使PC納入正軌的條件是:
跑飛的PC必須指向程序運行區,並且必須執行到冗餘指令。
二、軟體陷阱法
當亂飛程序進入非程序區或表格區時,無法用冗餘指令使程序入軌,此時
可以編軟體陷阱程序,攔截亂飛程序,將其迅速引向一個指定位置, 在那裡
有程序運行出錯處理程序,將程序納入正軌。軟體陷阱的形式如下表。
根據亂飛程序落入陷阱區的位置不同,可選擇表中的兩種形式之一。
1. 未使用的中斷區。 當未使用的中斷因干擾而開放時,在對應的中斷
服務程序中設置軟體陷阱,以及時捕捉錯誤的中斷。返回指令用RETI,
中斷服務程序為:
NOP
NOP
POP direct1;將原先斷點彈出
POP direct2
PUSH 00H ;斷點地址改為0000H
PUSH 00H
RETI
說明:direct1、direct2為主程序中未使用的單元。
2. 未使用的EPROM空間。 EPROM的存儲空間很少全部用完。
未用的區域可用0000020000H或020202020000H填滿
最後一條應為020000H,當亂飛程序進入此區後,便會迅速入軌。
3.運行程序區。 將陷阱指令組分散放置在用戶程序各模塊之間的空餘單
元里。在正常程序中不執行這些指令。亂飛程序一旦落入此區,便迅速拉到正
確軌道。
4. 中斷服務程序區。 設用戶主程序運行區間為ADD1~ADD2,
並設定時器T0產生10ms定時中斷。當程序亂飛落入ADD1~ADD2
外,並發生了定時中斷後,可在中斷服務程序中判斷中斷斷點地址ADD×,
若ADD×<ADD1或ADD×>ADD2,說明發生了程序亂飛,則應使
程序返回到復位地址0000H,將亂飛程序拉到正確軌道。
假設ADD1=0100H,ADD2=1000H,2FH、2EH分別為
斷點地址高、低位元組單元,中斷服務程序為:
POP 2FH ;斷點地址彈入2FH、2EH
POP 2EH
PUSH 2EH
PUSH 2FH ;恢復斷點地址
CLR C ;斷點地址與0100H比較
MOV A,2EH
SUBB A,#00H
MOV A,2FH
SUBB A,#01H
JC LOOPN ;斷點小於0100H則轉
MOV A,#00H ;斷點地址與1000H比較
SUBB A,2EH
MOV A,#10H
SUBB A,2FH
JC LOOPN ;斷點大於10000H則轉
? ;中斷處理內容
?
?
RETI ;正常返回
LOOPN:POP 2FH ;修改斷點地址
POP 2EH
PUSH 00H ;故障斷點為0000H
PUSH 00H
RETI ;故障返回
5. 外部RAM防寫。 單片機外部RAM保存大量數據,其寫入指令
為MOVX @DPTR,A。當CPU受到干擾而非法執行該指令時, 會
改寫RAM中的數據。為減小RAM中數據丟失的可能性, 可在RAM寫作
之前加入條件陷阱,不滿足條件時不允許寫,並進入陷阱,形成死循環。
具體程序為:
MOV A,#××H
MOV DPTR,#××××H
MOV 6EH,#55H
MOV 6FH,#0AAH
LCALL WPDPSUB
RET
WPDPSUB:NOP
NOP
NOP
CJNE 6EH,#55H,XYJ ;6EH中不為
;55H則落入死循環
CJNE 6FH,#0AAH,XYJ ;6FH中不為
;AAH則落死循環
MOVX @DPTR,A ;A中數據寫入
;RAM××××H中
NOP
NOP
NOP
MOV 6EH,#00H
MOV 6FH,#00H
RET
XYJ: NOP ;死循環
NOP
SJMP XYJ
三、看門狗
「看門狗」可使程序脫離「死循環」。「看門狗」可由硬體實現,可由軟體
實現,也可由兩者結合來實現。軟體看門狗的基本思路是:在主程序中對T0
中斷服務程序進行監視;在T1中斷服務程序中對主程序進行監視;T0中斷
監視T1中斷。從概率統計的觀點,這種相互依存相互制約的抗干擾措施將使
系統的可靠性大大提高。
系統軟體包括主程序、高級中斷子程序和低級中斷子程序三部分。假設將T0
設計成高級中斷,T1設計成低級中斷,從而形成中斷嵌套。主程序流程圖如
圖1所示。主程序完成系統測控功能的同時,還要監視T0中斷因干擾而引起
的中斷關閉故障。A0為T0中斷服務程序運行狀態觀測單元,T0每中斷一
次,A0便自動加1。在測控功能模塊運行程序(主程序的主體)入口處,先
將A0值暫存於E0單元。由於測控功能模塊一般運行時間較長,設定在此期
間T0產生定時中斷(設T0定時溢出時間小於測控功能模塊運行時間),從
而引起A0變化。在測控功能模塊的出口處,將A0的即時值與先前的暫存單
元E0的值相比較,觀察A0的值是否發生變化。若A0的值發生變化,說明
T0中斷運行正常;若A0的值沒變化,說明T0中斷關閉,則轉到0000H
處,進行出錯處理。
T1中斷程序流程圖如圖2所示。T1中斷程序完成系統特定測控功能的同時,
還要監視主程序的運行狀態。在中斷服務程序中設置一個主程序運行計數器M,
T1每中斷一次,M自動加1,M中的數值與T1定時溢出時間之積表示時間值。
若M表示的時間值大於主程序運行時間T(為可靠起見,T要留有一定餘量),
說明主程序陷入死循環,T1中斷服務程序便修改斷點地址,返回0000H,
進行出錯處理。若M小於T,則中斷正常返回,M在主程序入口處循環清0