導航:首頁 > 操作系統 > 鎖步雙冗餘單片機

鎖步雙冗餘單片機

發布時間:2024-04-15 07:57:52

① 如果單片機程序是加密的怎樣解密

單片機解密的常用方法及如何應對單片機解密
單片機解密的常用方法及應對單片機晶元解密的方法如下

單片機晶元的解密方法如下,其實,一般的人也還是破解不開的,能破解的單片機都是小晶元/小程序(直接說就是模仿其功能而新開發新程序)或解密成本比開發還高,只要用以下幾種解密方法來設計產品:
1:讓原晶元廠家將晶元的封裝腳位全部調換;
2:將HTXXXX的印字印為MDTXXXX的,將PICXXX的印為ATXXXX.......。
3:使用四層板(故意多走一些線);
4:用環氧樹脂 酶(xxx酶:可增加硬度,如將其弄開後晶元就報廢了)將測試好的線路板密封上;
5:將晶元的程序里加入晶元保護程序,EMXXX如2腳有電壓輸入時就將所有晶元的內容清除......;
6:最好使用裸片來做產品;
7:將部分埠用大電流熔斷......。
8:一般單片機解密也是犯法的,現在國家也正在打擊這些人,如盜版光蝶;軟體;書.....;查到都要罰款及判刑的,在歐盟抓到就發幾十萬到幾十億歐元。

摘要:介紹了單片機程序解密的常用方法,重點說明了侵入型攻擊/物理攻擊單片機解密方法的詳細步驟,最後,從應用角度出發,提出了對付單片機解密的幾點建議。
關鍵詞: 單片機解密,單片機解密軟體,單片機解密工具,單片機解密器,單片機解密方法,單片機解密價格,pic單片機解密,stc單片機解密,單片機解密軟體下載, 三星單片機解密,motorola單片機解密,單片機解密論壇,AVR單片機解密,單片機程序解密,單片機解密方案,單片機加密解密

1 引言

單片機(Microcontroller)一般都有內部ROM/EEPROM/Flash供用戶存放程序。為了防止未經授權訪問或拷貝單片機的機內程序,大部分單片機都帶有加密鎖定位或者加密位元組,以保護單片機片內程序。如果在編程時單片機加密鎖定位被使能(鎖定),就無法用普通編程器直接讀取單片機內的程序,這就是所謂拷貝保護或者說鎖定功能。事實上,這樣的保護措施很脆弱,很容易被破解。單片機攻擊者藉助專用設備或者自製設備,利用單片機晶元設計上的漏洞或軟體缺陷,通過多種技術手段,就可以從晶元中提取關鍵信息,獲取單片機內程序。因此,作為電子產品的設計工程師非常有必要了解當前單片機攻擊的最新技術,做到知己知彼,心中有數,才能有效防止自己花費大量金錢和時間辛辛苦苦設計出來的產品被人家一夜之間仿冒的事情發生。

2 單片機攻擊技術

目前,攻擊單片機主要有四種技術,分別是:

(1)軟體攻擊

該技術通常使用處理器通信介面並利用協議、加密演算法或這些演算法中的安全漏洞來進行攻擊。軟體攻擊取得成功的一個典型事例是對早期Atmel AT89 系列單片機的攻擊。攻擊者利用了該系列單片機擦除操作時序設計上的漏洞,使用自編程序在擦除加密鎖定位後,停止下一步擦除片內程序存儲器數據的操作,從而使加過密的單片機變成沒加密的單片機,然後利用編程器讀出片內程序。

(2) 電子探測攻擊

該技術通常以高時間解析度來監控處理器在正常操作時所有電源和介面連接的模擬特性,並通過監控它的電磁輻射特性來實施攻擊。因為單片機是一個活動的電子器件,當它執行不同的指令時,對應的電源功率消耗也相應變化。這樣通過使用特殊的電子測量儀器和數學統計方法分析和檢測這些變化,即可獲取單片機中的特定關鍵信息。

(3)過錯產生技術

該技術使用異常工作條件來使處理器出錯,然後提供額外的訪問來進行攻擊。使用最廣泛的過錯產生攻擊手段包括電壓沖擊和時鍾沖擊。低電壓和高電壓攻擊可用來禁止保護電路工作或強制處理器執行錯誤操作。時鍾瞬態跳變也許會復位保護電路而不會破壞受保護信息。電源和時鍾瞬態跳變可以在某些處理器中影響單條指令的解碼和執行。

(4)探針技術

該技術是直接暴露晶元內部連線,然後觀察、操控、干擾單片機以達到攻擊目的。

為了方便起見,人們將以上四種攻擊技術分成兩類,一類是侵入型攻擊(物理攻擊),這類攻擊需要破壞封裝,然後藉助半導體測試設備、顯微鏡和微定位器,在專門的實驗室花上幾小時甚至幾周時間才能完成。所有的微探針技術都屬於侵入型攻擊。另外三種方法屬於非侵入型攻擊,被攻擊的單片機不會被物理損壞。在某些場合非侵入型攻擊是特別危險的,這是因為非侵入型攻擊所需設備通常可以自製和升級,因此非常廉價。

大部分非侵入型攻擊需要攻擊者具備良好的處理器知識和軟體知識。與之相反,侵入型的探針攻擊則不需要太多的初始知識,而且通常可用一整套相似的技術對付寬范圍的產品。因此,對單片機的攻擊往往從侵入型的反向工程開始,積累的經驗有助於開發更加廉價和快速的非侵入型攻擊技術。

3 侵入型攻擊的一般過程

侵入型攻擊的第一步是揭去晶元封裝。有兩種方法可以達到這一目的:第一種是完全溶解掉晶元封裝,暴露金屬連線。第二種是只移掉硅核上面的塑料封裝。第一種方法需要將晶元綁定到測試夾具上,藉助綁定台來操作。第二種方法除了需要具備攻擊者一定的知識和必要的技能外,還需要個人的智慧和耐心,但操作起來相對比較方便。

晶元上面的塑料可以用小刀揭開,晶元周圍的環氧樹脂可以用濃硝酸腐蝕掉。熱的濃硝酸會溶解掉晶元封裝而不會影響晶元及連線。該過程一般在非常乾燥的條件下進行,因為水的存在可能會侵蝕已暴露的鋁線連接。

接著在超聲池裡先用丙酮清洗該晶元以除去殘余硝酸,然後用清水清洗以除去鹽分並乾燥。沒有超聲池,一般就跳過這一步。這種情況下,晶元表面會有點臟,但是不太影響紫外光對晶元的操作效果。

最後一步是尋找保護熔絲的位置並將保護熔絲暴露在紫外光下。一般用一台放大倍數至少100倍的顯微鏡,從編程電壓輸入腳的連線跟蹤進去,來尋找保護熔絲。若沒有顯微鏡,則採用將晶元的不同部分暴露到紫外光下並觀察結果的方式進行簡單的搜索。操作時應用不透明的紙片覆蓋晶元以保護程序存儲器不被紫外光擦除。將保護熔絲暴露在紫外光下5~10分鍾就能破壞掉保護位的保護作用,之後,使用簡單的編程器就可直接讀出程序存儲器的內容。

對於使用了防護層來保護EEPROM單元的單片機來說,使用紫外光復位保護電路是不可行的。對於這種類型的單片機,一般使用微探針技術來讀取存儲器內容。在晶元封裝打開後,將晶元置於顯微鏡下就能夠很容易的找到從存儲器連到電路其它部分的數據匯流排。由於某種原因,晶元鎖定位在編程模式下並不鎖定對存儲器的訪問。利用這一缺陷將探針放在數據線的上面就能讀到所有想要的數據。在編程模式下,重啟讀過程並連接探針到另外的數據線上就可以讀出程序和數據存儲器中的所有信息。

還有一種可能的攻擊手段是藉助顯微鏡和激光切割機等設備來尋找保護熔絲,從而尋查和這部分電路相聯系的所有信號線。由於設計有缺陷,因此,只要切斷從保護熔絲到其它電路的某一根信號線,就能禁止整個保護功能。由於某種原因,這根線離其它的線非常遠,所以使用激光切割機完全可以切斷這根線而不影響臨近線。這樣,使用簡單的編程器就能直接讀出程序存儲器的內容。

雖然大多數普通單片機都具有熔絲燒斷保護單片機內代碼的功能,但由於通用低檔的單片機並非定位於製作安全類產品,因此,它們往往沒有提供有針對性的防範措施且安全級別較低。加上單片機應用場合廣泛,銷售量大,廠商間委託加工與技術轉讓頻繁,大量技術資料外瀉,使得利用該類晶元的設計漏洞和廠商的測試介面,並通過修改熔絲保護位等侵入型攻擊或非侵入型攻擊手段來讀取單片機的內部程序變得比較容易。

4 應對單片機解密的幾點建議

任何一款單片機�從理論上講,攻擊者均可利用足夠的投資和時間使用以上方法來攻破。所以,在用單片機做加密認證或設計系統時,應盡量加大攻擊者的攻擊成本和所耗費的時間。這是系統設計者應該始終牢記的基本原則。除此之外,還應注意以下幾點:

(1)在選定加密晶元前,要充分調研,了解單片機解密技術的新進展,包括哪些單片機是已經確認可以解密的。盡量不選用已可解密或同系列、同型號的晶元。

(2)盡量不要選用MCS51系列單片機,因為該單片機在國內的普及程度最高,被研究得也最透。

(3)產品的原創者,一般具有產量大的特點,所以可選用比較生僻、偏冷門的單片機來加大仿冒者采購的難度。

(4)選擇採用新工藝、新結構、上市時間較短的單片機,如ATMEL AVR系列單片機等。

(5)在設計成本許可的條件下,應選用具有硬體自毀功能的智能卡晶元,以有效對付物理攻擊。

(6)如果條件許可,可採用兩片不同型號單片機互為備份,相互驗證,從而增加破解成本。

(7)打磨掉晶元型號等信息或者重新印上其它的型號,以假亂真。

當然,要想從根本上防止單片機解密,程序被盜版等侵權行為發生,只能依靠法律手段來保障。

② 關於單片機的種類問題

