單片機

單片機

單片機(Microcontrollers)是一種積體電路晶片,是採用超大規模積體電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、唯讀存儲器ROM、多種I/O口和中斷系統定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調製電路、模擬多路轉換器A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛套用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。

基本介紹

  • 中文名:單片機
  • 外文名:Microcontrollers
  • 類別電路晶片
  • 種類:3種
簡介,套用分類,通用型,匯流排型,控制型,發展歷史,主要階段,早期發展,硬體特性,基本結構,運算器,控制器,主要暫存器,套用範圍,智慧型儀器,工業控制,家用電器,網路和通信,設備領域,模組化系統,汽車電子,學習方法,基礎理論,實驗實踐,硬體設計,抗干擾設計,抗干擾,抗干擾技術,單片機的套用,基礎知識,匯流排,地址指令,功能,執行過程,堆疊,開發過程,單片指令,傳送操作,算術操作,邏輯操作,程式轉移,布爾變數操作,單片機晶片,三星單片機,SST 單片機,51單片機的結構與功能,攻擊技術,加密方法,故障的排除,

簡介

單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶片,而是把一個計算機系統集成到一個晶片上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶片就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、套用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機的使用領域已十分廣泛,如智慧型儀表、實時工控、通訊設備、導航系統、家用電器等。各種產品一旦用上了單片機,就能起到使產品升級換代的功效,常在產品名稱前冠以形容詞——“智慧型型”,如智慧型型洗衣機等。

套用分類

單片機(Microcontrollers)作為計算機發展的一個重要分支領域,根據發展情況,從不同角度,單片機大致可以分為通用型/專用型、匯流排型/非匯流排型及工控型/家電型。

通用型

這是按單片機(Microcontrollers)適用範圍來區分的。例如,80C51式通用型單片機,它不是為某種專門用途設計的;專用型單片機是針對一類產品甚至某一個產品設計生產的,例如為了滿足電子體溫計的要求,在片內集成ADC接口等功能的溫度測量控制電路

匯流排型

這是按單片機(Microcontrollers)是否提供並行匯流排來區分的。匯流排型單片機普遍設定有並行地址匯流排、 數據匯流排、控制匯流排,這些引腳用以擴展並行外圍器件都可通過串列口與單片機連線,另外,許多單片機已把所需要的外圍器件及外設接口集成一片內,因此在許多情況下可以不要並行擴展匯流排,大大減省封裝成本和晶片體積,這類單片機稱為非匯流排型單片機。
單片機單片機

控制型

這是按照單片機(Microcontrollers)大致套用的領域進行區分的。一般而言,工控型定址範圍大,運算能力強;用於家電的單片機多為專用型,通常是小封裝、低價格,外圍器件和外設接口集成度高。 顯然,上述分類並不是惟一的和嚴格的。例如,80C51類單片機既是通用型又是匯流排型,還可以作工控用。

發展歷史

單片機(Microcontrollers)誕生於1971年,經歷了SCM、MCU、SoC三大階段,早期的SCM單片機都是8位或4位的。其中最成功的是INTEL的8051,此後在8051上發展出了MCS51系列MCU系統。基於這一系統的單片機系統直到現在還在廣泛使用。隨著工業控制領域要求的提高,開始出現了16位單片機,但因為性價比不理想並未得到很廣泛的套用。90年代後隨著消費電子產品大發展,單片機技術得到了巨大提高。隨著INTEL i960系列特別是後來的ARM系列的廣泛套用,32位單片機迅速取代16位單片機的高端地位,並且進入主流市場。
而傳統的8位單片機的性能也得到了飛速提高,處理能力比起80年代提高了數百倍。高端的32位Soc單片機主頻已經超過300MHz,性能直追90年代中期的專用處理器,而普通的型號出廠價格跌落至1美元,最高端的型號也只有10美元。
當代單片機系統已經不再只在裸機環境下開發和使用,大量專用的嵌入式作業系統被廣泛套用在全系列的單片機上。而在作為掌上電腦和手機核心處理的高端單片機甚至可以直接使用專用的Windows和Linux作業系統

主要階段

早期階段
SCM單片微型計算機(Microcontrollers)階段,主要是尋求最佳的單片形態嵌入式系統的最佳體系結構。“創新模式”獲得成功,奠定了SCM與通用計算機完全不同的發展道路。在開創嵌入式系統獨立發展道路上,Intel公司功不可沒。
中期發展
Micro Controller UnitMicro Controller Unit
MCU微控制器(Micro Controller Unit)階段,主要的技術發展方向是:不斷擴展滿足嵌入式套用時,對象系統要求的各種外圍電路與接口電路,突顯其對象的智慧型化控制能力。它所涉及的領域都與對象系統相關,因此,發展MCU的重任不可避免地落在電氣、電子技術廠家。從這一角度來看,Intel逐漸淡出MCU的發展也有其客觀因素。在發展MCU方面,最著名的廠家當數Philips公司。
Philips公司以其在嵌入式套用方面的巨大優勢,將MCS-51從單片微型計算機迅速發展到微控制器。因此,當我們回顧嵌入式系統發展道路時,不要忘記Intel和Philips的歷史功績。
當前趨勢
SoC嵌入式系統(System on Chip)式的獨立發展之路,向MCU階段發展的重要因素,就是尋求套用系統在晶片上的最大化解決,因此,專用單片機的發展自然形成了SoC化趨勢。隨著微電子技術、IC設計、EDA工具的發展,基於SoC的單片機套用系統設計會有較大的發展。因此,對單片機的理解可以從單片微型計算機、單片微控制器延伸到單片套用系統。

早期發展

1971年intel公司研製出世界上第一個4位的微處理器;Intel公司的霍夫研製成功世界上第一塊4位微處理器晶片Intel 4004,標誌著第一代微處理器問世,微處理器和微機時代從此開始。因發明微處理器,霍夫被英國《經濟學家》雜誌列為“二戰以來最有影響力的7位科學家”之一。
1971年11月,Intel推出MCS-4微型計算機系統(包括4001 ROM晶片、4002 RAM晶片、4003移位暫存器晶片和4004微處理器)其中4004(下圖)包含2300個電晶體,尺寸規格為3mm×4mm,計算性能遠遠超過當年的ENIAC,最初售價為200美元。
1972年4月,霍夫等人開發出第一個8位微處理器Intel 8008。由於8008採用的是P溝道MOS微處理器,因此仍屬第一代微處理器。
1973年intel公司研製出8位的微處理器8080;1973年8月,霍夫等人研製出8位微處理器Intel 8080,以N溝道MOS電路取代了P溝道,第二代微處理器就此誕生。
主頻2MHz的8080晶片運算速度比8008快10倍,可存取64KB存儲器,使用了基於6微米技術的6000個電晶體,處理速度為0.64MIPS(Million Instructions Per Second )。
1975年4月,MITS發布第一個通用型Altair 8800,售價375美元,帶有1KB存儲器。這是世界上第一台微型計算機。
1976年intel公司研製出MCS-48系列8位的單片機,這也是單片機的問世。
Zilog公司於1976年開發的Z80微處理器,廣泛用於微型計算機和工業自動控制設備。當時,Zilog、Motorola和Intel在微處理器領域三足鼎立。
20世紀80年代初,Intel公司在MCS-48系列單片機的基礎上,推出了MCS-51系列8位高檔單片機。MCS-51系列單片機無論是片內RAM容量,I/O口功能,系統擴展方面都有了很大的提高。

硬體特性

1、主流單片機包括CPU、4KB容量的RAM、128 KB容量的ROM、 2個16位定時/計數器、4個8位並行口、全雙工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。
晶片晶片
2、系統結構簡單,使用方便,實現模組化;
3、單片機可靠性高,可工作到10^6 ~10^7小時無故障;
4、處理功能強,速度快。
5、低電壓,低功耗,便於生產攜帶型產品
6、控制功能強
7、環境適應能力強。

基本結構

運算器

運算器由運算部件——算術邏輯單元(Arithmetic & Logical Unit,簡稱ALU)、累加器和暫存器等幾部分組成。ALU的作用是把傳來的數據進行算術或邏輯運算,輸入來源為兩個8位數據,分別來自累加器和數據暫存器。ALU能完成對這兩個數據進行加、減、與、或、比較大小等操作,最後將結果存入累加器。例如,兩個數6和7相加,在相加之前,運算元6放在累加器中,7放在數據暫存器中,當執行加法指令時,ALU即把兩個數相加並把結果13存入累加器,取代累加器原來的內容6。
運算器有兩個功能:
(1) 執行各種算術運算。
(2) 執行各種邏輯運算,並進行邏輯測試,如零值測試或兩個值的比較。
運算器所執行全部操作都是由控制器發出的控制信號來指揮的,並且,一個算術操作產生一個運算結果,一個邏輯操作產生一個判決。

控制器

控制器由程式計數器、指令暫存器、指令解碼器、時序發生器和操作控制器等組成,是發布命令的“決策機構”,即協調和指揮整個微機系統的操作。其主要功能有:
(1) 從記憶體中取出一條指令,並指出下一條指令在記憶體中的位置。
(2) 對指令進行解碼和測試,並產生相應的操作控制信號,以便於執行規定的動作。
(3) 指揮並控制CPU、記憶體和輸入輸出設備之間數據流動的方向。
微處理器內通過內部匯流排把ALU、計數器、暫存器和控制部分互聯,並通過外部匯流排與外部的存儲器、輸入輸出接口電路聯接。外部匯流排又稱為系統匯流排,分為數據匯流排DB、地址匯流排AB和控制匯流排CB。通過輸入輸出接口電路,實現與各種外圍設備連線。

主要暫存器

(1)累加器A
圖1-2 單片機組成框圖
累加器A是微處理器中使用最頻繁的暫存器。在算術和邏輯運算時它有雙功能:運算前,用於保存一個運算元;運算後,用於保存所得的和、差或邏輯運算結果。
(2)數據暫存器DR
數據暫存器通過數據匯流排向存儲器和輸入/輸出設備送(寫)或取(讀)數據的暫存單元。它可以保存一條正在解碼的指令,也可以保存正在送往存儲器中存儲的一個數據位元組等等。
(3)指令暫存器IR和指令解碼器ID
指令包括操作碼和運算元。
指令暫存器是用來保存當前正在執行的一條指令。當執行一條指令時,先把它從記憶體中取到數據暫存器中,然後再傳送到指令暫存器。當系統執行給定的指令時,必須對操作碼進行解碼,以確定所要求的操作,指令解碼器就是負責這項工作的。其中,指令暫存器中操作碼欄位的輸出就是指令解碼器的輸入。
(4)程式計數器PC
PC用於確定下一條指令的地址,以保證程式能夠連續地執行下去,因此通常又被稱為指令地址計數器。在程式開始執行前必須將程式的第一條指令的記憶體單元地址(即程式的首地址)送入PC,使它總是指向下一條要執行指令的地址。
(5)地址暫存器AR
地址暫存器用於保存當前CPU所要訪問的記憶體單元或I/O設備的地址。由於記憶體與CPU之間存在著速度上的差異,所以必須使用地址暫存器來保持地址信息,直到記憶體讀/寫操作完成為止。
顯然,當CPU向存儲器存數據、CPU從記憶體取數據和CPU從記憶體讀出指令時,都要用到地址暫存器和數據暫存器。同樣,如果把外圍設備的地址作為記憶體地址單元來看的話,那么當CPU和外圍設備交換信息時,也需要用到地址暫存器和數據暫存器。

套用範圍

單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。飛彈的導航裝置,飛機上各種儀表的控制,計算機的網路通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智慧型IC卡,民用豪華轎車的安全保障系統,錄像機攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智慧型儀表、醫療器械以及各種智慧型機械了。因此,單片機的學習、開發與套用將造就一批計算機套用與智慧型化控制的科學家、工程師。
電路板電路板
單片機廣泛套用於儀器儀表、家用電器、醫用設備、航空航天、專用設備的智慧型化管理及過程控制等領域,大致可分如下幾個範疇:

智慧型儀器

單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優點,廣泛套用於儀器儀表中,結合不同類型的感測器,可實現諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。採用單片機控制使得儀器儀表數位化、智慧型化、微型化,且功能比起採用電子或數字電路更加強大。
例如精密的測量設備(電壓表、功率計示波器,各種分析儀)。

工業控制

單片機具有體積小、控制功能強、功耗低、環境適應能力強、擴展靈活和使用方便等優點,用單片機可以構成形式多樣的控制系統、數據採集系統、通信系統、信號檢測系統、無線感知系統、測控系統、機器人等套用控制系統。例如工廠流水線的智慧型化管理,電梯智慧型化控制、各種報警系統,與計算機聯網構成二級控制系統等。

家用電器

家用電器廣泛採用了單片機控制,從電飯煲、洗衣機、電冰櫃、空調機、彩電、其他音響視頻器材、再到電子秤量設備和白色家電等。

網路和通信

現代的單片機普遍具備通信接口,可以很方便地與計算機進行數據通信,為在計算機網路和通信設備間的套用提供了極好的物質條件,通信設備基本上都實現了單片機智慧型控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統、列車無線通信、再到日常工作中隨處可見的行動電話,集群移動通信,無線電對講機等。

設備領域

單片機在醫用設備中的用途亦相當廣泛,例如醫用呼吸機,各種分析儀,監護儀,超聲診斷設備及病床呼叫系統等等。

模組化系統

某些專用單片機設計用於實現特定功能,從而在各種電路中進行模組化套用,而不要求使用人員了解其內部結構。如音樂集成單片機,看似簡單的功能,微縮在純電子晶片中(有別於磁帶機的原理),就需要複雜的類似於計算機的原理。如:音樂信號以數字的形式存於存儲器中(類似於ROM),由微控制器讀出,轉化為模擬音樂電信號(類似於音效卡)。
在大型電路中,這種模組化套用極大地縮小了體積,簡化了電路,降低了損壞、錯誤率,也方便於更換。

汽車電子

單片機在汽車電子中的套用非常廣泛,例如汽車中的發動機控制器,基於CAN匯流排的汽車發動機智慧型電子控制器、GPS導航系統、abs防抱死系統、制動系統、胎壓檢測等。
此外,單片機在工商、金融、科研、教育、電力、通信、物流和國防航空航天等領域都有著十分廣泛的用途。

學習方法

基礎理論

基礎理論知識包括模擬電路數字電路C語言知識。模擬電路和數字電路屬於抽象學科,要把它學好還得費點精神。在你學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。否則,你的單片機學習之路不僅會很艱難和漫長,還可能半途而廢。筆者始終認為,紮實的電子技術基礎是學好單片機的關鍵,直接影響單片機學習入門的快慢。有些同學覺得單片機很難,越學越複雜,最後學不下去了。有的同學看書時似乎明白了,可是動起手來卻一塌糊塗,究其原因就是電子技術基礎沒有打好,首先被表面知識給困惑了。
單片機屬於數字電路,其概念、術語、硬體結構和原理都源自數字電路,如果數字電路基礎紮實,對複雜的單片機硬體結構和原理就能容易理解,就能輕鬆地邁開學習的第一步,自信心也會樹立起來。相反,基礎不好,這個看不懂那個也弄不明白,越學問題越多,越學越沒有信心。如果你覺得單片機很難,那就應該先放下單片機教材,去重溫數字電路,搞清楚觸發器、暫存器、門電路、COMS電路、時序邏輯和時序圖、進制轉換等理論知識。理解了這些知識之後再去看看單片機的結構和原理,我想你會大徹大悟,信心倍增。
模擬電路是電子技術最基礎的學科,它讓你知道什麼是電阻、電容、電感、二極體三極體場效應管、放大器等等以及它們的工作原理和在電路中的作用,這是學習電子技術必須掌握的基礎知識。一般是先學習模擬電路再去學習數字電路。紮實的模擬電路基礎不僅讓你容易看懂別人設計的電路,而且讓你的設計的電路更可靠,提高產品質量。
單片機的學習離不開編程,在所有的程式設計中C語言運用的最為廣泛。C語言知識並不難,沒有任何編程基礎的人都可以學,在我看來,國中生、高中生、中專生、大學生都能學會。當然,數學基礎好、邏輯思維好的人學起來相對輕鬆一些。C語言需要掌握的知識就那么3個條件判斷語句、3個循環語句、3個跳轉語句和1個開關語句。別小看這10個語句,用他們組合形成的邏輯要多複雜有多複雜。學習時要一條語句一條語句的學,學一條活用一條,全部學過用過這些關鍵語句後,相信你的C基礎建立了。
當基礎打好以後,你會感覺到單片機不再難學了,而且越學越起勁。當單片機乖乖的依照你的邏輯思維和算法去執行指令,實現預期控制效果的時候,成就感會讓你信心十足、夜以續日、廢寢忘食的投入到單片機的世界裡。可以這么說,紮實的電子技術基礎和C語言基礎能增強學習單片機信心,較快掌握單片機技術。

實驗實踐

這是真正學習單片機的過程,既讓人興奮又讓人疲憊,既讓人無奈又讓人不服,既讓人孤獨又讓人充實,既讓人氣憤又讓人欣慰,既有失落感又有成就感。其中的酸甜苦辣只有學過的人深有體會。思想上要有刻苦學習的決心,硬體上要有一套完整的學習開發工具,軟體上要注重理論和實踐相結合。
1.有刻苦學習的決心
首先,明確學習目的。先認真回答兩個問題:我學單片機來做什麼?需要多長時間把它學會?這是你學單片機的動力。沒有動力,我想你堅持不了多久。其次,端正學習心態。單片機學習過程是枯燥乏味、孤獨寂寞的過程。要知道,學習知識沒有捷徑,只有循序漸進,腳踏實地,一步一個腳印,才能學到真功夫。再次,要多動腦勤動手。單片機的學習具有很強的實踐性,是一門很注重實際動手操作的技術學科。不動手實踐你是學不會單片機的。最後,虛心交流。在單片機學習過程中每個人都會遇到無數不能解決的問題,需要你向有經驗的過來人虛心求教,否則,一味的自己埋頭摸索會走許多彎路,浪費很多時間。
2.有一套完整的學習開發工具
學習單片機是需要成本的。必須有一台電腦、一塊單片機開發板(如果開發板不能直接下載程式代碼的話還得需要一個編程器)、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程式,並將程式代碼下載到單片機上;開發板用來運行單片機程式,驗證實際效果;視頻教程就是手把手教你單片機開發環境的使用、單片機編程和調試。對於單片機初學者來說,視頻教程必須看,要不然,哪怕把教材看了幾遍,還是不知道如何下手,尤其是院校里的單片機教材,學了之後,面對真正的單片機時可能還是束手無策;單片機教材和C語言教材是理論學習資料,備忘備查。不要為了節約成本不用開發板而光用Proteus軟體仿真調試,這和紙上談兵沒什麼區別。
3. 要注重理論和實踐相結合
單片機C語言編程理論知識並不深奧,光看書不動手也能明白。但在實際編程的時候就沒那么簡單了。一個程式的形成不僅需要有C語言知識,更多需要融入你個人的編程思路和算法。編程思路和算法決定一個程式的優劣,是單片機編程的大問題,只有在實際動手編寫的時候才會有深切的感悟。一個程式能否按照你的意願正常運行就要看你的思路和算法是否正確、合理。如果程式不正常則要反覆調試(檢查、修改思路和算法),直到成功。這個過程耗時、費腦、疲精神,意志不堅強者往往被絆倒在這裡半途而廢。
學習編寫程式應該按照以下過程學習,效果會更好。看到例程題目先試著構思自己的編程思路,然後再看教材或視頻教程里的代碼,研究人家的編程思路,注意與自己思路的差異;接下來就照搬人家的思路親自動手編寫這個程式,領會其中每一條語句的作用;對有疑問的地方試著按照自己的思路修改程式,比較程式運行效果,領會其中的奧妙。每一個例程都堅持按照這個過程學習,你很快會找到編程的感覺,取其精華去其糟粕,久而久之會形成你獨特的編程思想。當然,剛開始,看別人的程式原始碼就像看天書一樣,只要硬著頭皮看,看到不懂的關鍵字和語句就翻書查閱、對照。只要能堅持下來,學習收穫會事半功倍。在實踐過程中不僅要學會別人的例程,還要在別人的程式上改進和拓展,讓程式產生更強大的功能。同時,還要懂得通過查閱晶片數據手冊(DATASHEET)里有關晶片命令和數據的讀寫時序來核對別人例程的可靠性,如果你覺得例程不可靠就把它修改過來,成為是你自己的程式。不僅如此,自己應該經常找些項目來做,以鞏固所學的知識和積累更多的經驗。

硬體設計

當編寫自己的程式信手拈來、閱讀別人的程式能夠發現問題的時候,說明你的單片機編程水平相當不錯了。接下來就應該研究硬體了。硬體設計包括電路原理設計和PCB板設計。學習做硬體要比學習做軟體麻煩,成本更高,周期更長。但是,學習單片機的最終目的是做產品開發----軟體和硬體相結合形成完整的控制系統。所以,做硬體也是學習單片機技術的一個必學內容。
電路原理設計涉及到各種晶片的套用,而這些晶片外圍電路的設計、典型套用電路和與單片機的連線等在晶片數據手冊(DATASHEET)都能找到答案,前提是要看得懂全英文的數據手冊。否則,照搬別人的設計永遠落在別人的後面,你做的產品就沒有創意。電子技術領域的第一手資料(DATASHEET)都是英文,從第一手資料里你所獲得的知識可能是在教科書、網路文檔和課外讀物等所沒有的知識。雖然有些資料也都是在DATASHEET的基礎上撰寫的,但內容不全面,甚至存在翻譯上的遺漏和錯誤。當然,閱讀DATASHEET需要具備一定的英文閱讀能力,這也是阻礙單片機學習者晉級的絆腳石。良好的英文閱讀能力能讓你在單片機技術知識的海洋里自由遨遊。
做PCB板就比較簡單了。只要懂得使用Protel軟體或 AltiumDesigner軟體就沒問題了。但要想做的板子布局美觀、布線合理還得費一番功夫了。
嫻熟的單片機C語言編程、會使用Protel軟體或 AltiumDesigner軟體設計PCB板和具備一定的英文閱讀能力,你就是一個遇強則強的單片機高手了。

抗干擾設計

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

抗干擾

在工程實踐中,軟體抗干擾研究的內容主要是:一、消除模擬輸入信號的噪聲(如數字濾波技術);二、程式運行混亂時使程式重入正軌的方法。本文針對後者提出了幾種有效的軟體抗干擾方法。
指令冗餘
CPU取指令過程是先取操作碼,再取運算元。當PC受干擾出現錯誤,程式便脫離正常軌道“亂飛”,當亂飛到某雙位元組指令,若取指令時刻落在運算元上,誤將運算元當做操作碼,程式將出錯。若“飛” 到了三位元組指令,出錯機率更大。
在關鍵地方人為插入一些單位元組指令,或將有效單位元組指令重寫稱為指令冗餘。通常是在雙位元組指令和三位元組指令後插入兩個位元組以上的NOP。這樣即使亂飛程式飛到運算元上,由於空操作指令NOP的存在,避免了後面的指令被當作運算元執行,程式自動納入正軌。
此外,對系統流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入兩條NOP,也可將亂飛程式納入正軌,確保這些重要指令的執行。
攔截技術
所謂攔截,是指將亂飛的程式引向指定位置,再進行出錯處理。通常用軟體陷阱來攔截亂飛的程式。因此先要合理設計陷阱,其次要將陷阱安排在適當的位置。
(1 )軟體陷阱的設計
當亂飛程式進入非程式區,冗餘指令便無法起作用。通過軟體陷阱,攔截亂飛程式,將其引向指定位置,再進行出錯處理。軟體陷阱是指用來將捕獲的亂飛程式引向復位入口地址0000H的指令。通常在EPROM中非程式區填入以下指令作為軟體陷阱
(2 ) 陷阱的安排
最後一條應填入020000,當亂飛程式落到此區,即可自動入軌。在用戶程式區各模組之間的空餘單元也可填入陷阱指令。當使用的中斷因干擾而開放時,在對應的中斷服務程式中設定軟體陷阱,能及時捕獲錯誤的中斷。如某套用系統雖未用到外部中斷1,外部中斷1的中斷服務程式可為如下形式:
NOPNOPRETI返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障診斷程式與系統自恢復程式的設計可靠、 完善,用“LJMP 0000H”作返回指令可直接進入故障診斷程式,儘早地處理故障並恢復程式的運行。
考慮到程式存貯器的容量,軟體陷阱一般1K空間有2-3個就可以進行有效攔截。
軟體“看門狗”技術
若失控的程式進入“死循環”,通常採用“看門狗”技術使程式脫離“死循環”。通過不斷檢測程式循環運行時間,若發現程式循環時間超過最大循環運行時間,則認為系統陷入“死循環”,需進行出錯處理。
看門狗”技術可由硬體實現,也可由軟體實現。在工業套用中,嚴重的干擾有時會破壞中斷方式控制字,關閉中斷。則系統無法定時“餵狗”,硬體看門狗電路失效。而軟體看門狗可有效地解決這類問題。
筆者在實際套用中,採用環形中斷監視系統。用定時器T0監視定時器T1,用定時器T1監視主程式,主程式監視定時器T0。採用這種環形結構的軟體“看門狗”具有良好的抗干擾性能,大大提高了系統可靠性。對於需經常使用T1定時器進行串口通訊的測控系統,則定時器T1不能進行中斷,可改由串口中斷進行監控(如果用的是MCS-52系列單片機,也可用T2代替T1進行監視)。這種軟體“看門狗”監視原理是:在主程式、T0中斷服務程式、T1中斷服務程式中各設一運行觀測變數,假設為MWatch、T0Watch 、T1Watch,主程式每循環一次,MWatch加1,同樣T0、T1中斷服務程式執行一次,T0Watch、 T1Watch加1。在T0中斷服務程式中通過檢測T1Watch的變化情況判定T1運行是否正常,在T1中斷服務程式中檢測MWatch的變化情況判定主程式是否正常運行,在主程式中通過檢測T0Watch的變化情況判別T0是否正常工作。若檢測到某觀測變數變化不正常,比如應當加1而未加1,則轉到出錯處理程式作排除故障處理。當然,對主程式最大循環周期、定時器T0和T1定時周期應予以全盤合理考慮。限於篇幅不贅述。

抗干擾技術

單片機系統因干擾復位或掉電後復位均屬非正常復位,應進行故障診斷並能自動恢復非正常復位前的狀態。
非正常復位的識別
程式的執行總是從0000H開始,導致程式從 0000H開始執行有四種可能:一、系統開機上電復位;二、軟體故障復位;三、看門狗逾時未餵狗硬體復位; 四、任務正在執行中掉電後來電復位。四種情況中除第一種情況外均屬非正常復位,需加以識別。
(1 )硬體復位與軟體復位的識別
此處硬體復位指開機復位與看門狗復位,硬體復位對暫存器有影響,如復位後PC=0000H, SP=07H,PSW=00H等。而軟體復位則對SP、SPW無影響。故對於微機測控系統,當程式正常運行時,將SP設定地址大於07H,或者將PSW的第5位用戶標誌位在系統正常運行時設為1。那么系統復位時只需檢測PSW.5標誌位或SP值便可判此是否硬體復位。
由於硬體復位時片內RAM狀態是隨機的,而軟體復位片內RAM則可保持復位前狀態,因此可選取片內某一個或兩個單元作為上電標誌。設40H用來做上電標誌,上電標誌字為78H,若系統復位後40H單元內容不等於78H,則認為是硬體復位,否則認為是軟體復位,轉向出錯處理。若用兩個單元作上電標誌,則這種判別方法的可靠性更高。
(2 )開機復位與看門狗故障復位的識別
開機復位與看門狗故障復位因同屬硬體復位, 所以要想予以正確識別,一般要藉助非易失性RAM或者EEROM。當系統正常運行時,設定一可掉電保護的觀測單元。當系統正常運行時,在定時餵狗中斷服務程式中使該觀測單元保持正常值(設為 AAH),而在主程中將該單元清零,因觀測單元掉電可保護,則開機時通過檢測該單元是否為正常值可判斷是否看門狗復位。
(3 )正常開機復位與非正常開機復位的識別
識別測控系統中因意外情況如系統掉電等情況引起的開機復位與正常開機復位,對於過程控制系統尤為重要。如某以時間為控制標準的測控系統,完成一次測控任務需1小時。在已執行測控50分鐘的情況下,系統電壓異常引起復位,此時若系統復位後又從頭開始進行測控則會造成不必要的時間消耗。因此可通過一監測單元對當前系統的運行狀態、系統時間予以監控,將控制過程分解為若干步或若干時間段,每執行完一步或每運行一個時間段則對監測單元置為關機允許值,不同的任務或任務的不同階段有不同的值,若系統正在進行測控任務或正在執某時間段,則將監測單元置為非正常關機值。那么系統復位後可據此單元判系統原來的運行狀態,並跳到出錯處理程式中恢復系統原運行狀態。
非正常復位後系統自恢復運行的程式設計
對順序要求嚴格的一些過程控制系統,系統非正常復位否,一般都要求從失控的那一個模組或任務恢復運行。所以測控系統要作好重要數據單元、參數的備份,如系統運行狀態、系統的進程值、當前輸入、輸出的值,當前時鐘值、觀測單元值等,這些數據既要定時備份,同時若有修改也應立即予以備份。
當在已判別出系統非正常復位的情況下,先要恢復一些必要的系統數據,如顯示模組的初始化、片外擴展晶片的初始化等。其次再對測控系統的系統狀態、運行參數等予以恢復,包括顯示界面等的恢復。之後再把復位前的任務、參數、運行時間等恢復, 再進入系統運行狀態。
應當說明的是,真實地恢復系統的運行狀態需 要極為細緻地對系統的重要數據予以備份,並加以數據可靠性檢查,以保證恢復的數據的可靠性。
其次,對多任務、多進程測控系統,數據的恢復需考慮恢復的次序問題。
系統基本初始化是指對晶片、顯示、輸入輸出方式等進行初始化,要注意輸入輸出的初始化不應造成誤動作。而復位前任務的初始化是指任務的執行狀態、運行時間等。
對於軟體抗干擾的一些其它常用方法如數字濾波、RAM數據保護與糾錯等,限於篇幅,本文未作討論。在工程實踐中通常都是幾種抗干擾方法並用,互相補充 完善,才能取得較好的抗干擾效果。從根本上來說,硬體抗干擾是主動的,而軟體是抗干擾是被動的。細緻周到地分析干擾源,硬體與軟體抗干擾相結合,完善系統監控程式,設計一穩定可靠的單片機系統是完全可行的。

單片機的套用

電子技術中單片機的套用
1、在家用電器領域的套用
現在在家用電器的更新、市場開拓等方面,單片機的套用越來越廣泛,比如電子玩具或者高級的電視遊戲機中,會套用單片機實現其控制功能;而洗衣機可以利用單片機識別衣服的種類與髒污程度,從而自動選擇洗滌強度與洗滌時間;在冰櫃冷櫃中採用單片機控制可以識別食物的種類與保鮮程度,實現冷藏溫度與冷藏時間的自動選擇;微波爐也可以通過單片機識別食物種類從而自動確定加熱溫度與加熱時間等等,這些家用電器在套用單片機技術後,無論是性能還是功能,與傳統技術相比均有長足的進步。
2、在醫用設備領域的套用
現代醫療條件越來越發達,人們對醫療滅菌消毒技術也越來越重視,但是一些偏遠地區的小醫院、小診所其消毒滅菌設備還十分簡陋,無法有效的控制消毒質量。隨著單片機技術的發展,其體積較小、功能強大、具有靈活的擴展性、套用方便的特點也越來越突出,因此在醫用呼吸機、分析儀與監護儀、超聲診斷設備、病床呼叫系統等設備中得到了廣泛的套用。
3、在工業控制領域的套用
其實最早的單片機正是從工業領域開始興起的,至今其在工業控制領域的套用仍然十分廣泛,利用單片機技術構成多種多樣的數據採集系統與智慧型控制系統,比如工廠流水線的智慧型化管理、智慧型化電梯、報警系統等等,均是通過單片機技術與計算機聯網構成二級控制系統。
4、在儀器儀表領域的套用
上文中也談到單片機具備集成度高、體積小、較強的控制功能與擴展的靈活性等特點,並且處理速度快,具有較高的可靠性,所以在智慧型儀器儀表領域其套用也十分廣泛。從某種程度而言,單片機帶動了傳統測量、控制儀器儀表技術的一項革命,通過單片機技術實現了儀器儀表技術的數位化、智慧型化、綜合化以及多功能化,與傳統的電子電路或者數字電路相比,其功能更強大,綜合性更突出。

基礎知識

本段僅針對硬體設計人員和軟體設計人員,為了便於對硬體的理解要有一定的彙編語言基礎。

匯流排

