| 最近常常被人問(wèn)到:“怎么樣才能學(xué)好單片機(jī)呢?” 面對(duì)這種問(wèn)題,我都是不做回答,因?yàn)榇_實(shí)沒(méi)法回答,但是問(wèn)得人多了,不免引發(fā)了自己的思考,下面,我把我的學(xué)習(xí)經(jīng)歷分享出來(lái),以供初學(xué)者參考。 一、啟蒙階段 大一的時(shí)候,學(xué)習(xí)的是電路基礎(chǔ)和模電數(shù)電,電路基礎(chǔ)上,做一些諸如電機(jī)正反轉(zhuǎn)的電路,模電數(shù)電課上,就自己做功放、電源等小制作,當(dāng)時(shí)也是憑著自己的興趣,做起來(lái)很認(rèn)真,但實(shí)事求是的說(shuō),理論知識(shí)沒(méi)記住多少,只能說(shuō),了解個(gè)大概。 二、學(xué)習(xí)微機(jī)原理 當(dāng)時(shí)我們講的是8086,這對(duì)了解計(jì)算機(jī)結(jié)構(gòu)是不可或缺的,我也是在那時(shí)候起,接觸到了匯編編程 三、匯編語(yǔ)言學(xué)習(xí)單片機(jī) 大二的時(shí)候,開(kāi)始學(xué)習(xí)51單片機(jī),當(dāng)時(shí)我那屆學(xué)生,開(kāi)設(shè)的都是匯編語(yǔ)言教學(xué),課程上,做得也都是可以用軟件仿真的小設(shè)計(jì),差不多學(xué)了三個(gè)月后,掌握了基本語(yǔ)法和單片機(jī)寄存器(如果有學(xué)習(xí)8086的基礎(chǔ),三個(gè)月的時(shí)間足夠了)功能,就做一些實(shí)物,那時(shí)候,認(rèn)識(shí)到,做實(shí)物和仿真的區(qū)別如此之大。 四、進(jìn)階 認(rèn)識(shí)到仿真和實(shí)物的巨大差別后,我就放棄了仿真學(xué)習(xí)單片機(jī)的方式,轉(zhuǎn)而通過(guò)實(shí)物。我的第一個(gè)作品是籃球計(jì)時(shí)計(jì)分器(不是課程設(shè)計(jì),是真實(shí)的作品),當(dāng)時(shí)很多東西都不懂,只能自己去查資料,比如說(shuō),74HC245,我那時(shí)候第一次接觸,就查百度了,還有三極管電路等等,都是百度查到的,因?yàn)橛写笠淮蛳碌幕A(chǔ),電路圖一看就懂,剩下的就是焊接實(shí)物測(cè)試了。拜良師所賜,我的焊接技術(shù)在速度和質(zhì)量上,都還可以,所以,可以在很短的時(shí)間內(nèi),可以完成硬件測(cè)試。 自主學(xué)習(xí)的主要過(guò)程就是查資料了,對(duì)于一些基礎(chǔ)的資料(IC參數(shù)等),網(wǎng)絡(luò)上都是現(xiàn)成的,如果看不懂,那誰(shuí)也沒(méi)辦法。問(wèn)題是,為什么我就可以看得懂呢,這就又要回到我大一的時(shí)候所學(xué)的課程,那時(shí)候讀書(shū)還算用功,培養(yǎng)了這種學(xué)習(xí)能力。換句話(huà)說(shuō),哪怕以前你是搞文科的,只要有學(xué)習(xí)、理解的能力,那么到另一個(gè)領(lǐng)域,也不會(huì)覺(jué)得無(wú)從下手。 然后就是編程了,很多網(wǎng)友問(wèn)我數(shù)學(xué)是不是很好,我只能表示慚愧了,高中的時(shí)候,我的數(shù)學(xué)分?jǐn)?shù)都在40分左右(滿(mǎn)分150),大學(xué)后,在30分左右。但數(shù)學(xué)不好,不代表不能編程,哪怕是用匯編語(yǔ)言。 那么,如何編程呢?有人說(shuō),先畫(huà)流程圖,然后再寫(xiě)程序、調(diào)試。我想,這是數(shù)學(xué)比我好的人說(shuō)的,我的方法如下: 1、用文字描述自己需要的功能(假設(shè)功能大于2) 2、拆分出各個(gè)功能,用文字描述每個(gè)功能是如何實(shí)現(xiàn)的 3、完成各個(gè)功能的程序,并做好測(cè)試,對(duì)于我來(lái)說(shuō),如果了解單片機(jī)的工作方式,那么編寫(xiě)程序其實(shí)就是把漢語(yǔ)翻譯成匯編語(yǔ)言。 4、修改每個(gè)功能模塊的程序,盡量讓程序簡(jiǎn)短,并且預(yù)留好和其他功能銜接的功能(接口、變量等) 5、合并簡(jiǎn)單功能模塊,復(fù)雜功能逐一合并,每次合并做好程序備份,以便糾錯(cuò) 6、如果上述工作做的足夠好,那么可以直接得到想要的結(jié)果,我的程序往往都是寫(xiě)完了就可以用,這是建立在部分模塊程序的完美基礎(chǔ)之上的。 如果是設(shè)計(jì)了獨(dú)一無(wú)二的作品,比如說(shuō)我的立方光(我是獨(dú)立設(shè)計(jì)的原理和程序,不管是新版還是舊版),那就在第一條補(bǔ)充一條:構(gòu)思,這需要你對(duì)單片機(jī)很了解,預(yù)想如何實(shí)現(xiàn),會(huì)遇到什么樣的問(wèn)題,以及解決的方案。立方光我構(gòu)思了2個(gè)月,真正做實(shí)物的時(shí)間,只有一周。等到了新版立方光問(wèn)世,我也是用了三周構(gòu)思,一周做實(shí)物。 五、學(xué)習(xí)c語(yǔ)言 通過(guò)一段時(shí)間的學(xué)習(xí),我認(rèn)識(shí)到了匯編語(yǔ)言的優(yōu)越性,也認(rèn)識(shí)到它的缺點(diǎn),這點(diǎn)我們稍后再說(shuō),先說(shuō)一下我現(xiàn)在學(xué)習(xí)c語(yǔ)言的情況。 因?yàn)橹坝辛俗鰧?shí)物和編程的基礎(chǔ),我就通過(guò)項(xiàng)目來(lái)學(xué)習(xí)C,比如,做一個(gè)溫度顯示,用到了18B20,就自己百度資料,至于程序,我就找了開(kāi)發(fā)板上現(xiàn)成的(說(shuō)到這,買(mǎi)個(gè)開(kāi)發(fā)板還是很必要的,要的是程序)。第一次接觸C編程,VOID是啥都不懂,那就百度吧,可以說(shuō),一個(gè)程序,我要百度很久來(lái)理解里面的內(nèi)容,不懂就是問(wèn)師弟(他們現(xiàn)在是學(xué)C的),差不多一天的時(shí)間(包括查資料),程序也就完成了,當(dāng)然,我還優(yōu)化了原程序,自己改寫(xiě)后的程序比以前更簡(jiǎn)短,占用RAM更少,因?yàn)橹笆菍W(xué)匯編的,一眼就看得出,程序改如何優(yōu)化。 以上就是我的學(xué)習(xí)經(jīng)驗(yàn)了,在這里我還是建議大家,要先學(xué)匯編語(yǔ)言,這沒(méi)壞處,比如我,因?yàn)橛袇R編的基礎(chǔ),學(xué)起c來(lái)就覺(jué)得很上手,特別是自己可以寫(xiě)出更優(yōu)化的程序。但有人說(shuō),匯編難學(xué),就算學(xué)了,以后編程也用不到。那么我要說(shuō),我的立方光程序就是匯編的,怎么用不到了?很多單片機(jī)的參考資料,也都是以匯編作為原始資料的,你不懂匯編,怎么學(xué)習(xí)新的功能?學(xué)了匯編后,你會(huì)知道,單片機(jī)可以做哪些事情,哪些事情不能做,以及如何做好一件事情,這是單純學(xué)C的人體會(huì)不到的。 那么匯編語(yǔ)言和C語(yǔ)言比起來(lái),優(yōu)劣勢(shì)在哪里呢?我根據(jù)我的學(xué)習(xí)經(jīng)驗(yàn),寫(xiě)一點(diǎn)個(gè)人心得,仁者見(jiàn)仁智者見(jiàn)智,各位也可以發(fā)表自己的看法。 匯編做為測(cè)試程序最合適不過(guò)了,比如你想測(cè)試最小系統(tǒng)的好壞,那么隨便更改一組IO的輸出就可以了,用匯編的話(huà),寫(xiě)三行足矣。如果測(cè)試某些IC的好壞,特別是需要脈沖的模塊,那么匯編就更有優(yōu)勢(shì),可以精確的控制時(shí)間,而且代碼量極短。最后就是在RAM占用上,匯編語(yǔ)言,總是把RAM的占用在最低,而純學(xué)C的人往往忽略這一點(diǎn),都是想用多少變量就定義多少變量,對(duì)于RAM小的可憐的單片機(jī)來(lái)說(shuō),是一種災(zāi)難,在實(shí)際生產(chǎn)中,往往選用的都是廉價(jià)單片機(jī),IO和RAM、ROM資源都很小,沒(méi)有多少你發(fā)揮的余地,如果你的程序可以讓公司把40P單片機(jī)換成28P的單片機(jī),那么PCB板就節(jié)約了,如果你的程序能從2K簡(jiǎn)化到1K,那么單片機(jī)的購(gòu)買(mǎi)成本也會(huì)降低,對(duì)于企業(yè)來(lái)說(shuō),一個(gè)板子省一毛錢(qián)都是巨大的利潤(rùn),所以說(shuō),你程序的好壞,是影響的企業(yè)利益的,何況很多人也想自己創(chuàng)業(yè)呢!至于說(shuō),如何才能優(yōu)化程序、寫(xiě)出最短的程序,那必須先要對(duì)單片機(jī)有足夠的了解,而學(xué)習(xí)單片機(jī)的內(nèi)部原理,是非匯編不可的。加上有人學(xué)單片機(jī)是為了向嵌入式進(jìn)階,那么學(xué)習(xí)匯編就是更是必不可少的了。C語(yǔ)言的優(yōu)勢(shì)我就不多少了,現(xiàn)在幾乎都是在用C編程,我最近在學(xué)習(xí)C編程,也體會(huì)到了C強(qiáng)大,但這不代表我以前學(xué)的匯編就浪費(fèi)了,比如stc的eeprom程序,官方給的就是匯編,可實(shí)際來(lái)說(shuō),寫(xiě)成C更好,如果你不懂匯編,自然也無(wú)法翻譯這些程序,談何C的應(yīng)用?關(guān)于這兩種語(yǔ)言的話(huà)題,我就不再往下說(shuō)了,免得又引起口水戰(zhàn),如果想學(xué)單片機(jī),我建議學(xué)C,如果你想學(xué)好單片機(jī),那就先學(xué)匯編再學(xué)C,這就我給初學(xué)者的建議。最后要說(shuō)的是,匯編編程,非常鍛煉人的思維,這也就是為什么都說(shuō)匯編難學(xué)了,如果你在匯編上有一定的編程能力,那么再掌握其他編程語(yǔ)言的時(shí)候,學(xué)習(xí)過(guò)程就會(huì)變得很容易。 我想寫(xiě)到這里就差不多了,學(xué)單片機(jī)沒(méi)什么竅門(mén),作為一門(mén)知識(shí),學(xué)它和學(xué)其他科目都用共性,謙虛、嚴(yán)謹(jǐn)、勤勞是必須的,不同的是,僅僅靠興趣維持是不行的,它帶給你的困難會(huì)很快讓你失去興趣,單片機(jī),要的更多的是毅力,面對(duì)困難,只有勤勞,而不是所謂的靈感。大多數(shù)人,都是經(jīng)歷幾十次失敗就停手了,我不是很聰明的人,我經(jīng)歷最多的失敗足有300多次,我的成功,都是源于我的堅(jiān)持,堅(jiān)持正確的思路并持之以恒! 希望這些文字或多或少的給初學(xué)者一些幫助, 早日入門(mén)! 最后,祝大家新年快樂(lè)!萬(wàn)事如意! |
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |