單片機學習經驗總結
單片機的學習是嵌入式中的裸機開發,也就是不基于操作系統的開發過程,你只要把自己學的程序下載到單片機內執行即可(這個過程有個專業術語:燒寫), 在這個過程中,你所寫的程序,主要是控制作用。
然而基于操作系統的開發過程,對于我們計算機專業的學生來說,主要是開發進行嵌入式應用程序和驅動這兩個方面,這時候我想才是真正的嵌入式開發過程,說到這你可能會發出這樣的問題:那為什么我們還要學單片機?
直接學arm這類真正的嵌入式開發不就行了嗎?這就牽扯到學單片機的意義,其實從嵌入式開發的歷史來看,剛開始就是簡單地裸機開發過程,不涉及到基于嵌入式操作系統的開發過程,所以從單片機入手學習嵌入式,第一,你可以從這個行業的起點開始,真正使自己的知識系統化。第二,在學完單片機之后,可以加快你學習arm的速度。接下來我將從三個方面講怎樣學習單片機。
準備篇:
剛開始,你可以不用急著寫程序,你可以把什么是單片機這個概念搞懂,你可能已經看到過一塊單片機開發板,記住:我這里強調的是單片機開發板,而不是單片機。單片機是由微處理器、存儲器和I/O接口電路構成,同時它也有自己的內部資源:定時/計數器、中斷源、優先級查詢電路以及內部總線(C51是單總線結構),。單片機微處理器一般是8位的,存儲器分為ROM和RAM,在C51中,有4K的ROM和128字節的RAM,它們各自的容量要根據不同的單片機型號而定,我認為現在的單片機的存儲器相比以前已經拓展的很大了,例如STC12C5A 系列,他們的ROM已經是64K,RAM是1028B,相比傳統的C51,你說這容量是不是很震撼。
我想也是的。當然了,如果你足夠牛,你也許會碰到這樣一個情況:為什么我寫個一個全板測試測序為什么在C51上下載不進去呢?因為你的程序大小已經超過了4K了,呵呵。。。。在剛剛介紹單片機的內部資源時,你也許已經發現了,為什么我沒有把內部資源寫的那么具體,因為不同單片機的內部資源是有所不同的,但是都是大同小異,所以當你拿到一個開發板時,首先就要看他的數據手冊,看看它的內部資源是哪些,心中要有個數。。。。由單片機再加上外圍設備(簡稱外設)就可以叫:單板機了,也就是人們常說的單片機開發板。
外設是很活的東西,因為外設的添加不是那么固定,這要根據開發單片機板子的工程師怎樣設計了。。。但是現在基于C51內核的單片機開發板,其添加的外設都是差不多的,例如用于時鐘的DS1302,溫度傳感器18b20,數碼管,顯示器1602和12864以及TFT彩屏,還有大多數基于IIC總線的PCF8591、EEPROM,鍵盤(獨立和矩陣)等等。。
這時候,你可以不用著急忙于學外設,你主要的任務是掌握單片機的運作過程,當實現一個小功能的程序時,你可以想想這個程序涉及到哪些硬件資源,這個資源怎樣工作的?
即使不太懂也不用著急,畢竟這個時期主要是掌握單片機內部原理,具體的思路你可以結合“模擬電路”,“數字電路”“計算機組成原理”“匯編語言”的知識獲得,學習單片機我認為是一件很幸福的事,為什么這樣說,它本身就可以看做是一個早期的“電腦”,你可以知道各個指令的運行實質(結合計算機組成原理中的“指令執行過程”),這樣當你在寫代碼的時候,心里不會感覺那么“虛”。。。。。
說的有點遠了。說說匯編吧,我認為學習匯編目的也就是為了更好地了解單片機里面的內部資源:寄存器。因為C語言里面涉及到寄存器編程的很少,但是匯編就不同了,它對寄存器和物理地址都要掌握才能夠編程,這點對于單片機的學習還是很有好處的,因為你可以對“控制”這個概念有個很好的感性認識。。。
說到現在,就是要告訴你,掌握單片機原理。但是難點還是有的,例如中斷響應部分,各個I/O口結構的特點,這方面在編程時會涉及到,有時候你忽視它,可能會造成不是自己想要的結果。當然了,在這個階段,你不光要掌握單片機原理,還要把數字電路和C語言回顧一下。。。。。。
入門篇:
這個階段你可以用C語言寫代碼往里面燒寫程序了,記住這個階段有很重要的一點:不要放過任何一個程序,在這個時候你編寫的程序,有時候會碰到各種錯誤,但是正是這種錯誤才能鍛煉你的能力,所以盡量寫代碼。
你可以先從內部資源的編程著手,例如學會熟悉各個引腳的控制,熟悉中斷的編程,用各種方法實現流水燈(方法一:利用循環左移(分為調用函數方式和P0=~(0x01<<j);j++方式);方式二:利用數組;方式三:用擴展I/O中的38譯碼器74HC138)。這些是我自己想的,你也可以用自己想到的方法去實現。相信自己。
當自己熟悉了編譯環境后,最好找個源程序,把調試部分熟悉一下,畢竟編譯環境的熟悉在調試中還是有點必要的。。。當你不會因一些小問題或軟件的故障而糾結時,你就可以開始對外設的編程控制了,這時候你就要掌握看開發板的原理圖,在碰到這個模塊時,首先要知道它是干什么的?然后記住它的各個接口怎么和單片機I/O相連的, 再了解他的各個電氣特性,記住是了解而不必深究,因為關于各個模塊的設計和電器特性,對于我們來說不是why 而是remember! 當然了,當你涉及到通信:UART、IIC時你應該參照時序圖,把底層代碼看懂,看著看著你就會了,畢竟他們的底層代碼也不多。。。
記住時序圖一定要會看。這時候,不要把各個源代碼下載進去僅看看現象,然后跟看電影的一樣,我想這樣你還不如真的去看電影,因為你的主要任務就是寫代碼,你這種方式放棄了你的主要學習部分!!所一定要學會寫程序。。。。當你把各個模塊都編程了一遍后,我想你還差很大的火候,因為你沒真正的去做:“想--寫---調試---想----調試-----實現”這樣的項目實現,如果你能達到這個地步,我想說:你入門了!!!
提高篇:
這個階段,我想你應該開始找小的項目做了,例如在TFT上做個溫度變化趨勢圖,做個模擬鬧鐘什么的。。。要實現這里的每一個小項目,我感覺還是值得你去花一兩天認真的去鉆研的。。。。畢竟這時候是你“自己想到,自己做到”的過程,(想想是不是很好玩?當你做出這些項目的時候,你的快樂是別人所不知道的,呵呵),這個時候你可以盡量把板子上的資源綜合起來編程,盡量做個全板測試程序。。。
學到這里,我想你不是菜鳥了,但是還不是高手,因為單片機的學習,對于我們計算機專業的來說,我們還是僅僅專研的是軟件部分,硬件僅僅涉及到模塊的接口,時序部分。。。。所以能走到這里,恭喜你:你不是菜鳥了。。。。。。。后來的路其實我在這里不用說了,因為你學到這里,自己自然之道自己怎么走了,
如果你想以后從事嵌入式行業,你可以用基于操作系統的開發板學習了, 我認為,在幾個流行的嵌入式系統中:WIN CE,Linux 以及VXWORK中,我認為你可以選擇WINCE 或者LINUX,在開發板上,有ARM,PPC以及MIPS,我認為可以毫不猶豫的選擇ARM ,所以買個開發板吧,向終極菜鳥進軍。。。。。
最后,就說說單片機比賽,按照安徽省單片機比賽的趨勢來看,我想板子里面的源代碼他會給你的,所以你不必糾結于一些不必要的底層實現上,例如TFT彩屏的GUI,你有必要寫嗎?
我想是沒必要的,即便在你工作時,你從事的不是寫GUI,而是基于GUI寫應用程序。但是在把底層代碼輸進去的時候,一定要保證它是對的,不然比賽時,你哭都沒辦法,真的!!
還有你比賽時的速度取決于你平時能把板子上資源掌握的有多熟悉,因為比賽的賽題,不可能是單個模塊的編程。。。。
還有隊友間的合作很重要,一定要把任務分工明確,不然會有一個干的是無用功。。。。
在比賽的準備階段,不要忘記收集好的歷程和思想,因為比賽有時真的可以用到。。。。。
|