《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > AET原創(chuàng) > 高級硬件工程師教你如何學習單片機

高級硬件工程師教你如何學習單片機

2015-12-02

  1,、萬事開頭難,、要勇敢邁出第一步,。

  開始的時候,,不要老是給自己找借口,,說KEIL不會建項目啦,、沒有實驗板啦之類的,。遇到困難要一件件攻克,,不會建項目,就先學它,,這方面網(wǎng)上教程很多,,隨便找找看一下,做幾次就懂了,。然后可以參考別的人程序,,抄過來也無所謂,寫一個最簡單的,,讓它運行起來,,先培養(yǎng)一下自己的感覺,知道寫程序是怎么一回事,,無論寫大程序還是小程序,,要做的工序不會差多少,總得建個項目,,再配置一下項目,,然后建個程序,加入項目中,,再寫代碼,、編譯、生成HEX,,刷進單片機中,、運行。必須熟悉這一套工序,。個人認為,,一塊學習板還是必要的,寫好程序在上面運行一下看結(jié)果,,學習效果會好很多,,仿真器就看個人需要了,。單片機是注重理論和實踐的,光看書不動手,,是學不會的,。

  2、知識點用到才學,,不用的暫時丟一邊,。

  厚厚的一本書,看著人頭都暈了,,學了后面的,,前面的估計也快忘光了,所以,,最好結(jié)合實際程序,,用到的時候才去看,不必說非要把書從第一頁看起,,看完它才來寫程序,。比如你寫流水燈,完全就沒必要看中斷的知識,,專心把流水燈學好就是了,,這是把整本書化整為零,一小點一小點的啃,。

  3,、程序不要光看不寫,一定要自己寫一次,。

  最開始的時候,,啥都不懂,可以抄人家的程序過來,,看看每一句是干什么用的,,達到什么目的,運行后有什么后果,,看明白了之后,,就要自己寫一次,你會發(fā)現(xiàn),,原來看明白別人的程序很容易,,但到自己寫的時候卻一句也寫不出來,這就是差距,。,。。當你自己能寫出來的時候,,說明你就真的懂了,。,。。

  4,、必須學會掌握調(diào)試程序的方法,。

  不少人寫程序,把代碼寫好了,,然后一運行,不是自己想要的結(jié)果,,就暈了,,然后跑到論壇上發(fā)個帖子,把程序一貼,,問:為什么我的程序不能正常運行?然后就等別人來給自己分析,。這是一種很不好的行為,應該自己學會發(fā)現(xiàn)問題和學會如何解決問題,。這就需要學習調(diào)試程序的方法,,比如KEIL里,可以下斷點啦,,查看寄存器內(nèi)容等等,,這些都是調(diào)試程序的手段,當你發(fā)現(xiàn)你寫的程序運行結(jié)果和你想象中不一樣的時候,,你可以單步,,也可以下斷點,然后跟蹤,,查看各相關(guān)寄存器內(nèi)容,,看看程序運行過中是不是有什么偏差,找出影響結(jié)果的地方,,改正過來,。這一個過程非常重要,通過程序的排錯,,你可以學到的知識是書上得不到的,。

  5、找到解決問題思路比找到代碼更重要,。

  我們用單片機來控制周邊器件,,達到我們想到的目的,這是一個題目,,而如何寫出一個程序,,來控制器件按你想要的結(jié)果去運作,這個就是解題的思路,。要寫程序,,就得先找到解決問題的思路,,你學會找出這個解題思路,比你找到代碼更為重要,。不少人很喜歡找人家的代碼,,有的人甚至有了代碼就直接復制到自己的程序中,可以說,,這不是一種學習的態(tài)度,,無助于你編程水平的提高。我?guī)缀醪辉趺纯慈思业拇a,,多數(shù)時候是看別人的思路,,有方框圖最好,沒有的話文字說明也可以,,要從代碼中看出別人處理問題的思路,,是相當困難的,特別是大型的程序,,看起來是非常的累人,,所以現(xiàn)在我也明白了,以前讀書時說的程序流程圖很重要,,現(xiàn)在算是知道了,。當你知道一個問題怎么去解決了,那么剩下的只是你安排代碼去完成,,這就已經(jīng)不是什么問題了,。舉個例子:數(shù)碼管動態(tài)掃描,沒寫過的初學者可能搞不清是怎么回事,,其實,,就是分時讓每一時間段時只控制一只數(shù)碼管顯示數(shù)字,幾只數(shù)碼管輪流顯示,,由于速度很快,,人眼的看起來是全部數(shù)碼管都亮的。明白是這么一回事,,事情就好辦了,,剩下的事情,無非是你安排讓一只只數(shù)碼管輪流顯示出相應的數(shù)值,。顯示數(shù)字,,然后延時一下,再下一只顯示數(shù)字,,延時,,知道是這樣,我們實際程序上只要做到這樣就可以:往段口送段碼,然后打開位選顯示一只,,延時一下,,再關(guān)閉位選,再送出段碼,,再打開另一只位選..僅此而已,。有了解決問題的思路,我們就能問題拆分開來,,然后逐一的解決,,如果動態(tài)掃描的原理都沒懂,不知道如何做,,那么這個程序是怎么也寫不出來的,。

  6、開動腦筋,,運用多種方法,不斷優(yōu)化自己的程序,。

  想想用各種不同方法來實現(xiàn)同一功能,。這是一個練習和提高的過程,一個問題,,你解決了,,那么你再想想,能不能換種寫法,,也可以實現(xiàn)同一功能,,或者說,你寫出來的代碼,,能不能再精簡一點,,讓程序執(zhí)行效率更高,這個過程,,就是一個進步的過程,。很多知識和經(jīng)驗的獲得,并不是直接寫在書讓你看就可以得到的,,需要自己去實踐,,開動腦筋,經(jīng)驗才能得到積累,,編程水平才能有所提高,。

  7、看別人的代碼,,學習人家的思路,。

  這個在學習初期是很有用,通過看別人的代碼,,特別是有多年編程經(jīng)驗的人寫出的具有一定水平的代碼,,可以使自己編程水平得到迅速的提高,,同時,也可以結(jié)合別人的編程手法,,與自己的想法融合在一起,,寫出更高水平的代碼,從中得到進步,。但要注意,,切忌將學習變成抄襲,更不是抄襲完了就認為自己學會了,,這樣做只會使你退步,。

  8、嘗試編寫一下綜合應用的程序,。

  從流水燈學起,,到動態(tài)掃描,再到中斷,,那么,,你可以試試寫一下時鐘這種綜合性應用的程序,不要小看時鐘,,要寫好它不是一件容易的事情,,它包括了單片機大部分的知識,比如有按鍵(IO讀取),、動態(tài)掃描(IO輸出),、中斷等,如何協(xié)調(diào)好各功能模塊正常工作,,才是編程者需要學習的地方,,當你單獨寫一個功能的時候,比如按鍵讀取,,你可能感覺很容易,,因為你的程序啥也不做,只是讀按鍵,。但把它和其它功能混合在一起,,如何在整個程序運行中使每一部分都正常工作,這就不是寫一個按鍵讀取這么容易的事情,,功能模塊之間有可能會互相影響,,比如你需要讓數(shù)碼管既能顯示,又要去處理按鍵讀取,,怎么使這兩部分都正常工作,,這就是一個協(xié)調(diào)過程。當你有了這個處理協(xié)調(diào)能力,你就算是入門了,。

  9,、著重于培養(yǎng)解決問題的能力,而不是具體看自己編寫了多少代碼或者做過什么,。

  “學單片機重點在于學習解決問題的思路,,而不是局限于具體的芯片類型和語言”這一直是我的座右銘,是我學單片機多年來感悟出來的,。經(jīng)??吹接腥苏f“你會驅(qū)動XX芯片,真牛啊”“你搞過XX項目,,真厲害”之類的話,,其實這是非常片面的,搞過XX芯片,,搞過XX項目,,只能說明你做過這一項目,它只是你的業(yè)績,,并不是代表能力就一定高,。真正的能力應該是:“遇到?jīng)]有解決過的問題或器件,能利用自己已學的知識,,迅速找到解決問題的方法?!边@個才是能力,。寫程序的過程就是一個創(chuàng)造的過程,幾乎沒有完全一樣的項目,,每次你遇上的幾乎都不相同,,所以你擁有的必須是你面對新項目時的創(chuàng)造能力,而不是標榜著你以往做過多少項目,。當然,,業(yè)績也能從另一側(cè)面反映你的經(jīng)驗和水平。

  10,、如果有可能,,多學習計算機專業(yè)的知識,比如數(shù)據(jù)結(jié)構(gòu)等,。

  這些是你解決問題的基礎知識,,你把這些知識應用得越好,就會發(fā)現(xiàn)越容易找到解決問題的方法,,這就是為什么一個學計算機專業(yè)的人編的程序和一個非計算機專業(yè)的人編的程序有差異的原因,。也是一個菜鳥進軍到高手所要配備的知識。如果我們把編程分為宏觀編程和微觀編程,那么微觀編程就是寫具體的代碼,,比如控制某某器件的語句;而宏觀編程就是如何對整個程序進行布局,、安排,使功能模塊以你想要的方式去運行,,得出你想要的結(jié)果,。如前所說“會控制XX器件”這些只能算是微觀編程,能做到這一步還只能算是菜鳥級別,,如果面對一個新的器件,,你心里沒底,沒把握去寫這個控制程序,,那說明你還是一個初級的菜鳥,。當你有了一定的編程經(jīng)驗,控制過相當數(shù)量的器件之后,,你就會發(fā)現(xiàn),,控制器件這些工作都是相似的、重復的工作,,體現(xiàn)不出編程的水平,,最多也是寫得好與不好的差別,只能算是一些小技巧的應用,。而對整個程序進行布局,、安排這些才是最頭痛的事情,能達到宏觀編程和微觀編程都做好才是真正的高手,。對于規(guī)模越大的程序,,越能體現(xiàn)出這一點。

  11,、面對一個新項目時,,多自己開動腦筋,不要急于找別人的程序,。

  有不少人面對一個新項目時,,第一步想到的就是網(wǎng)上找別人寫過的代碼,然后抄一段,,自己再寫幾句,,湊在一起就完成任務,這雖然可能是省時間,,但絕對不利你的學習,。當你接到一個新項目時,應該先自己構(gòu)思一下整個程序的架構(gòu),,想想如何來完成,,有可能的話,,畫一個流程圖,簡單的可以畫在腦子里,,對程序中用到的數(shù)據(jù),、變量有一個初步的安排,然后自己動手去寫,,遇到實在沒辦法解決的地方,,再去請教別人,或看別人是怎么處理的,,這樣首先起碼你自己動過腦想過,,自己有自己的思路,如果你一開始就看別人的程序,,你的思維就會受限在別人的思維里,,自己想再創(chuàng)新就更難了,這樣你自己永遠也沒辦法提高,,因為你是走在別人的影子里,。

  12、多利用網(wǎng)絡的搜索,,學會提問題,。

  一般來說,學習過程中,,你遇上的問題,,前人們多數(shù)也有遇上的,所以如果有什么不懂,,在自己解決不了的時候,,最好先到網(wǎng)上搜索一下,看能不能找到答案,,找不到再到論壇里發(fā)問,發(fā)問也要有目的性,,盡量簡單明了的描述問題,,讓幫助你的人可以用最少的時間就看懂你說什么,畢竟人家?guī)椭闶敲赓M的,,時間也是有限的,。看完全文了嗎,?喜歡就一起來點個贊吧,!


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。