單片機的分類Ⅰ 按生產廠家分
美國的英特爾(Intel) 公司、摩托羅拉(Motorola)公司、國家辦導體(NS) 公司、Atmel公司、微晶元(Microchip) 公司、洛克威爾(Rockwell)公司、莫斯特克公司(Mostek)、齊洛格(Zilog)公司、仙童(Fairchid)公司、德州儀器(TI)公司等等。日本的電氣(NS)公司、東芝(Toshiba)公司、富士通(Fujitsu)公司、松下公司、日立(Hitachi)公司、日電(NEC)公司、夏普公司等等。荷蘭的飛利浦(Philips)公司。德國的西門子(Siemens)公司等等。
Ⅱ 按字長分(1)4-BIT 單片機
4 位單片機的控制功能較弱,CPU 一次只能處理4 位二進制數。這類單片機常用於計算器、各種形態的智能單元以及作為家用電器中的控制器。典型產品有NEC 公司的UPD 75××系列、NS 公司的COP400 系列、松下公司的MN1400 系列、ROCKWELL 公司的PPS/1系列、富士通公司的MB88 系列、夏普公司的SM××系列、Toshiba 公司的TMP47×××系列等等。
① 華邦公司的W741系列的4位單片機帶液晶驅動,在線燒錄,保密性高,低操作電壓(1.2V~1.8V)。
② 東芝單片機的4位機在家電領域有很大市場。
(2)8-BIT 單片機
8 位單片機 8 位單片機的控制功能較強,品種最為齊全。和4 位單片機相比,它不僅具有較大的存儲容量和定址范圍,而且中斷源、並行I/O 介面和定時器/計數器個數都有了不同程度的增加,並集成有全雙工串列通信介面。在指令系統方面,普遍增設了乘除指令和比較指令。特別是8 位機中的高性能增強型單片機,除片內增加了A/D 和D/A 轉換器外,還集成有定時器捕捉/比較寄存器、監視定時器(Watchdog)、匯流排控制部件和晶體振盪電路等。這類單片機由於其片內資源豐富和功能強大,主要在工業控制、智能儀表、家用電器和辦公自動化系統中應用。代表產品有Intel 公司的MCS-48 系列和MCS-51 系列 、Microchip 公司的PIC16C××系列和PIC17C××系列以及PIC1400 系列、Motorola 公司的M68HC05 系列和M68HC11 系列、Zilog 公司的Z8 系列、荷蘭Philips 公司的80C51 系列(同MCS-51 兼容)、Atmel公司的AT89 系列(同MCS-51 兼容)、NEC 公司的UPD78××系列等等。
1)51系列單片機
8031/8051/8751是Intel公司早期的產品。應用的早,影響很大,已成為世界上的工業標准。後來很多晶元廠商以各種方式與Intel公司合作,也推出了同類型的單片機,如同一種單片機的多個版本一樣,雖都在不斷的改變製造工藝,但內核卻一樣,也就是說這類單片機指令系統完全兼容,絕大多數管腳也兼容;在使用上基本可以直接互換。人們統稱這些與8051內核相同的單片機為「51系列單片機」。
8031片內不帶程序存儲器ROM,使用時用戶需外接程序存儲器和一片邏輯電路373,外接的程序存儲器多為EPROM的2764系列。用戶若想對寫入到EPROM中的程序進行修改,必須先用一種特殊的紫外線燈將其照射擦除,之後再可寫入。寫入到外接程序存儲器的程序代碼沒有什麼保密性可言。
8051片內有4k ROM,無須外接外存儲器和373,更能體現「單片」的簡練。但是所編的程序無法寫入到其ROM中,只有將程序交晶元廠代為寫入,並是一次性的,不能改寫其內容。
8751與8051基本一樣,但8751片內有4k的EPROM,用戶可以將自己編寫的程序寫入單片機的EPROM中進行現場實驗與應用,EPROM的改寫同樣需要用紫外線燈照射一定時間擦除後再寫入。
在眾多的51系列單片機中,要算 ATMEL 公司的AT89C51、AT89S52更實用,因他不但和8051指令、管腳完全兼容,而且其片內的4K程序存儲器是FLASH工藝的,這種工藝的存儲器用戶可以用電的方式瞬間擦除、改寫,一般專為 ATMEL AT89xx 做的編程器均帶有這些功能。顯而易見,這種單片機對開發設備的要求很低,開發時間也大大縮短。寫入單片機內的程序還可以進行加密,這又很好地保護了你的勞動成果。而且,AT89C51、AT89S51目前的售價比8031還低,市場供應也很充足。
AT89S51、52是2003年ATMEL推出的新型品種,除了完全兼容8051外,還多了ISP編程和看門狗功能。
ATMEL公司的51系列還有AT89C2051、AT89C1051等品種,這些晶元是在AT89C51的基礎上將一些功能精簡掉後形成的精簡版。AT89C2051取掉了P0口和P2口,內部的程序FLASH存儲器也小到2K,封裝形式也由51的P40腳改為20腳,相應的價格也低一些,特別適合在一些智能玩具,手持儀器等程序不大的電路環境下應用;AT89C1051在2051的基礎上,再次精簡掉了串口功能等,程序存儲器再次減小到1k,當然價格也更低。
51 單片機目前已有多種型號,市場上目前供貨比較足的晶元還要算ATMEL 的51、52 晶元, HYUNDAI 的GMS97 系列,WINBOND 的78e52,78e58,77e58 等。
GMS97 系列是一次性燒寫,一般只有大量生產的人才買。at89c51,52 因可以很容易地解密,一般人們只用它來做實驗,或者用在一些即使解了密也無關緊要的場合。89c2051 只有20 腿,體積小巧,在一些簡單應用和體積有限的場合得到廣泛應用。
2)PIC系列單片機
由美國Microchip公司推出的PIC單片機系列產品,首先採用了RISC結構的嵌入式微控制器,其高速度、低電壓、低功耗、大電流LCD驅動能力和低價位OTP技術等都體現出單片機產業的新趨勢。
現在PIC系列單片機在世界單片機市場的份額排名中已逐年升位,尤其在8位單片機市場,據稱已從1990年的第20位上升到目前的第二位。PIC單片機從覆蓋市場出發,已有三種(又稱三層次)系列多種型號的產品問世,所以在全球都可以看到PIC單片機從電腦的外設、家電控制、電訊通信、智能儀器、汽車電子到金融電子各個領域的廣泛應用。現今的PIC單片機已經是世界上最有影響力的嵌入式微控制器之一。
① PIC 8位單片機的分類
PIC 8位單片機產品共有三個系列,即基本級、中級和高級。
a基本級系列該級產品的特點是低價位,如PIC16C5X,適用於各種對成本要求嚴格的家電產品選用。又如PIC12C5XX是世界第一個8腳的低價位單片機,因其體積很小,完全可以應用在以前不能使用單片機的家電產品的空間。
b中級系列該級產品是PIC最豐富的品種系列。它是在基本級產品上進行了改進,並保持了很高的兼容性。外部結構也是多種的,從8引腳到68引腳的各種封裝,如PIC12C6XX。該級產品其性能很高,如內部帶有A/D變換器、E2PROM數據存儲器、比較器輸出、PWM輸出、I2C和SPI等介面。PIC中級系列產品適用於各種高、中和低檔的電子產品的設計中。
c高級系列該系列產品如PIC17CXX,其特點是速度快,所以適用於高速數字運算的應用場合中,加之它具備一個指令周期內(160ns)可以完成8×8(位)二進制乘法運算能力,所以可取代某些DSP產品。再有PIC17CXX具有豐富的I/O控制功能,並可外接擴展EPROM和RAM,使它成為目前8位單片機中性能最高的機種之一。所以很適用於高、中檔的電子設備中使用。
上述的三層次(級)的PIC 8位單片機還具有很高的代碼兼容性,用戶很容易將代碼從某型號轉換到另一個型號中。PIC 8位單片機具有指令少、執行速度快等優點,其主要原因是PIC系列單片機在結構上與其它單片機不同。該系列單片機引入了原用於小型計算機的雙匯流排和兩級指令流水結構。這種結構與一般採用CISC(復雜指令集計算機)的單片機在結構上是有不同的。
雙匯流排結構
具有CISC結構的單片機均在同一存儲空間取指令和數據,片內只有一種匯流排。這種匯流排既要傳送指令又要傳送數據(如圖1-a所示)。因此,它不可能同時對程序存儲器和數據存儲器進行訪問。因與CPU直接相連的匯流排只有一種,要求數據和指令同時通過,顯然「亂套」,這正如一個「瓶頸」,瓶內的數據和指令要一起倒出來,往往就被瓶頸卡住了。所以具有這種結構的單片機,只能先取出指令,再執行指令(在此過程中往往要取數),然後,待這條指令執行完畢,再取出另一條指令,繼續執行下一條。這種結構通常稱為馮•諾依曼結構,又稱普林斯頓結構。
在這里PIC系列單片機採用了一種雙匯流排結構,即所謂哈佛結構。這種結構有兩種匯流排,即程序匯流排和數據匯流排。這兩種匯流排可以採用不同的字長,如PIC系列單片機是八位機,所以其數據匯流排當然是八位。但低檔、中檔和高檔的PIC系列機分別有12位、14位和16位的指令匯流排。這樣,取指令時則經指令匯流排,取數據時則經數據匯流排,互不沖突。
② 兩級指令流水線結構
由於PIC系列單片機採用了指令空間和數據空間分開的哈佛結構,用了兩種位數不同的匯流排。因此,取指令和取數據有可能同時交疊進行,所以在PIC系列微控制器中取指令和執行指令就採用指令流水線結構。當第一條指令被取出後,隨即進入執行階段,這時可能會從某寄存器取數而送至另一寄存器,或從一埠向寄存器傳送數等,但數據不會流經程序匯流排,而只是在數據匯流排中流動,因此,在這段時間內,程序匯流排有空,可以同時取出第二條指令。當第一條指令執行完畢,就可執行第二條指令,同時取出第3條指令,……如此等等。這樣,除了第一條指令的取出,其餘各條指令的執行和下一條指令的取出是同時進行的,使得在每個時鍾周期可以獲得最高效率。
在大多數微控制器中,取指令和指令執行都是順序進行的,但在PIC單片機指令流水線結構中,取指令和執行指令在時間上是相互重疊的,所以PIC系列單片機才可能實現單周期指令。
只有涉及到改變程序計數器PC值的程序分支指令(例如GOTO、CALL)等才需要兩個周期。
此外,PIC的結構特點還體現在寄存器組上,如寄存器I/O口、定時器和程序寄存器等都是採用了RAM結構形式,而且都只需要一個周期就可以完成訪問和操作。而其它單片機常需要兩個或兩個以上的周期才能改變寄存器的內容。上述各項,就是PIC系列單片機能做到指令總數少,且大都為單周期指令的重要原因。
3)AVR系列單片機
AVR單片機是1997年由ATMEL公司研發出的增強型內置Flash的RISC(Reced Instruction Set CPU) 精簡指令集高速8位單片機。AVR的單片機可以廣泛應用於計算機外部設備、工業實時控制、儀器儀表、通訊設備、家用電器等各個領域。
①AVR單片機的優勢及特點
a AVR單片機易於入手、便於升級、費用低廉。 單片機初學者只需一條ISP下載線,把編輯、調試通過的軟體程序直接在線寫入AVR單片機,即可以開發AVR單片機系列中的各種封裝的器件。AVR單片機因此在業界號稱「一線打天下」。 AVR程序寫入是直接在電路板上進行程序修改、燒錄等操作,這樣便於產品升級。AVR單片機可使用ISP在線下載編程方式(即把PC機上編譯好的程序寫到單片機的程序存儲器中),不需購買模擬器、編程器、擦抹器和晶元適配器等,即可進行所有AVR單片機的開發應用,這可節省很多開發費用。程序存儲器擦寫可達10000次以上,不會產生報廢品。
b高速、低耗、保密。首先,AVR單片機是高速嵌入式單片機: AVR單片機具有預取指令功能,即在執行一條指令時,預先把下一條指令取進來,使得指令可以在一個時鍾周期內執行。多累加器型,數據處理速度快。AVR單片機具有32個通用工作寄存器,相當於有32條立交橋,可以快速通行。中斷響應速度快。AVR單片機有多個固定中斷向量入口地址,可快速響應中斷。AVR單片機耗能低。對於典型功耗情況,WDT關閉時為100nA,更適用於電池供電的應用設備。有的器件最低1.8 V即可工作。AVR單片機保密性能好。它具有不可破解的位加密鎖Lock Bit技術,保密位單元深藏於晶元內部,無法用電子顯微鏡看到。
c I/O口功能強,具有A/D轉換等電路。AVR單片機的I/O口是真正的I/O口,能正確反映I/O口輸入/輸出的真實情況。工業級產品,具有大電流(灌電流)10mA~40mA,可直接驅動可控硅SSR或繼電器,節省了外圍驅動器件。AVR單片機內帶模擬比較器,I/O口可用作A/D轉換,可組成廉價的A/D轉換器。ATmega48/8/16等器件具有8路10位A/D。部分AVR單片機可組成零外設元件單片機系統,使該類單片機無外加元器件即可工作,簡單方便,成本又低。AVR單片機可重設啟動復位,以提高單片機工作的可靠性。有看門狗定時器實行安全保護,可防止程序走亂(飛),提高了產品的抗干擾能力。
d 有功能強大的定時器/計數器及通訊介面。定時/計數器T/C有8位和16位,可用作比較器。計數器外部中斷和PWM(也可用作D/A)用於控制輸出,某些型號的AVR單片機有3~4個PWM,是作電機無級調速的理想器件。AVR單片機有串列非同步通訊UART介面,不佔用定時器和SPI同步傳輸功能,因其具有高速特性,故可以工作在一般標准整數頻率下,而波特率可達576K。
②AVR 8-Bit MCU的最大特點
與其它8-Bit MCU相比,AVR 8-Bit MCU最大的特點是:
• 哈佛結構,具備1MIPS / MHz的高速運行處理能力;
• 超功能精簡指令集(RISC),具有32個通用工作寄存器,克服了如8051 MCU採用單一ACC進行處理造成的瓶頸現象;
• 快速的存取寄存器組、單周期指令系統,大大優化了目標代碼的大小、執行效率,部分型號FLASH非常大,特別適用於使用高級語言進行開發;
• 作輸出時與PIC的HI/LOW相同,可輸出40mA(單一輸出),作輸入時可設置為三態高阻抗輸入或帶上拉電阻輸入,具備10mA-20mA灌電流的能力;
• 片內集成多種頻率的RC振盪器、上電自動復位、看門狗、啟動延時等功能,外圍電路更加簡單,系統更加穩定可靠;
• 大部分AVR片上資源豐富:帶E2PROM,PWM,RTC,SPI,UART,TWI,ISP,AD,Analog Comparator,WDT等;
• 大部分AVR除了有ISP功能外,還有IAP功能,方便升級或銷毀應用程序。
(3)16-BIT 單片機
16 位單片機是在1983 年以後發展起來的。這類單片機的特點是:CPU是16 位的,運算速度普遍高於8 位機,有的單片機的定址能力高達1MB,片內含有A/D 和D/A轉換電路,支持高級語言。這類單片機主要用於過程式控制制、智能儀表、家用電器以及作為計算機外部設備的控制器等。典型產品有Intel 公司的MCS-96/98 系列、Motorola 公司的M68HC16系列、NS 公司的783××系列、TI公司的MSP430系列等等。
其中,以MSP430系列最為突出。它採用了精簡指令集( RISC )結構,具有豐富的定址方式( 7 種源操作數定址、 4 種目的操作數定址)、簡潔的 27 條內核指令以及大量的模擬指令;大量的寄存器以及片內數據存儲器都可參加多種運算;還有高效的查表處理指令;有較高的處理速度,在 8MHz 晶體驅動下指令周期為 125 ns 。這些特點保證了可編制出高效率的源程序。
在運算速度方面, MSP430 系列單片機能在 8MHz 晶體的驅動下,實現 125ns 的指令周期。 16 位的數據寬度、 125ns 的指令周期以及多功能的硬體乘法器(能實現乘加)相配合,能實現數字信號處理的某些演算法(如 FFT 等)。
MSP430 系列單片機的中斷源較多,並且可以任意嵌套,使用時靈活方便。當系統處於省電的備用狀態時,用中斷請求將它喚醒只用 6us 。
超低功耗 MSP430 單片機之所以有超低的功耗,是因為其在降低晶元的電源電壓及靈活而可控的運行時鍾方面都有其獨到之處。
首先, MSP430 系列單片機的電源電壓採用的是 1.8~3.6V 電壓。因而可使其在 1MHz 的時鍾條件下運行時, 晶元的電流會在 200~400uA 左右,時鍾關斷模式的最低功耗只有 0.1uA 。
其次,獨特的時鍾系統設計。在 MSP430 系列中有兩個不同的系統時鍾系統:基本時鍾系統和鎖頻環( FLL 和 FLL+ )時鍾系統或 DCO 數字振盪器時鍾系統。有的使用一個晶體振盪器( 32768Hz ) , 有的使用兩個晶體振盪器)。由系統時鍾系統產生 CPU 和各功能所需的時鍾。並且這些時鍾可以在指令的控制下,打開和關閉,從而實現對總體功耗的控制。
由於系統運行時打開的功能模塊不同,即採用不同的工作模式,晶元的功耗有著顯著的不同。在系統中共有一種活動模式( AM )和五種低功耗模式( LPM0~LPM4 )。在等待方式下,耗電為 0.7uA ,在節電方式下,最低可達 0.1uA 。
系統工作穩定 上電復位後,首先由 DCOCLK 啟動 CPU ,以保證程序從正確的位置開始執行,保證晶體振盪器有足夠的起振及穩定時間。然後軟體可設置適當的寄存器的控制位來確定最後的系統時鍾頻率。如果晶體振盪器在用做 CPU 時鍾 MCLK 時發生故障, DCO 會自動啟動,以保證系統正常工作;如果程序跑飛,可用看門狗將其復位。
豐富的片上外圍模塊 MSP430 系列單片機的各成員都集成了較豐富的片內外設。它們分別是看門狗( WDT )、模擬比較器 A 、定時器 A ( Timer_A )、定時器 B ( Timer_B )、串口 0 、 1 ( USART0 、 1 )、硬體乘法器、液晶驅動器、 10 位 /12 位 ADC 、 I 2 C 匯流排直接數據存取( DMA )、埠 O ( P0 )、埠 1~6 ( P1~P6 )、基本定時器( Basic Timer )等的一些外圍模塊的不同組合。其中,看門狗可以使程序失控時迅速復位;模擬比較器進行模擬電壓的比較,配合定時器,可設計出 A/D 轉換器; 16 位定時器( Timer_A 和 Timer_B )具有捕獲 / 比較功能,大量的捕獲 / 比較寄存器,可用於事件計數、時序發生、 PWM 等;有的器件更具有可實現非同步、同步及多址訪問串列通信介面可方便的實現多機通信等應用;具有較多的 I/O 埠,最多達 6*8 條 I/O 口線; P0 、 P1 、 P2 埠能夠接收外部上升沿或下降沿的中斷輸入; 12/14 位硬體 A/D 轉換器有較高的轉換速率,最高可達 200kbps ,能夠滿足大多數數據採集應用;能直接驅動液晶多達 160 段;實現兩路的 12 位 D/A 轉換;硬體 I 2 C 串列匯流排介面實現存儲器串列擴展;以及為了增加數據傳輸速度,而採用直接數據傳輸( DMA )模塊。 MSP430 系列單片機的這些片內外設為系統的單片解決方案提供了極大的方便。
方便高效的開發環境 目前 MSP430 系列有 OPT 型、 FLASH 型和 ROM 型三種類型的器件,這些器件的開發手段不同。對於 OPT 型和 ROM 型的器件是使用模擬器開發成功之後在燒寫或掩膜晶元;對於 FLASH 型則有十分方便的開發調試環境,因為器件片內有 JTAG 調試介面,還有可電擦寫的 FLASH 存儲器,因此採用先下載程序到 FLASH 內,再在器件內通過軟體控製程序的運行,由 JTAG 介面讀取片內信息供設計者調試使用的方法進行開發。這種方式只需要一台 PC 機和一個 JTAG 調試器,而不需要模擬器和編程器。開發語言有匯編語言和 C 語言。
MSP430 單片機目前主要以 FLASH 型為主。
(4)32-BIT 單片機
32 位單片機的字長為32 位,是單片機的頂級產品,具有極高的運算速度。近年來,隨著家用電子系統的新發展,32 位單片機的市場前景看好。
繼16 位單片機出現後不久,幾大公司先後推出了代表當前最高性能和技術水平的32 位單片微機系列。32 位單片機具有極高的集成度,內部採用新穎的RISC(精簡指令系統計算機)結構,CPU 可與其他微控制器兼容,主頻頻率可達33MHz 以上,指令系統進一步優化,運算速度可動態改變,設有高級語言編譯器,具有性能強大的中斷控制系統、定時/事件控制系統、同步/非同步通信控制系統。代表產品有Intel 公司的MCS-80960 系列、Motorola 公司的M68300 系列、Hitachi 公司的Super H(簡稱SH)系列等等。
這類單片機主要應用於汽車、航空航天、高級機器人、軍事裝備等方面。它代表著單片機發展中的高、新技術水平。
ARM在32位MCU中的主流地位是毫無疑問的。ARM公司於1991年成立於英國劍橋,主要出售晶元設計技術的授權。目前,採用ARM技術智能財產(IP)核心的處理器,即我們通常所說的ARM處理器,已遍及工業控制、消費類電子產品、通信系統、網路系統、無線系統等各類產品市場,基於ARM技術的處理器應用約占據了32位RISC微處理器75%以上的市場,ARM技術不止逐步滲入到我們生活的各個方面,我們甚至可以說,ARM於人類的生活環境中,已經是不可或缺的一環。
目前市面上常見的ARM處理器架構,可分為ARM7、ARM9以及ARM11,新推出的Cortex系列尚在進行開發驗證,市面上還未有相關產品推出。ARM也是嵌入式處理器中首先推出多核心架構的廠商。
ARM首個多核心架構為ARM11 MPCore,架構於原先的ARM11處理器核心之上。ARM11核心是發布於2002年10月份,為了進一步提升效能,其管線長度擴展到8階,處理單元則增加為預取、解碼、發送、轉換/MAC1、執行/MAC2、內存存取/MAC3和寫入等八個單元,體繫上屬於ARM V6指令集架構。ARM11採用當時最先進的0.13μm製造製程,運行頻率最高可達500到700MHz。如果採用90nm製程,ARM11核心的工作頻率能夠輕松達到1GHz以上—對於嵌入式處理器來說,這顯然是個相當驚人的程度,不過顯然1GHz在ARM11體系中不算是個均衡的設定,因此幾乎沒有廠商推出達到1GHz的ARM11架構處理器。
ARM11的邏輯核心也經過大量的改進,其中最重要的當屬「靜/動態組合轉換的預測功能」。ARM11的執行單元包含一個64位、4種狀態的地址轉換緩沖,它主要用來儲存最近使用過的轉換地址。當採用動態轉換預測機制而無法在定址緩沖內找到正確的地址時,靜態轉換預測功能就會立刻接替它的位置。在實際測試中,單純採用動態預測的准確率為88%,單純採用靜態預測機制的准確率只有77%,而ARM11的靜/動態預測組合機制可實現92%的高准確率。針對高時脈速度帶來功耗增加的問題,ARM11採用一項名為「IEM(Intelligent Energy Manager)」的智能電源管理技術,該技術可根據任務負荷情況動態調節處理器的電壓,進而有效降低自身的功耗。這一系列改進讓ARM11的功耗效能比得以繼續提高,平均每MHz只需消耗0.6mW(有快取時為0.8mW)的電力,處理器的最高效能可達到660 Dhrystone MIPS,遠超過上一代產品。
Ⅲ 按製造工藝分
① HMOS 工藝 高密度短溝道MOS 工藝,具有高速度、高密度的特點。
② CHMOS(或HCMOS)工藝 互補的金屬氧化物的HMOS 工藝,是CMOS 和HMOS 的結合,具有高密度、高速度、低功耗的特點。Intel 公司產品型號中若帶有字母「C」 ,Motorola 公司產品型號中若帶有字母「HC」或「L」 ,通常為CHMOS 工藝。

