如何學好單片機

姓名:李浩然

學號:16030410020

轉自:http://www.51hei.com/bbs/dpj-39925-1.html(有刪改)

【嵌牛導讀 】:在大學的很多課程中,老師都經常提到關于單片機的內容,但由于許多大學生都是初次接觸這方面的內容面對這種問題,我都是不做回答,因為確實沒法回答,但是問得人多了,不免引發了自己的思考,下面,我把我的學習經歷分享出來,以供初學者參考。

【嵌牛鼻子】:微機原理、51單片機、匯編語言學習、流程圖

【嵌牛提問】:怎么才能學好單片機?應該從哪些方面入手學習,流程應該是怎么樣的?

【嵌牛正文】:

一、啟蒙階段

大一的時候,學習的是電路基礎和模電數電,電路基礎上,做一些諸如電機正反轉的電路,模電數電課上,就自己做功放、電源等小制作,當時也是憑著自己的興趣,做起來很認真,但實事求是的說,理論知識沒記住多少,只能說,了解個大概。

二、學習微機原理

當時我們講的是8086,這對了解計算機結構是不可或缺的,我也是在那時候起,接觸到了匯編編程

三、匯編語言學習單片機

大二的時候,開始學習51單片機,當時我那屆學生,開設的都是匯編語言教學,課程上,做得也都是可以用軟件仿真的小設計,差不多學了三個月后,掌握了基本語法和單片機寄存器(如果有學習8086的基礎,三個月的時間足夠了)功能,就做一些實物,那時候,認識到,做實物和仿真的區別如此之大。

四、進階

認識到仿真和實物的巨大差別后,我就放棄了仿真學習單片機的方式,轉而通過實物。我的第一個作品是籃球計時計分器(不是課程設計,是真實的作品),當時很多東西都不懂,只能自己去查資料,比如說,74HC245,我那時候第一次接觸,就查百度了,還有三極管電路等等,都是百度查到的,因為有大一打下的基礎,電路圖一看就懂,剩下的就是焊接實物測試了。拜良師所賜,我的焊接技術在速度和質量上,都還可以,所以,可以在很短的時間內,可以完成硬件測試。

自主學習的主要過程就是查資料了,對于一些基礎的資料(IC參數等),網絡上都是現成的,如果看不懂,那誰也沒辦法。問題是,為什么我就可以看得懂呢,這就又要回到我大一的時候所學的課程,那時候讀書還算用功,培養了這種學習能力。換句話說,哪怕以前你是搞文科的,只要有學習、理解的能力,那么到另一個領域,也不會覺得無從下手。

然后就是編程了,很多網友問我數學是不是很好,我只能表示慚愧了,高中的時候,我的數學分數都在40分左右(滿分150),大學后,在30分左右。但數學不好,不代表不能編程,哪怕是用匯編語言。

那么,如何編程呢?有人說,先畫流程圖,然后再寫程序、調試。我想,這是數學比我好的人說的,我的方法如下:

1、用文字描述自己需要的功能(假設功能大于2)

2、拆分出各個功能,用文字描述每個功能是如何實現的

3、完成各個功能的程序,并做好測試,對于我來說,如果了解單片機的工作方式,那么編寫程序其實就是把漢語翻譯成匯編語言。

4、修改每個功能模塊的程序,盡量讓程序簡短,并且預留好和其他功能銜接的功能(接口、變量等)

5、合并簡單功能模塊,復雜功能逐一合并,每次合并做好程序備份,以便糾錯

6、如果上述工作做的足夠好,那么可以直接得到想要的結果,我的程序往往都是寫完了就可以用,這是建立在部分模塊程序的完美基礎之上的。

如果是設計了獨一無二的作品,比如說我的立方光(我是獨立設計的原理和程序,不管是新版還是舊版),那就在第一條補充一條:構思,這需要你對單片機很了解,預想如何實現,會遇到什么樣的問題,以及解決的方案。立方光我構思了2個月,真正做實物的時間,只有一周。等到了新版立方光問世,我也是用了三周構思,一周做實物。

五、學習c語言

通過一段時間的學習,我認識到了匯編語言的優越性,也認識到它的缺點,這點我們稍后再說,先說一下我現在學習c語言的情況。

因為之前有了做實物和編程的基礎,我就通過項目來學習C,比如,做一個溫度顯示,用到了18B20,就自己百度資料,至于程序,我就找了開發板上現成的(說到這,買個開發板還是很必要的,要的是程序)。第一次接觸C編程,VOID是啥都不懂,那就百度吧,可以說,一個程序,我要百度很久來理解里面的內容,不懂就是問師弟(他們現在是學C的),差不多一天的時間(包括查資料),程序也就完成了,當然,我還優化了原程序,自己改寫后的程序比以前更簡短,占用RAM更少,因為之前是學匯編的,一眼就看得出,程序改如何優化。

