單片機學結
人的一生是一個不斷學習、不斷成長的過程。轉眼間,研究生的學習生涯結束了,走上新的工作崗位。回頭看看,發現自己不知不覺已經走過了五年的單片機學習之旅。
在2003年最初接觸單片機的時候,在我心中覺得51就是單片機,單片機就是51,根本不知道還有其他單片機的存在。那時候老師只教會了我們匯編語言,根本不知道用c語言也可以進行單片機開發。幸運的是,我加入了單片機興趣小組,在老師的指導下,做了一系列實驗,有“基于ds18b20的溫度采集系統”、“有基于164的移位寄存器的燈光控制系統”、“有步進電機和直流電機的控制系統”。這時候我才發現,這是學習單片機的一個最好途徑——在實踐中領悟理論,用理論指導實踐。在上課的整整一個學期中,雖然老師講得很詳細,但是大部分概念都是到了實際動手做東西的時候才弄明白的。而且在經歷了迷惑之后再搞清楚,印象就特別深刻。直到現在我對那些概念和接口都非常清晰。其實我也很慶幸學習和使用了兩年多的匯編語言。由于有這些鍛煉,我對單片機底層結構和接口時序就弄得很清楚。在使用c語言開發的時候,優化代碼和處理中斷也就不會太費勁。我覺得,雖然現在絕大部分單片機開發都使用c語言,甚至有些公司還推出了圖形化編程的工具,這樣對于項目的開展從時間上快了很多,在管理上也規范了不少,但是從學習和想深入掌握單片機精髓的角度來說,還是需要熟練掌握匯編語言的使用。
機會總是青睞于有準備的人。也許有了前面一段時間的理論和實踐的積累,我才慢慢得到了一些參加科技競賽和參與科研項目的機會。在參加第一屆浙江省機械設計競賽的時候,我們設計的由多單片機系統協調控制的“月球車”機器人奪得了唯一的一個特等獎。這個競賽給我最大的收獲是我對單片機的認識改變了,它不再僅僅是一門學科了,它是一個可以讓你的創意得到充分發揮的平臺。后來參與了“基于視頻分劃技術的鋼卷尺自動切零位機”、“電能表渦杠渦輪嚙合深度檢測系統”、“基于公共電話網的水表集抄數據路由器”、“高精度電感微位移測量系統”等一些實際的項目。在這些過程中,我發現只是精通單片機技術還不能很好的解決問題。體會最深的是,單片機只有融合到各種應用領域中,才能展現它的最大活力。然而單片機僅僅是一個工具而已,要做好單片機系統還需要各種應用領域的專業知識的支持。例如,在“基于視頻分劃技術的鋼卷尺自動切零位機”中,就需要搞清楚全電視信號的時序,弄明白鋼卷尺切零位機的工作原理,懂得怎么利用疊加在視頻信號中的橫豎線來進行刻度的瞄準等。沒有這些專業知識,就算單片機技術再厲害也不可能做好這個項目。脫離應用背景的單片機開發,就像一個沒有靈魂的軀體一樣。
隨著arm的出現,我曾經認為,8位單片機可能在32位單片機的沖擊下就此走進歷史,可是很快就認識到我是錯誤的。隨著技術的革新和時間的推移,各大單片機公司紛紛將單片機朝著片上系統這個方向發展,集成了現在各種流行的技術和常用的模塊。我相信,在當前國內和國外的這個市場中, 8位單片機應用的市場仍然是充滿生機,活力無限。在市場的不斷變化和技術的不斷更新過程中,8位單片機也會順應潮流不斷革新。
從我五年走過的路來看,單片機學習的過程應該是一個循序漸進、不斷學習、不斷積累的過程,可以分為三個階段。
第一階段:掌握開發單片機的必備基礎知識。首先是熟練掌握單片機的基本原理,其實各家各門的單片機其基本結構和原理都差不多,特別是共有的知識需要好好理解和掌握。例如,內核結構、內存分配、中斷處理、定時計數、串行通信、端口復用等一些最基本的概念和原理。除此之外,我們還需要具備模擬電子、數字電子、c語言程序開發知識以及原理圖和pcb設計等一些技能。在進行系統開發的時候,進行原理設計、pcb布板、程序編寫、系統聯調這些工作都是在所難免的。
第二階段:在掌握好一款單片機原理和應用的基礎上,開始學習其他各家單片機的獨有技術,學不了那么多也要多了解了解。同時盡可能多地掌握單片機的一些外圍器件和常用電路,以備不時之需。有時候客戶要求低成本,那我們只好選用合鈦、義隆、華邦等這類臺灣芯片;如果客戶要求工業級的性能,那么我們就得從pic、nec、飛思卡爾、nxp等這些歐美和日式單片機中選擇;若要進行功耗的開發,選用msp430系列應該有一定優勢;在進行測量儀器設計的時候,c8051和aduc842這類數模混合芯片就顯得比較方便。所以說最好每個類型的單片機都會一兩款,在實際項目選型中可以更加靈活。另外,要注意平時的技術積累。比如,在項目開發過程中將一些常用的接口程序和控制算法整理成模塊或者函數,在其他的項目開發中,有同樣或者接近的需求時馬上就可以使用,又快又好。
第三階段:在實際的項目開發過程中,不斷深化單片機應用技術,不斷積累應用行業的專業知識。例如,我完成了“高精度電感微位移測量系統”,就會對電感傳感器的測量機理和信號特性、測量電路的設計、電磁兼容處理、誤差修正和非線性處理等測控方面的專業技術有很深的認識。以后碰到類似的項目時,很多東西就可以直接利用了。有了扎實的單片機應用相關的基礎知識,并且熟悉掌握了幾款不同類型單片機的開發方法,再結合實際的應用背景,那么就可以隨心所欲,設計出性能最優、結構最合理的單片機應用系統。這是我最大的奮斗目標,我覺得這也應該是單片機應用的最高境界吧。
在這五年的學習中,有感慨、有遺憾、有憧憬、有希望,更重要的是我對單片機應用這個領域充滿熱情。由于才疏學淺、涉世未深,希望能與行業里的各位老師多多交流,不斷學習,不斷成長。
單片機學結 [篇2]
為了給前一段時間學習pic16f616型單片機的一個總結和方便大家的交流,我寫了這篇關于pic單片機的學習心得,都是在看了手冊和編程調試后用自己的語言組織的,其中有不足或者有疑問的地方希望大家能及時的給予糾正和批評,提出寶貴的意見。
復位、中斷和睡眠
(1)復位
pic16f616包括這樣的幾個復位功能,上電復位(power-on)、硬件復位、欠壓復位(brown-out)、看門狗復位。
關于上電復位por,大家都不陌生,單片機在上電的時候保持復位直到電壓能夠滿足其正常的工作電壓,同時你可以通過對connfig(編譯器上即可設置)的設置,來開啟power-up time,這個時間一般為64ms。
硬件復位可以通過mclr引腳外界復位電路,即可實現硬件復位(將此引腳接低電平)。
欠壓復位這個功能是可選的,也可以直接在編譯環境中配置config寄存器來開啟此功能。當此功能開啟時,如果單片機在運行的時候,供電電壓不足就會引起欠壓復位,復位后單片機如果發現供電電壓已經達到正常值的時候,會有一個64ms的延時,然后再運行程序。
關于看門狗的復位在看門狗部分已經說了。這里的一些復位還涉及到一些標志位。這些標志位分布在status和pcon上面。status上有兩個位 to、pd,當標志位to=1時,表示表示已經操作了上電復位或者是執行了clrwdt或者sleep指令,當to=0時,表示發生了看門狗復位。當標志位pd=1時表示操作了上電復位或者是執行了clrwdt指令,當pd=0時,表示執行了sleep指令。pcon上有兩個標志位是por和bor,分別表示的是上電復位和欠壓復位標志。具體的可以參看手冊。
(2)中斷
pic16f616包括這樣的幾個中斷源:ra2/int引腳外部中斷、ra端口電平變化中斷、定時器timer0、timer1、timer2溢出中斷、比較器中斷、ad轉換中斷、捕獲/比較/pwm中斷。
這些中斷的允許位和中斷標志位分別位于intcon、pie1、pir1、ioca這些寄存器里面,如果要開啟相應的中斷,就要置相應的中斷允許位,開啟總中斷位(intcon寄存器的gie位),還要開啟intcon上的peie位(定時器0溢出中斷、int引腳沿中斷和ra端口的電平變化中斷除外)。
當中斷發生的時候,相應的中斷標志位就會置起來,同時總中斷標志位gie會被清零,保證在此時間內不會相應其他的中斷,然后將當前的.pc指針值壓棧保存,以用來保證中斷能正確的返回到原來執行的地方。然后pc指針指向中斷向量地址0004h的地方,所以在編程序的時候,你可以在0004h的地址存一條跳轉指令跳到你定義的中斷服務程序里面去就可以了。如果在中斷的時候想保存一些重要的寄存器的話,可以在中斷程序的起始將其保存,然后在中斷服務程序的末尾將其恢復即可。
要注意的是中斷標志位不會自己清零,這就需要在編程的時候在軟件上對其清零,否則的話,單片機不停的執行中斷服務程序。如果你想要在以后的程序中還能產生中斷的話,就要把總中斷允許位gie重新置位。
(3)睡眠
要想讓單片機睡眠的方法很簡單,執行一條sleep指令就可以了,如果看門狗允許的話,wdt就會被清零,但是還保持運行,寄存器status的pd位將會置0,to位將會置1,io口還保持原來的狀態,在睡眠狀態下,不能驅動振蕩器了。
有些事件可以將單片機從睡眠狀態中喚醒:看門狗、ra口電平變化中斷、外部復位引腳mclk被拉低、ra2/int引腳沿中斷、timer1中斷(必須工作在異步計數模式)、eccp捕獲模式中斷、ad轉換中斷(時鐘源必須為內部rc的時候)、比較器輸出有變化,這些事件能夠將單片機喚醒,其他的事件不能。
如果某項能喚醒單片機的中斷已經開了,當總中斷允許位gie為1的時候,單片機被喚醒后可以進入中斷程序中去,而當gie位為0的時候,單片機也可以被喚醒,但是是執行下面的語句,而不能進入中斷程序中去。
為了保證在執行sleep語句后看門狗能夠清零,最好在sleep語句之前加一句清看門狗的語句clrwdt。
相關型號資料:at25020n-10sc2。7 mux08fp irfi9520g ts83c51rb2-mc
單片機學結 [篇3]
1、什么是單片機
在一片集成電路芯片上集成微處理器、存儲器、i/o接口電路,從而構成了單芯片微型計算機,即單片機。 intel公司推出了mcs-51系列單片機:集成 8位cpu、4k字節rom、128字節ram、4個8位并口、1個全雙工串行口、2個16位定時/計數器。尋址范圍64k,并有控制功能較強的布爾處理器。
2、單片機的作用
用到單片機的項目經驗介紹
手持糧庫溫度尋檢設備
畢設答辯打分器
電話臺燈
自動感應水龍頭
凡是與控制或簡單計算有關的電子設備都可以用單片機來實現,再根據具體實際情況選擇不同性能的單片機,如:atmel,stc,pic,avr,凌陽,80c51,arm等
工業自動化:數據采集、測控技術。
智能儀器儀表:數字示波器、數字信號源、數字萬用表、感應電流表等。
消費類電子產品:洗衣機、電冰箱、空調機、電視機、微波爐、手機、ic卡、汽車電子設備等。
通訊方面:調制解調器、程控交換技術、手機、小靈通等。
武器裝備:飛機、軍艦、坦克、導彈、航天飛機、魚雷制導、智能武器等。
等等…..
3、學習單片機之前預備知識
(1)數字電路中只有兩種電平:高和低
定義單片機為ttl電平:
高 +5v 低 0v
(2)rs232電平:計算機的串口
高 -12v 低+12v
所以計算機與單片機之間通訊時需要加電平轉換芯片
(3)進制轉換與邏輯、算術運算
(4)c語言基礎
(5)80c51了解
80c51是mcs-51系列中的一個典型品種;其它廠商以8051為基核開發出的 cmos工藝單片機產品統稱為80c51系列。
(6)
總線(bus)是計算機各部件之間傳送信息的公共通道。微機中有內部總線和 外部總線兩類。內部總線是cpu內部之間的連線。外部總線是指cpu與其它部件之間 的連線。 外部總線有三種: 數據總線db(data bus), 地址總線 ab(address bus) 和控制總線 cbcontrol bus)。
(7)
cpu:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能寄存器;
ram:用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據;
rom:用以存放程序、一些原始數據和表格;
i/o口:四個8位并行i/o口,既可用作輸入,也可用作輸出;
t/c:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工uart(通用異步接收發送器)的串行i/o口,用于實現單片機之間或單片機與微機之間的串行通信;
片內振蕩器和時鐘產生電路,石英晶體和微調電容需要外接。最高振蕩頻率取決于單片機型號及性能。
(8)
c51數據存儲類型
例:
數據類型 變量名
char var1;
bit flags;
unsigned char vextor[10];
int wwww;
注意:變量名不能用c語言中的關鍵字表示。
(9)
包含的頭文件(可以在安裝目錄下inc目錄下查看)
通常有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h
常用有:reg51.h reg52.h
(定義特殊功能寄存器和位寄存器);
math.h (定義常用數學運算);
(10)中斷服務程序的格式
函數名()interrupt n using m
{
函數內部實現 ….
}
(11)i/o口定義
sbit beep=p2^3;
(12)單片機的基本時序
機器周期和指令周期
(1) 振蕩周期: 也稱時鐘周期, 是指為單片機提供時鐘脈沖信號的振蕩源的 周期,tx實驗板上為11.0592mhz。
(2) 狀態周期: 每個狀態周期為時鐘周期的 2 倍, 是振蕩周期經二分頻后 得到的。
(3) 機器周期: 一個機器周期包含 6 個狀態周期s1~s6, 也就是 12 個時 鐘周期。 在一個機器周期內, cpu可以完成一個獨立的操作。
(4) 指令周期: 它是指cpu完成一條操作所需的全部時間。 每條指令執行時間都是有一個或幾個機器周期組成。mcs - 51 系統中, 有單周期指令、雙周期指令和四周期指令。
4、學習單片機目標
最小系統能夠運行起來的必要條件。
1.電源 2.晶振3.復位電路
對單片機任意io口的隨意操作
1.輸出控制電平高低2.輸入檢測電平高低。
定時器:重點掌握最常用的方式2
中斷:外部中斷、定時器中斷、串口中斷
串口通信:單片機之間、單片機與計算機間
單片機學結 [篇4]
基于本人學習單片機的痛苦經歷,特編寫本教程,以此獻給廣大的單片機初學者,希望您能從中受益。
作者提示:本教程乃最通俗易懂之單片機教材也,如果您還是看不懂,請千萬不要涉足此行,以免誤入歧途,耽誤您的前程*_*
拿到這本教程您首先就會想,什么是iap教學法?是不是一種什么全新的教學方法?當然不是,我可沒有那么大的本事,其實這只是我杜撰的一個新名詞,意思就是in applications program(在應用中編程),當然這只是針對單片機教學,說法是否正確,還得您說了算。
至于為什么要提這種說法,那我倒想說幾句。大家都知道,學習電子技術是一件非常無聊和枯燥的事情,為什么會有這種想法,就是因為我們傳統的教學方法只重理論而忽略了實踐,要一個人記住那些空洞而有無聊的理論知識實在不是一件容易的事,好在我們總算熬過來了,不管如何,也多多少少的學習了一些電子基礎知識。
接下來我們應該進一步掌握些什么知識呢,凡涉足此行的朋友都知道,那就是單片機。不過這可不是一件容易的事,倒不是因為單片機很難學,而實在是我們身邊很難找到一本專為單片機入門者而編寫的教材。翻一下傳統的單片機教材,都好象是為已經懂單片機的人而寫的,一般總是以單片機的結構為主線,先講硬件原理,然后是指令,接著講軟件編程,再是系統擴展和外圍器件,最后舉一些實例(隨
,很少涉及單片機的基礎知識,如果按照此種學習方法,想便說一點:很多書中的實例都是有錯誤的)
進行產品開發,就必須先把所有的知識全部掌握了才可以進行實際應用。孰不知,單片機不象模擬電路和數字電路那樣,只要搞懂了電路原理,再按照產品要求設計好相應的電路就可以了。它是一種以簡單的硬件結構,復雜而有靈活的軟件系統來完成設計的通用性產品,不同的設計者只會使用其不同的功能,幾乎沒有人會把它的全部指令都使用起來,所以學習使用單片機只能靠循序漸進的積累,而不可能先把
。 它全部掌握了再去做產品開發(當然天才就例外了*_*)
基于以上原因,本人想嘗試一種全新的單片機教學方法,打破傳統的循序漸進式的教學方法,以單片機的應用為藍本,結合基本的工業控制系統和實踐工作中的具體應用,不分先后順序,將各條指令貫串于一個又一個的實驗中,通過所見即所得的實驗來講解各種指令的編程方法,順便講解相關的基本概念,使您盡快地熟悉單片機應用的基本步驟,掌握軟件編程的基本方法。
如果您學完了就能成為單片機的入門者,完全可以進行一般產品的開發;下冊部分是單片機應用的提高部分,主要學習單片機的系統擴展(比如:rom和ram存儲器的擴展,并行口的擴展,串行口的擴展,a/d和d/a與單片機的接口)以及相關開發工具和軟件的使用(包括kell c51的應用與調試技巧,硬件仿真器的使用)等等,如果您學完了下冊部分,那就得恭喜您成為了單片機開發的高手了,不過單片機的技術是在不斷的發展和提高的,您也不要太驕傲哦!
為了盡量把最新的單片機知識和應用成果收錄進我們的教程,希望您能不吝賜教,共同來努力把我們的教程不斷的改進和完善。還是那句題外話,技術是靠不斷的積累和交流才會進步的,固封自守只會更加落后。
由于時間和精力的限制,我還是希望在您學習本教程之前,自己先熟悉一點相關的電子技術知識,特別是數字電路基礎,這對您學習中碰到的相關概念會有很大的幫助。
【單片機學結】相關文章:
單片機學結與心得06-02
單片機學結報告06-02
單片機的課程學結06-02
單片機系統學結06-02
單片機生產實結12-02
對學結06-03
日語學結11-25
對標學結06-03
對excel的學結06-03