③ AVR單片機的發展起源

AVR單片機是 Atmel 公司 1997 年推出的 RISC 單片機。RISC(精簡指令系統計算機)是相對於CISC(復雜指令系統計算機)而言的。RISC 並非只是簡單地去減少指令,而是通過使計算機的結構更加簡單合理而提高運算速度的。RISC 優先選取使用頻率最高的簡單指令,避免復雜指令:並固定指令寬度,減少指令格式和定址方式的種類,從而縮短指令周期,提高運行速度。由於 AVR 採用了 RISC 的這種結構,使AVR系列單片機都具備了1MIPS/MHz(百萬條指令每秒/兆赫茲)的高速處理能力。
早期單片機主要由於工藝及設計水平不高、功耗高和抗干擾性能差等原因,所以採取穩妥方案:即採用較高的分頻系數對時鍾分頻,使得指令周期長,執行速度慢。以後的CMOS單片機雖然採用提高時鍾頻率和縮小分頻系數等措施,但這種狀態並未被徹底改觀(51以及51兼容)。此間雖有某些精簡指令集單片機(RISC)問世,但依然沿襲對時鍾分頻的作法。
AVR單片機的推出,徹底打破這種舊設計格局,廢除了機器周期,拋棄復雜指令計算機(CISC)追求指令完備的做法;採用精簡指令集,以字作為指令長度單位,將內容豐富的操作數與操作碼安排在一字之中(指令集中佔大多數的單周期指令都是如此),取指周期短,又可預取指令,實現流水作業,故可高速執行指令。當然這種速度上的升躍,是以高可靠性為其後盾的。
AVR單片機硬體結構採取8位機與16位機的折中策略,即採用局部寄存器存堆(32個寄存器文件)和單體高速輸入/輸出的方案(即輸入捕獲寄存器、輸出比較匹配寄存器及相應控制邏輯)。提高了指令執行速度(1Mips/MHz),克服了瓶頸現象,增強了功能;同時又減少了對外設管理的開銷,相對簡化了硬體結構,降低了成本。故AVR單片機在軟/硬體開銷、速度、性能和成本諸多方面取得了優化平衡,是高性價比的單片機。
AVR單片機內嵌高質量的Flash程序存儲器,擦寫方便,支持ISP和IAP,便於產品的調試、開發、生產、更新。內嵌長壽命的EEProm可長期保存關鍵數據,避免斷電丟失。片內大容量的RAM不僅能滿足一般場合的使用,同時也更有效的支持使用高級語言開發系統程序,並可像MCS-51單片機那樣擴展外部RAM。
AVR單片機的I/O線全部帶可設置的上拉電阻、可單獨設定為輸入/輸出、可設定(初始)高阻輸入、驅動能力強(可省去功率驅動器件)等特性,使的得I/O口資源靈活、功能強大、可充分利用。
AVR單片機片內具備多種獨立的時鍾分頻器,分別供URAT、I2C、SPI使用。其中與8/16位定時器配合的具有多達10位的預分頻器,可通過軟體設定分頻系數提供多種檔次的定時時間。
AVR單片機獨有的「以定時器/計數器(單)雙向計數形成三角波,再與輸出比較匹配寄存器配合,生成占空比可變、頻率可變、相位可變方波的設計方法(即脈寬調制輸出PWM)更是令人耳目一新。
增強性的高速同/非同步串口,具有硬體產生校驗碼、硬體檢測和校驗偵錯、兩級接收緩沖、波特率自動調整定位(接收時)、屏蔽數據幀等功能,提高了通信的可靠性,方便程序編寫,更便於組成分布式網路和實現多機通信系統的復雜應用,串口功能大大超過MCS-51/96單片機的串口,加之AVR單片機高速,中斷服務時間短,故可實現高波特率通訊。
面向位元組的高速硬體串列介面TWI、SPI。TWI與I2C介面兼容,具備ACK信號硬體發送與識別、地址識別、匯流排仲裁等功能,能實現主/從機的收/發全部4種組合的多機通信。SPI支持主/從機等4種組合的多機通信。
AVR單片機有自動上電復位電路、獨立的看門狗電路、低電壓檢測電路BOD,多個復位源(自動上下電復位、外部復位、看門狗復位、BOD復位),可設置的啟動後延時運行程序,增強了嵌入式系統的可靠性。
AVR單片機具有多種省電休眠模式,且可寬電壓運行(5-2.7V),抗干擾能力強,可降低一般8位機中的軟體抗干擾設計工作量和硬體的使用量。
AVR系列單片機的選型
AVR單片機系列齊全,可適用於各種不同場合的要求。
AVR單片機有3個檔次:
低檔Tiny系列:主要有Tiny11/12/13/15/26/28等;
中檔AT90S系列:主要有AT90S1200/2313/8515/8535等;(正在淘汰或轉型到Mega中)
高檔ATmega:主要有ATmega8/16/32/64/128(存儲容量為8/16/32/64/128KB)以及ATmega8515/8535等。
AVR器件引腳從8腳到64腳,還有各種不同封裝供選擇。 ⒈型號緊跟的字母,表示電壓工作范圍。帶「V」:1.8-5.5V;若預設,不帶「V」:2.7-5.5V。
例:ATmega48-20AU,不帶「V」表示工作電壓為2.7-5.5V。
⒉後綴的數字部分,表示支持的最高系統時鍾。
例:ATmega48-20AU,「20」表示可支持最高為20MHZ的系統時鍾。
⒊後綴第一(第二)個字母,表示封裝。「P」:DIP封裝,「A」:TQFP封裝,「M」:MLF封裝。
例:ATmega48-20AU,「A」表示TQFP封裝。
⒋後綴最後一個字母,表示應用級別。「C」:商業級,「I」:工業級(有鉛)、「U」工業級(無鉛)。
例:ATmega48-20AU,「U」表示無鉛工業級。ATmega48-20AI,「I」表示有鉛工業級。 該系統模塊的控制核心是AVR高速單片機ATmega8。AVR單片機是新一代基於哈佛結構的高速RISC微控制器,具有速度快、價格低、可靠性高,I/O口線驅動能力強和片內集成外設資源豐富等特點,其內部集成有可進行ISP下載編程的Flash,EEPROM、熔絲位和鎖定位。AVR單片機的ISP下載電纜製作簡單、成本低廉,還有免費的下載軟體(例如PonyProg)支持。PDIUSBD12是一款高性價比USB介面器件,完全符合USB1.l規范,易於與各種微處理器介面。
系統模塊AVR單片機與PDIUSBD12的電路連接如圖1所示。
由圖1看出,由於AVR單片機具有高速性,可利用I/O埠線以軟體方式模擬PDIUSBD12的時序,對其讀寫。這種方式可根據不同的微處理器速度靈活控制PDIUSBD12的時序和地址,無需解碼電路,從而簡化硬體設計,降低成本。
由於ATmega8片內集成了UART,SPI,I2C等介面,該介面模塊可利用這些介面與其他系統通信,使得該介面模塊成為通用的介面轉換器。其系統硬體結構框圖如圖2所示。 AVR已被廣泛用於: 空調控制板 列印機控制板 智能電表 智能手電筒 LED控制屏 醫療設備 GPS

④ 單片機系統軟體抗干擾方法

在提高硬體系統抗干擾能力的同時 軟體抗干擾以其設計靈活 節省硬體資源 可靠性好越來越受到重視 下面以MCS 單片機系統為例 對微機系統軟體抗干擾方法進行研究

軟體抗干擾方法的研究

在工程實踐中 軟體抗干擾研究的內容主要是 一 消除模擬輸入信號的嗓聲(如數字濾波技術) 二 程序運行混亂時使程序重入正軌的方法 本文針對後者提出了幾種有效的軟體抗干擾方法

指令冗餘

CPU取指令過程是先取操作碼 再取操作數 當PC受干擾出現錯誤 程序便脫離正常軌道 亂飛 當亂飛到某雙位元組指令 若取指令時刻落在操作數上 誤將操作數當作操作碼 程序將出錯 若 飛 到了三位元組指令 出錯機率更大

在關鍵地方人為插入一些單位元組指令 或將有效單位元組指令重寫稱為指令冗餘 通常是在雙位元組指令和三位元組指令後插入兩個位元組以上的NOP 這樣即使亂飛程序飛到操作數上 由於空操作指令NOP的存在 避免了後面的指令被當作操作數執行 程序自動納入正軌

此外 對系統流向起重要作用的指令如RET RETI LCALL LJMP JC等指令之前插入兩條NOP 也可將亂飛程序納入正軌 確保這些重要指令的執行