我們知道,一個電路總是由元器件通過電線連線而成的,在模擬電路中,連線並不成為一個問題,因為各器件間一般是串列關係,各器件之間的連線並不很多,但計算機電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各器件之間的工作必須相互協調,所以需要的連線就很多了,如果仍如同模擬電路一樣,在各微處理器和各器件間單獨連線,則線的數量將多得驚人,所以在微處理機中引入了匯流排的概念,各個器件共同享用連線,所有器件的8根數據線全部接到8根公用的線上,即相當於各個器件並聯起來,但僅這樣還不行,如果有兩個器件同時送出數據,一個為0,一個為1,那么,接收方接收到的究竟是什麼呢?這種情況是不允許的,所以要通過控制線進行控制,使器件分時工作,任何時候只能有一個器件傳送數據(可以有多個器件同時接收)。器件的數據線也就被稱為數據匯流排,器件所有的控制線被稱為控制匯流排。在單片機內部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配地址,才能使用,分配地址當然也是以電信號的形式給出的,由於存儲單元比較多,所以,用於地址分配的線也較多,這些線被稱為地址匯流排

地址指令

這三者的本質都是一樣的——數字,或者說都是一串‘0’和‘1’組成的序列。換言之,地址、指令也都是數據。指令:由單片機晶片的設計者規定的一種數字,它與我們常用的指令助記符有著嚴格的一一對應關係,不可以由單片機的開發者更改。地址:是尋找單片機內部、外部的存儲單元、輸入輸出口的依據,內部單元的地址值已由晶片設計者規定好,不可更改,外部的單元可以由單片機開發者自行決定,但有一些地址單元是一定要有的(詳見程式的執行過程)。數據:這是由微處理機處理的對象,在各種不同的套用電路中各不相同,一般而言,被處理的數據可能有這么幾種情況:
1.地址(如MOV DPTR,1000H),即地址1000H送入DPTR
2.方式字或控制字(如MOV TMOD,#3),3即是控制字。
3.常數(如MOV TH0,#10H)10H即定時常數。
4.實際輸出值(如P1口接彩燈,要燈全亮,則執行指令:MOV P1,#0FFH,要燈全暗,則執行指令:MOV P1,#00H)這裡0FFH和00H都是實際輸出值。又如用於LED的字形碼,也是實際輸出的值。
理解了地址、指令的本質,就不難理解程式運行過程中為什麼會跑飛,會把數據當成指令來執行了。

功能

初學時往往對P0口、P2口和P3口的第二功能用法迷惑不解,認為第二功能和原功能之間要有一個切換的過程,或者說要有一條指令,事實上,各連線埠的第二功能完全是自動的,不需要用指令來轉換。如P3.6、P3.7分別是WR、RD信號,當微處理機外接RAM或有外部I/O口時,它們被用作第二功能,不能作為通用I/O口使用,只要一微處理機一執行到MOVX指令,就會有相應的信號從P3.6或P3.7送出,不需要事先用指令說明。事實上‘不能作為通用I/O口使用’也並不是‘不能’而是(使用者)‘不會’將其作為通用I/O口使用。你完全可以在指令中按排一條SETB P3.7的指令,並且當單片機執行到這條指令時,也會使P3.7變為高電平,但使用者不會這么去做,因為這通常會導致系統的崩潰。

執行過程

單片機在通電復位後8051內的程式計數器(PC)中的值為‘0000’,所以程式總是從‘0000’單元開始執行,也就是說:在系統的ROM中一定要存在‘0000’這個單元,並且在‘0000’單元中存放的一定是一條指令。

堆疊

堆疊是一個區域,是用來存放數據的,這個區域本身沒有任何特殊之處,就是內部RAM的一部份,特殊的是它存放和取用數據的方式,即所謂的‘先進後出,後進先出’,並且堆疊有特殊的數據傳輸指令,即‘PUSH’和‘POP’,有一個特殊的專為其服務的單元,即堆疊指針SP,每當執一次PUSH指令時,SP就(在原來值的基礎上)自動加1,每當執行一次POP指令,SP就(在原來值的基礎上)自動減1。由於SP中的值可以用指令加以改變,所以只要在程式開始階段更改了SP的值,就可以把堆疊設定在規定的記憶體單元中,如在程式開始時,用一條MOV SP,#5FH指令,就是把堆疊設定在從記憶體單元60H開始的單元中。一般程式的開頭總有這么一條設定堆疊指針的指令,因為開機時,SP的初始值為07H,這樣就使堆疊從08H單元開始往後,而08H到1FH這個區域正是8031的第二、三、四工作暫存器區,經常要被使用,這會造成數據的混亂。不同作者編寫程式時,初始化堆疊指令也不完全相同,這是作者的習慣問題。當設定好堆疊區後,並不意味著該區域成為一種專用記憶體,它還是可以象普通記憶體區域一樣使用,只是一般情況下編程者不會把它當成普通記憶體用了。

開發過程

這裡所說的開發過程並不是一般書中所說的從任務分析開始,我們假設已設計並製作好硬體,下面就是編寫軟體的工作。在編寫軟體之前,首先要確定一些常數、地址,事實上這些常數、地址在設計階段已被直接或間接地確定下來了。如當某器件的連線設計好後,其地址也就被確定了,當器件的功能被確定下來後,其控制字也就被確定了。然後用文本編輯器(如EDIT、CCED等)編寫軟體,編寫好後,用編譯器對源程式檔案編譯,查錯,直到沒有語法錯誤,除了極簡單的程式外,一般套用仿真機對軟體進行調試,直到程式運行正確為止。運行正確後,就可以寫片(將程式固化在EPROM中)。在源程式被編譯後,生成了擴展名為HEX的目標檔案,一般編程器能夠識別這種格式的檔案,只要將此檔案調入即可寫片。在此,為使大家對整個過程有個認識,舉一例說明:
ORG 0000H
單片機試驗板單片機試驗板
LJMP START
ORG 040H
START:
MOV SP,#5FH ;設堆疊
LOOP:
NOP
LJMP LOOP ;循環
END ;結束

單片指令

傳送操作

助記符代碼 說明
MOV A,Rn E8~EF暫存器A
MOV A,direct E5 direct 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data立即數送A
MOV Rn,A F8~FF A送暫存器
MOV Rn,direct A8~AF direct 直接位元組送暫存器
MOV Rn,#data 78~7F data立即數送暫存器
MOV direct,A F5 direct A送直接位元組
MOV direct,Rn 88~8F direct 暫存器送直接位元組
MOV direct1,direct2 85 direct1 direct2 直接位元組送直接位元組
MOV direct,@Ro 86~87 間接RAM送直接位元組
MOV direct,#data 75 direct data立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,direct 76~77 direct 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程式存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程式存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH direct C0 direct 直接位元組進棧,SP加1
POP direct D0 direct 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和暫存器
XCH A,direct C5 direct 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4

算術操作

(A的二個半位元組交換)
ADD A,Rn 28~2F 暫存器加到A
ADD A,direct 25 direct 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data立即數加到A
ADD A,Rn 38~3F 暫存器和進位位加到A
ADD A,direct 35direct 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data立即數和進位位加到A
ADD A,Rn 98~9F A減去暫存器和進位位
ADD A,direct 95 direct A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去暫存器和進位位
SUBB A,direct 95 direct A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 暫存器加1
INC direct 05 direct 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 暫存器減1
DEC direct 15 direct 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整

邏輯操作

ANL A,Rn 58~5F 暫存器“與”到A
ANL A,direct 55 direct 直接位元組“與”到A
ANL A,@Ri 56~57 間接RAm“與”到A
ANL A,#data 54 data立即數“與”到A
ANL direct A 52 direct A“與”到直接位元組
ANL direct,#data 53 direct data立即數“與”到直接位元組
ORL A,Rn 48~4F 暫存器“或”到A
ORL A,direct 45 direct 直接位元組“或”到A
ORL A,@Ri 46~47 間接RAM“或”到A
ORL A,#data 44 data立即數“或”到A
ORL direct,A 42 direct A“或”到直接位元組
ORL direct,#data 43 direct data立即數“或”到直接位元組
XRL A,Rn 68~6F 暫存器“異或”到A
XRL A,direct 65 direct 直接位元組“異或”到A
XRL A,@Ri 66~67 間接RAM“異或”到A
XRL A,#data 64 data立即數“異或”到A
XRL direct A 62 direct A“異或”到直接位元組
XRL direct,#data 63 direct data立即數“異或”到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移

程式轉移

ACALL addr 11 *1 addr(a7~a0) 絕對子程式調用
LCALL addr 16 12 addr(15~8) 長子程式調用
addr(7~0)
RET 22子程式調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,direct,rel B5 direct rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel立即數與暫存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 暫存器減1,不為零則轉移
DJNZ direct,rel B5 direct rel 直接位元組減1,不為零則轉移
NOP 00 空操作

布爾變數操作

CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數“與”到進位
ANL C,/bit B0 直接位的反“與”到進位
ORL C,bit 72 bit 直接位“或”到進位
ORL C,/bit A0 bit 直接位的反“或”到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位

單片機晶片

STC公司的單片機主要是基於8051核心,是新一代增強型單片機,指令代碼完全兼容傳統8051,速度快8~12倍,帶ADC,4路PWM,雙串口,有全球唯一ID號,加密性好,抗干擾強.
PIC單片機
MICROCHIP公司的產品,其突出的特點是體積小,功耗低,精簡指令集,抗干擾性好,可靠性高,有較強的模擬接口,代碼保密性好,大部分晶片有其兼容的FLASH程式存儲器的晶片.
EMC單片機
台灣義隆公司的產品,有很大一部分與PIC 8位單片機兼容,且相兼容產品的資源相對比PIC的多,價格便宜,有很多系列可選,但抗干擾較差.
ATMEL單片機(51單片機):
ATMEl公司的8位單片機有AT89、AT90兩個系列,AT89系列是8位Flash單片機,與8051系列單片機相兼容,靜態時鐘模式;AT90系列單片機是增強RISC結構、全靜態工作方式、內載線上可程式Flash的單片機,也叫AVR單片機.
PHLIPIS 51LPC系列單片機(51單片機):
PHILIPS公司的單片機是基於80C51核心的單片機,嵌入了掉電檢測、模擬以及片內RC振盪器等功能,這使51LPC在高集成度、低成本、低功耗的套用設計中可以滿足多方面的性能要求.
HOLTEK單片機
台灣盛揚半導體的單片機,價格便宜,種類較多,但抗干擾較差,適用於消費類產品.
TI公司單片機(51單片機):
德州儀器提供了TMS370和MSP430兩大系列通用單片機.TMS370系列單片機是8位CMOS單片機,具有多種存儲模式、多種外圍接口模式,適用於複雜的實時控制場合;MSP430系列單片機是一種超低功耗、功能集成度較高的16位低功耗單片機,特別適用於要求功耗低的場合
松翰單片機(SONIX):
是台灣松翰公司的單片,大多為8位機,有一部分與PIC 8位單片機兼容,價格便宜,系統時鐘分頻可選項較多,有PMW ADC 內振 內部雜訊濾波。缺點RAM空間過小,抗干擾較好。
飛思卡爾單片機
飛思卡爾 8 位單片機系列主要包括 RS08 類、HCS08 類、HC08 類、HC08 汽車類、 HCS08 汽車類。
英飛凌單片機
英飛凌單片機的XC82x和XC83x單片機系列經過專門設計,可進一步在各種工業領域內降低系統成本,提高能效。
深聯華單片機(51單片機)
深聯華公司的單片機主要是基於8051核心,是新一代安全防逆向型單片機,指令代碼完全兼容傳統8051,速度快8~12倍,帶有62 K FLASH ROM,內置256位元組RAM和集成外置1024位元組RAM,白噪聲密碼-沒有規律可循,每顆晶片都有自己的密碼,同樣的密碼不可重用。

三星單片機

三星單片機有KS51和KS57系列4位單片機,KS86和KS88系列8位單片機,KS17系列16位單片機和KS32系列32位單片機,三星還為ARM公司生產ARM單片機,常見的S344b0等.三星單片機為OTP型ISP在片編程功能.

SST 單片機

美國SST公司推出的SST89系列單片機為標準的51系列單片機,包括SST89E/V52RD2, SST89E/V54RD2,SST89E/V58RD2,SST89E/V554RC,SST89E/V564RD等.它與8052系列單片機兼容.提供系統線上編程(ISP功能).內部flash擦寫次數1萬次以上,程式保存時間可達100年.
還有很多優秀的單片機生產企業這裡沒有收集,每個企業都有自己的特點,大家根據需要選擇單片機,在完全實現功能的前提下追求低價位,當然並不是這樣最好,實際中選擇單片機跟開發者的套用習慣和開發經驗是密不可分的.

51單片機的結構與功能

基本功能:
1.8位數據匯流排,16位地址匯流排的CPU;
2.具有布爾處理能力和位處理能力;
3.採用哈佛結構,程式存儲器與數據存儲器地址空間各自獨立,便於程式設計;
4.相同地址的64KB程式存儲器和64KB數據存儲器;
5.0-8KB片內程式存儲器(8031無,8051有4KB,8052有8KB,89C55有20KB);
6.128位元組片內數據存儲器(8051有256位元組);
7.32根雙向並可以按位定址的I/O線;
8.兩個16位定時/計數器(8052有3個);
9.一個全雙工的串列I/O接口;
10.多箇中斷源的中斷結構,具有兩個中斷優先權;
11.片內時鐘振盪器。
特點
1.以微處理器(CPU)為核心;
2.CPU與其他部件間通過三匯流排連線。
匯流排: 指能為多個部件服務的信息傳送線。

攻擊技術

攻擊單片機主要有四種技術,分別是:
(1)軟體攻擊
該技術通常使用處理器通信接口並利用協定、加密算法或這些算法中的安全漏洞來進行攻擊。軟體攻擊取得成功的一個典型事例是對早期ATMEL AT89C 系列單片機的攻擊。攻擊者利用了該系列單片機擦除操作時序設計上的漏洞,使用自編程式在擦除加密鎖定位後,停止下一步擦除片內程式存儲器數據的操作,從而使加過密的單片機變成沒加密的單片機,然後利用編程器讀出片內程式。
(2) 電子探測攻擊
該技術通常以高時間解析度來監控處理器在正常操作時所有電源和接口連線的模擬特性,並通過監控它的電磁輻射特性來實施攻擊。因為單片機是一個活動的電子器件,當它執行不同的指令時,對應的電源功率消耗也相應變化。這樣通過使用特殊的電子測量儀器和數學統計方法分析和檢測這些變化,即可獲取單片機中的特定關鍵信息。
(3)過錯產生技術
該技術使用異常工作條件來使處理器出錯,然後提供額外的訪問來進行攻擊。使用最廣泛的過錯產生攻擊手段包括電壓衝擊和時鐘衝擊。低電壓和高電壓攻擊可用來禁止保護電路工作或強制處理器執行錯誤操作。時鐘瞬態跳變也許會復位保護電路而不會破壞受保護信息。電源和時鐘瞬態跳變可以在某些處理器中影響單條指令的解碼和執行。
(4)探針技術
該技術是直接暴露晶片內部連線,然後觀察、操控、干擾單片機以達到攻擊目的。為了方便起見,人們將以上四種攻擊技術分成兩類,一類是侵入型攻擊(物理攻擊),這類攻擊需要破壞封裝,然後藉助半導體測試設備、顯微鏡和微定位器,在專門的實驗室花上幾小時甚至幾周時間才能完成。所有的微探針技術都屬於侵入型攻擊。另外三種方法屬於非侵入型攻擊,被攻擊的單片機不會被物理損壞。在某些場合非侵入型攻擊是特別危險的,但是因為非侵入型攻擊所需設備通常可以自制和升級,因此非常廉價。
大部分非侵入型攻擊需要攻擊者具備良好的處理器知識和軟體知識。與之相反,侵入型的探針攻擊則不需要太多的初始知識,而且通常可用一整套相似的技術對付寬範圍的產品。

加密方法

科研成果保護是每一個科研人員最關心的事情,加密方法有軟體加密硬體加密,軟硬體綜合加密,時間加密,錯誤引導加密,專利保護等措施有矛就有盾,有盾就有矛,有矛有盾,才促進矛盾質量水平的提高。加密只講盾,現先講一個軟體加密:利用MCS-51 中A5 指令加密,其實世界上所有資料,包括英文資料都沒有講這條指令,其實這是很好的加密指令。A5 功能是二位元組空操作指令。加密方法:在A5 後加一個二位元組或三位元組操作碼,因為所有反彙編軟體都不會反彙編A5 指令,造成正常程式反彙編亂套,執行程式無問題仿製者就不能改變你的源程式。
硬體加密:8031/8052單片機就是8031/8052掩模產品中的不合格產品,內部有ROM,可以把8031/8052 當8751/8752 來用,再擴展外部程式器,然後調用8031 內部子程式。當然你所選的同批8031晶片的首地址及所需用的中斷入口均應轉到外部程式區。
硬體加密
用高電壓或雷射燒斷某條引腳,使其讀不到內部程式,用高電壓會造成一些器件損壞重要RAM 數據採用電池(大電容,街機採用的辦法)保護,拔出晶片數據失去機器不能起動,或能初始化,但不能運行。
用真假方法加密
擦除晶片標識
把8X52單片機,標成8X51 單片機,並用到後128B的RAM 等方法,把AT90S8252 當AT89C52,初始化後程式段中並用到EEPROM 內容,你再去聯想吧!
用雷射(或絲印)打上其它標識如有的單片機引腳兼容,有的又不是同一種單片機,可張冠李戴,只能意會了,這要求你知識面廣一點 。
用最新出廠編號的單片機,如2000 年後的AT89C 就難解密,或新的單片機品種,如AVR 單片機。
DIP封裝改成PLCC,TQFP,SOIC,BGA等封裝,如果量大可以做定製ASIC,或軟封裝,用不需外晶振的單片機工作(如AVR 單片機中的AT90S1200),使用更複雜的單片機,FPGA+AVR+SRAM=AT40K系列。
硬體加密軟體加密只是為敘說方便而分開來講,其實它們是分不開的,互相支撐,互相依存的軟體加密:其目的是不讓人讀懂你的程式,不能修改程式,你可以………….....
利用單片機未公開,未被利用的標誌位或單元,作為軟體標誌位,如8031/8051有一個用戶標誌位,PSW.1 位,是可以利用的程式入口地址不要用整地址,如:XX00H,XXX0H,可用整地址-1,或-2,而在整地址處加二位元組或三位元組操作碼,在無程式的空單元也加上程式機器碼,最好要加巧妙一點用大容量晶片,用市場上仿真器不能仿真的晶片,如內部程式為64KB 或大於64KB 的器件,如:AVR 單片機中ATmega103 的Flash 程式存儲器為128KBAT89S8252/AT89S53中有EEPROM,關鍵數據存放在EEPROM 中,或程式初始化時把密碼寫到EEPROM 中,程式執行時再查密碼正確與否,儘量不讓人家讀懂程式。關於單片機加密,講到這裡,就算拋磚引玉。

故障的排除

單片機故障的排除
1單片機正常工作的三個條件
單片機工作的三個條件分別是電源、時鐘晶振、復位。當單片機不能正常工作時,我們首先就要檢查這三個條件,用電壓表或者萬用表檢測他的電源和接地腳,檢測兩個引腳之間的電壓是不是5V左右;對於時鐘晶體振盪有沒有正常工作,我們最好用示波器進行檢測,看能否檢測到相應頻率的正弦波脈衝;復位檢測比較簡單,單片機的復位電平一般是高電平復位,單片機在接通電源的時候一般復位引腳上會出現5V左右的高電平,另外在按下復位按鍵時,復位引腳上也會出現高電平,用一般的電壓表或者萬用表都可以進行檢測。
2單片機內部是否正常工作的檢測
單片機內部有沒有正常工作,我們主要是通過寫入程式的方式來進行檢測和排查。這個檢測需要有“燒入”代碼的硬體和軟體才行,檢測的原理就是通過“燒入”代碼的硬體和軟體,將一段帶有檢測功能的正常代碼“燒入”到單片機。檢查兩個方面:第一就是能不能將目標代碼正常寫入單片機,不能正常寫入單片機時,說明單片機已經損壞,需要更換同型號的單片機;第二就是目標代碼可以正常寫入單片機,寫入後的效果是不是就是程式設定的功能,如果是說明單片機正常。
單片機在更換時,我們最好採用同型號的單片機,然後寫入公司給予的目標代碼,單片機的價格目前一般比較便宜,零售價格大概5元左右。

相關詞條

熱門詞條

聯絡我們