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