攔截技術

所謂攔截 是指將亂飛的程序引向指定位置 再進行出錯處理 通常用軟體陷阱來攔截亂飛的程序 因此先要合理設計陷阱 其次要將陷阱安排在適當的位置

軟體陷阱的設計

當亂飛程序進入非程序區 冗餘指令便無法起作用 通過軟體陷阱 攔截亂飛程序 將其引向指定位置 再進行出錯處理 軟體陷阱是指用來將捕獲的亂飛程序引向復位入口地址 H的指令 通常在EPROM中非程序區填入以下指令作為軟體陷阱

NOP

NOP

LJMP H

其機器碼為

陷阱的安排

通常在程序中未使用的EPROM空間填 最後一條應填入 當亂飛程序落到此區 即可自動入軌 在用戶程序區各模塊之間的空餘單元也可填入陷阱指令 當使用的中斷因干擾而開放時 在對應的中斷服務程序中設置軟體陷阱 能及時捕獲錯誤的中斷 如某應用系統雖未用到外部中斷 外部中斷 的中斷服務程序可為如下形式

NOP

NOP

RETI

返回指令可用 RETI 也可用 LJMP H 如果故障診斷程序與系統自恢復程序的設計可靠 完善 用 LJMP H 作返回指令可直接進入故障診斷程序 盡早地處理故障並恢復程序的運行