以上就是我的學習經驗了,在這里我還是建議大家,要先學匯編語言,這沒壞處,比如我,因為有匯編的基礎,學起c來就覺得很上手,特別是自己可以寫出更優化的程序。但有人說,匯編難學,就算學了,以后編程也用不到。那么我要說,我的立方光程序就是匯編的,怎么用不到了?很多單片機的參考資料,也都是以匯編作為原始資料的,你不懂匯編,怎么學習新的功能?學了匯編后,你會知道,單片機可以做哪些事情,哪些事情不能做,以及如何做好一件事情,這是單純學C的人體會不到的。

那么匯編語言和C語言比起來,優劣勢在哪里呢?我根據我的學習經驗,寫一點個人心得,仁者見仁智者見智,各位也可以發表自己的看法。

匯編做為測試程序最合適不過了,比如你想測試最小系統的好壞,那么隨便更改一組IO的輸出就可以了,用匯編的話,寫三行足矣。如果測試某些IC的好壞,特別是需要脈沖的模塊,那么匯編就更有優勢,可以精確的控制時間,而且代碼量極短。最后就是在RAM占用上,匯編語言,總是把RAM的占用在最低,而純學C的人往往忽略這一點,都是想用多少變量就定義多少變量,對于RAM小的可憐的單片機來說,是一種災難,在實際生產中,往往選用的都是廉價單片機,IO和RAM、ROM資源都很小,沒有多少你發揮的余地,如果你的程序可以讓公司把40P單片機換成28P的單片機,那么PCB板就節約了,如果你的程序能從2K簡化到1K,那么單片機的購買成本也會降低,對于企業來說,一個板子省一毛錢都是巨大的利潤,所以說,你程序的好壞,是影響的企業利益的,何況很多人也想自己創業呢!至于說,如何才能優化程序、寫出最短的程序,那必須先要對單片機有足夠的了解,而學習單片機的內部原理,是非匯編不可的。加上有人學單片機是為了向嵌入式進階,那么學習匯編就是更是必不可少的了。C語言的優勢我就不多少了,現在幾乎都是在用C編程,我最近在學習C編程,也體會到了C強大,但這不代表我以前學的匯編就浪費了,比如stc的eeprom程序,官方給的就是匯編,可實際來說,寫成C更好,如果你不懂匯編,自然也無法翻譯這些程序,談何C的應用?關于這兩種語言的話題,我就不再往下說了,免得又引起口水戰,如果想學單片機,我建議學C,如果你想學好單片機,那就先學匯編再學C,這就我給初學者的建議。最后要說的是,匯編編程,非常鍛煉人的思維,這也就是為什么都說匯編難學了,如果你在匯編上有一定的編程能力,那么再掌握其他編程語言的時候,學習過程就會變得很容易。

我想寫到這里就差不多了,學單片機沒什么竅門,作為一門知識,學它和學其他科目都用共性,謙虛、嚴謹、勤勞是必須的,不同的是,僅僅靠興趣維持是不行的,它帶給你的困難會很快讓你失去興趣,單片機,要的更多的是毅力,面對困難,只有勤勞,而不是所謂的靈感。大多數人,都是經歷幾十次失敗就停手了,我不是很聰明的人,我經歷最多的失敗足有300多次,我的成功,都是源于我的堅持,堅持正確的思路并持之以恒!

希望這些文字或多或少的給初學者一些幫助, 早日入門!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Microcontrollers 1.單片機(Microcontrollers)是一種集成電路芯片,是采用超大規模...
    yansicing閱讀 984評論 0 4
  • 跟串兒來個約會,它是孤寂無聊時的陪伴,是興奮快活的消遣,是插科打諢時的牙祭,是粗茶淡飯后的驚喜。 串兒,已不僅僅是...
    周可波羅閱讀 383評論 0 0
  • 相愛容易,相處難,且行且珍惜。在感情里我們其實都是單翼的天使,單翼,注定了我們需要有另一只翅膀的配合,才能飛起來!...
    王園園2016閱讀 1,394評論 6 2
  • 序言 前幾天公交車上看了一篇百度大神的關于 KVO 探索的博客。我實地驗證了一下子,也遇到了好多問題,一番各種查閱...
    黃小夢閱讀 1,211評論 8 29
  • 同學們好,我們的祖先造出的漢字,實在是世界文字史上的一朵奇葩,世界文化史上一道雄奇的豐碑。《淮南子·本經》...
    死生契闊i閱讀 1,661評論 0 5