考慮到程序存貯器的容量 軟體陷阱一般 K空間有 個就可以進行有效攔截

軟體 看門狗 技術

若失控的程序進入 死循環 通常採用 看門狗 技術使程序脫離 死循環 通過不斷檢測程序循環運行時間 若發現程序循環時間超過最大循環運行時間 則認為系統陷入 死循環 需進行出錯處理

看門狗 技術可由硬體實現 也可由軟體實現 在工業應用中 嚴重的干擾有時會破壞中斷方式控制字 關閉中斷 則系統無法定時 喂狗 硬體看門狗電路失效 而軟體看門狗可有效地解決這類問題

筆者在實際應用中 採用環形中斷監視系統 用定時器T 監視定時器T 用定時器T 監視主程序 主程序監視定時器T 採用這種環形結構的軟體 看門狗 具有良好的抗干擾性能 大大提高了系統可靠性 對於需經常使用T 定時器進行串口通訊的測控系統 則定時器T 不能進行中斷 可改由串口中斷進行監控(如果用的是MCS 系列單片機 也可用T 代替T 進行監視) 這種軟體 看門狗 監視原理是 在主程序 T 中斷服務程序 T 中斷服務程序中各設一運行觀測變數 假設為MWatch T Watch T Watch 主程序每循環一次 MWatch加1 同樣T T 中斷服務程序執行一次 T Watch T Watch加1 在T 中斷服務程序中通過檢測T Watch的變化情況判定T 運行是否正常 在T 中斷服務程序中檢測MWatch的變化情況判定主程序是否正常運行 在主程序中通過檢測T Watch的變化情況判別T 是否正常工作 若檢測到某觀測變數變化不正常 比如應當加 而未加 則轉到出錯處理程序作排除故障處理 當然 對主程序最大循環周期 定時器T 和T 定時周期應予以全盤合理考慮 限於篇幅不贅述

系統故障處理 自恢復程序的設計

單片機系統因干擾復位或掉電後復位均屬非正常復位 應進行故障診斷並能自動恢復非正常復位前的狀態

非正常復位的識別

程序的執行總是從 H開始 導致程序從 H開始執行有四種可能 一 系統開機上電復位 二 軟體故障復位 三 看門狗超時未喂狗硬體復位 四 任務正在執行中掉電後來電復位 四種情況中除第一種情況外均屬非正常復位 需加以識別

硬體復位與軟體復位的識別

此處硬體復位指開機復位與看門狗復位 硬體復位對寄存器有影響 如復位後PC= H SP= H PSW= H等 而軟體復位則對SP SPW無影響 故對於微機測控系統 當程序正常運行時 將SP設置地址大於 H 或者將PSW的第 位用戶標志位在系統正常運行時設為 那麼系統復位時只需檢測PSW 標志位或SP值便可判此是否硬體復位 圖 是採用PSW 作上電標志位判別硬 軟體復位的程序流程圖

圖 硬 軟體復位識別流程圖

此外 由於硬體復位時片內RAM狀態是隨機的 而軟體復位片內RAM則可保持復位前狀態 因此可選取片內某一個或兩個單元作為上電標志 設 H用來做上電標志 上電標志字為 H 若系統復位後 H單元內容不等於 H 則認為是硬體復位 否則認為是軟體復位 轉向出錯處理 若用兩個單元作上電標志 則這種判別方法的可靠性更高

開機復位與看門狗故障復位的識別

開機復位與看門狗故障復位因同屬硬體復位 所以要想予以正確識別 一般要藉助非易失性RAM或者EEROM 當系統正常運行時 設置一可掉電保護的觀測單元 當系統正常運行時 在定時喂狗的中斷服務程序中使該觀測單元保持正常值(設為 AAH) 而在主程中將該單元清零 因觀測單元掉電可保護 則開機時通過檢測該單元是否為正常值可判斷是否看門狗復位

正常開機復位與非正常開機復位的識別

識別測控系統中因意外情況如系統掉電等情況引起的開機復位與正常開機復位 對於過程式控制制系統尤為重要 如某以時間為控制標準的測控系統 完成一次測控任務需 小時 在已執行測控 分鍾的情況下 系統電壓異常引起復位 此時若系統復位後又從頭開始進行測控則會造成不必要的時間消耗 因此可通過一監測單元對當前系統的運行狀態 系統時間予以監控 將控制過程分解為若干步或若干時間段 每執行完一步或每運行一個時間段則對監測單元置為關機允許值 不同的任務或任務的不同階段有不同的值 若系統正在進行測控任務或正在執某時間段 則將監測單元置為非正常關機值 那麼系統復位後可據此單元判系統原來的運行狀態 並跳到出錯處理程序中恢復系統原運行狀態

非正常復位後系統自恢復運行的程序設計

對順序要求嚴格的一些過程式控制制系統 系統非正常復位否 一般都要求從失控的那一個模塊或任務恢復運行 所以測控系統要作好重要數據單元 參數的備份 如系統運行狀態 系統的進程值 當前輸入 輸出的值 當前時鍾值 觀測單元值等 這些數據既要定時備份 同時若有修改也應立即予以備份

當在已判別出系統非正常復位的情況下 先要恢復一些必要的系統數據 如顯示模塊的初始化 片外擴展晶元的初始化等 其次再對測控系統的系統狀態 運行參數等予以恢復 包括顯示界面等的恢復 之後再把復位前的任務 參數 運行時間等恢復 再進入系統運行狀態

應當說明的是 真實地恢復系統的運行狀態需 要極為細致地對系統的重要數據予以備份 並加以數據可靠性檢查 以保證恢復的數據的可靠性

其次 對多任務 多進程測控系統 數據的恢復需考慮恢復的次序問題 筆者實際應用的數據恢復過程流程圖如圖 所示

圖 系統自恢復程序流程圖

圖中恢復系統基本數據是指取出備份的數據覆蓋當前的系統數據 系統基本初始化是指對晶元 顯示 輸入輸出方式等進行初始化 要注意輸入輸出的初始化不應造成誤動作 而復位前任務的初始化是指任務的執行狀態 運行時間等

結束語

lishixin/Article/program/qrs/201311/11074

⑤ 單片機中mtouch、CCP、ECCP、AUSART、EUSART、FS-USB、ECAN、BOR、PBOR、PLVD、SR-Latch是什麼意思求解

CCP:捕捉、比較、脈寬調制(PWM)。這個模塊可配置為工作在輸入捕捉、定時器比較或 PWM 輸出方式下
ECCP模塊實現為具有增強型 PWM 功能的標准 CCP 模塊。這些功能包括 2 或4 路輸出通道、用戶可選極性、死區控制和自動關閉與重啟。 PWM 的增強型模式,ECCP模塊的捕捉、 比較和單輸出PWM功能與標准 CCP模塊的相同。
AUSART,可定址的通用同步非同步串列口。EUSART,增強型的通用同步非同步串列口。增強型的增加了一些性能,如:波特率自動檢測和校準,更寬的波特率設置范圍,以及一些適應LIN匯流排系統的性能。具體請看數據手冊
BOR(欠壓復位)模塊是基於內部參考電壓電路的。BOR 模塊的主要用途是在發生欠壓條件時
產生器件復位。欠壓條件通常由 AC 電源上的干擾信號(即由於不良的電源傳輸線路造成的 AC
周期波形丟失)或接入大負載時過電流造成電壓下降產生的。
POR:上電復位
PBOR:可編程的掉電鎖定復位。
PLVD :可編程低壓檢測模塊執行中斷驅動的電源電壓檢測功能。電壓檢測監視內部電源電壓。
ECAN 增強型控制器區域網模塊是一個串列介面,用於同其他 CAN 模塊或單片機器件進行通信。

⑥ 51單片機關於密碼鎖的畢業設計,論文

程序設計內容

(1). 密碼的設定,在此程序中密碼是固定在程序存儲器ROM中,假設預設的密碼為「12345」共5位密碼。

(2). 密碼的輸入問題:由於採用兩個按鍵來完成密碼的輸入,那麼其中一個按鍵為功能鍵,另一個按鍵為數字鍵。在輸入過程中,首先輸入密碼的長度,接著根據密碼的長度輸入密碼的位數,直到所有長度的密碼都已經輸入完畢;或者輸入確認功能鍵之後,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態並給出相應的處理過程。

(3).按鍵禁止功能:初始化時,是允許按鍵輸入密碼,當有按鍵按下並開始進入按鍵識別狀態時,按鍵禁止功能被激活,但啟動的狀態在3次密碼輸入不正確的情況下發生的。

C語言源程序

#includeunsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                              

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedcharpslen=9;unsignedchartemplen;

unsignedchardigit;unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

voidmain(void)

{ 

unsignedchari,j; 

P2=dispcode[digitcount]; 

TMOD=0x01; 

TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

TR0=1; 

ET0=1; 

EA=1; 

while(1)  

 {     

if(cmpflag==0)       

{         

if(P3_6==0)//functionkey          

 {             

for(i=10;i>0;i--)             

for(j=248;j>0;j--);     

        if(P3_6==0)               

{               

  if(hibitflag==0)      

             {    

                 funcount++; 

                    if(funcount==pslen+2)

                       { 

                        funcount=0;

                         cmpflag=1;

                        }

                      P1=dispcode[funcount];

                   }

                   else

                     {

                        second3=0;

                     } 

                while(P3_6==0);

               }

           }

         if(P3_7==0)//digitkey

           {

             for(i=10;i>0;i--)

             for(j=248;j>0;j--);

             if(P3_7==0)

               {

                 if(hibitflag==0)

                   {

                     digitcount++; 

                 if(digitcount==10)

                       {

                         digitcount=0;

                       }

                     P2=dispcode[digitcount];

                     if(funcount==1)

                       {

                         pslen=digitcount;                         

templen=pslen;

                       }

                       elseif(funcount>1)

                         { 

                          psbuf[funcount-2]=digitcount;

                         }

                   }

                   else

                     {

                       second3=0;

                     }

                 while(P3_7==0);

               }

           }

       } 

      else

         {

           cmpflag=0;

           for(i=0;i

             { 

              if(ps[i]!=psbuf[i])

                 {

                   hibitflag=1;

                   i=pslen;

                   errorflag=1;

                   rightflag=0;

                   cmpflag=0;

                   second3=0;

                   gotoa; 

                }

             }  

         cc=0; 

          errorflag=0; 

          rightflag=1;

           hibitflag=0;

a:   cmpflag=0;

         }

}

}

voidt0(void)

interrupt1using0{ TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

if((errorflag==1)&&(rightflag==0)) 

{

     bb++;

     if(bb==800)

       {

         bb=0;

         alarmflag=~alarmflag;

       }

     if(alarmflag==1)

       {

         P0_0=~P0_0;

       }

     aa++;

     if(aa==800)

       {

         aa=0;

         P0_1=~P0_1;

       }

     second3++;

     if(second3==6400)

       {

         second3=0;

         hibitflag=0;

         errorflag=0;

         rightflag=0;

         cmpflag=0;

         P0_1=1; 

        alarmflag=0;

         bb=0; 

        aa=0; 

      }

   }

 if((errorflag==0)&&(rightflag==1))

   {

     P0_1=0;

     cc++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc<1000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif(cc<2000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibitflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_1=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=1;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okflag==1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka++;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oka==2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okb==3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;}

}

閱讀全文

與鎖步雙冗餘單片機相關的資料

熱點內容
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:496
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:882
盈通伺服器ip地址 瀏覽:789
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:813
新氧app都在哪個城市 瀏覽:731
十二大加密貨幣圖片 瀏覽:315
資料庫日誌自動壓縮 瀏覽:929
手機表格文檔用哪個app 瀏覽:77
找人開發app的公司怎麼樣 瀏覽:651
android藍牙發送數據 瀏覽:428
範文瀾中國通史pdf 瀏覽:755
php常用的設計模式 瀏覽:889
安卓手機怎麼一個一個的截圖 瀏覽:980
javajsondate 瀏覽:356
matlab圖像處理演算法 瀏覽:670
安卓如何禁止手機自動降頻 瀏覽:697