很多想學單片機的人問的第一句話就是:
對于這個問題今天就我自己是如何開始學單片機,如何開始上手,如何開始熟練這個過程給大家講講。
先說說單片機,一般我們現(xiàn)在用的比較多的的MCS-51的單片機,它的資料比較多,用的人也很多,市場也很大。就我個人的體會怎么樣才能更快的學會單片機這門課。
單片機這門課是一項非常重視動手實踐的科目,不能總是看書,但是學習它首先必須得看書,因為從書中你需要大概了解一下,單片機的各個功能寄存器,而說明白點,我們使用單片機就是用軟件去控制單片機的各個功能寄存器,再說明白點,就是控制單片機那些管腳的電平什么時候輸出高,什么時候輸出低。
由這些高低電平的變化來控制你的系統(tǒng)板,實現(xiàn)我們需要的各個功能。至于看書,只需大概了解單片機各管腳都是干什么的?能實現(xiàn)什么樣的功能?第一次,第二次你可能看不明白,但這不要緊,因為還缺少實際的感觀認識。
如果說學單片機你不實踐那是不可能學會的,關(guān)于實踐有兩種方法你可以選擇,一種方法:你自己花錢買一塊單片機的學習板,不要求功能太全的,對于初學者來說你買功能非常多的那種板子,上面有很多東西你這輩子都用不著,我建議有流水燈、數(shù)碼管、獨立鍵盤、矩陣鍵盤、AD或DA(原理一樣)、液晶、蜂鳴器,這就差不多了。如果上面我提到的這些,你能熟練應(yīng)用,那可以說對于單片機方面的硬件你已經(jīng)入門了,剩下的就是自己練習設(shè)計電路,不斷的積累經(jīng)驗。?
只要過了第一關(guān),后面的路就好走多了,萬事開頭難,大家可能都聽過。方法二:你身邊如果有單片機方面的高手,向他求助,讓他幫你搭個簡單的最小系統(tǒng)板。
對于高手來說,做個單片機的最小系統(tǒng)板只需要一分鐘的時間,而對于初學者可就難多了,因為只有對硬件了解了,才能熟練運用。而如果你身邊沒有這樣的高手,又找不到可以幫助你的人,那我勸你最好是自己買上一塊,畢竟自己有一塊要方便的多,以后做單片機類的小實驗時都能用得上,還省事。
有了單片機學習板之后你就要多練習,最好是自己有臺電腦,一天少看電影,少打游戲,把學習板和電腦連好,打開調(diào)試軟件坐在電腦前,先學會怎么用調(diào)試軟件,然后從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意愿隨意流動時你已經(jīng)入門了,你會發(fā)現(xiàn)單片機是多么迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,當你編寫的程序按你的意愿實現(xiàn)時你比做什么事都開心,你會上癮的,真的。
做電子類的人真的會上癮。然后讓數(shù)碼管亮起來,這兩項會了后,你已經(jīng)不能自拔了,你已經(jīng)開始考慮你這輩子要走哪一行了。
就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當?shù)玫浇獯鸷竽銜涀∫惠呑拥?,知識必須用于現(xiàn)實生活中,解決實際問題,這樣才能發(fā)揮它的作用,你自己好好想想,上了這么多年大學,天天上課,你在課堂上學到了什么?
是不是為了期末考試而忙碌呢?考完得了90分,哈哈哈好高興啊,下學期開學回來忘的一干二凈,是不是?你學到什么了?但是我告訴你單片機一旦學會,永遠不會忘了。另外我再說說用匯編和C語言編程的問題。很多同學大一二就開設(shè)了C語言的課,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。
學完了有什么用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必須要會運用。單片機編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎(chǔ)那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C語言也挺簡單,只是一門工具而已,我勸你最好學會,將來肯定用得著,要不你以后也得學,你一點匯編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。
匯編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到算法方面的問題時,根本是麻煩的不得了,現(xiàn)在單片機的主頻在不斷的提高,我們完全不需要那么高效率的代碼,因為有高頻率的時鐘,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個IO口寫個溫度傳感器的程序在哪里都能用,所以我勸大家用C語言:
總結(jié)上面,只要你有信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容易的事。
步驟
1.找本書大概了解一下單片機結(jié)構(gòu),大概了解就行。不用都看懂,又不讓你出書的。(3天)
2.找學習板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。?(20天)
3.自己網(wǎng)上找些小電路類的資料練習設(shè)計外圍電路。焊好后自己調(diào)試,熟悉過程。?(10天)
4.自己完全設(shè)計具有個人風格的電路、產(chǎn)品,你已經(jīng)是高手了。?
看到了嗎?下功夫一個多月你就能成為高手,我就講這么多了,學不學得會,下不下得了功夫就看你的了。
我的單片機學習心得
很多人說,學單片機最好先學匯編語言,以我的經(jīng)驗告訴大家,絕對沒有這個必要,初學者一開始就直接用C語言為單片機編程,既省時間,學起來又容易,進步速度會很快。在剛開始學單片機的時候,千萬不要為了解單片機內(nèi)部結(jié)構(gòu)而浪費時間,這樣只能打擊你的信心,當你學會編程后,自然一步步就掌握其內(nèi)部結(jié)構(gòu)了。
單片機的學習實踐
單片機提高重在實踐,想要學好單片機,軟件編程必不可少。但是熟悉硬件對于學好單片機的也是非常重要的。
如何學習好硬件,動手實踐是必不可少的。我們可以通過自己動手做一個自己的電子制作,通過完成它,以提高我的對一些芯片的了解和熟練運用它。這樣我們就可以多一些了解芯片的結(jié)構(gòu)。我相信,你完成了一個屬于自己的電子制作,你的單片機水平就會有一個質(zhì)的提高。
這就是我學習單片機的心得體會,希望給單片機的愛好者學好單片機有所幫助。
使用單片機就是理解單片機硬件結(jié)構(gòu),以及內(nèi)部資源的應(yīng)用,在匯編或C語言中學會各種功能的初始化設(shè)置,以及實現(xiàn)各種功能的程序編制。
第一步:數(shù)字I/O的使用
使用按鈕輸入信號,發(fā)光二極管顯示輸出電平,就可以學習引腳的數(shù)字I/O功能,在按下某個按鈕后,某發(fā)光二極管發(fā)亮,這就是數(shù)字電路中組合邏輯的功能,雖然很簡單,但是可以學習一般的單片機編程思想,例如,必須設(shè)置很多寄存器對引腳進行初始化處理,才能使引腳具備有數(shù)字輸入和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設(shè)置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。
第二步:定時器的使用
學會定時器的使用,就可以用單片機實現(xiàn)時序電路,時序電路的功能是強大的,在工業(yè)、家用電氣設(shè)備的控制中有很多應(yīng)用,例如,可以用單片機實 現(xiàn)一個具有一個按鈕的樓道燈開關(guān),該開關(guān)在按鈕按下一次后,燈亮3分鐘后自動滅,當按鈕連續(xù)按下兩次后,燈常亮不滅,當按鈕按下時間超過2s,則燈滅。
數(shù)字集成電路可以實現(xiàn)時序電路,可編程邏輯器件(PLD)可以實現(xiàn)時序電路,可編程控制器(PLC)也可以實現(xiàn)時序電路,但是只有單片機實現(xiàn)起來最簡單,成本最低。定時器的使用是非常重要的,邏輯加時間控制是單片機使用的基礎(chǔ)。
第三步:中斷
單片機的特點是一段程序反復執(zhí)行,程序中的每個指令的執(zhí)行都需要一定的執(zhí)行時間,如果程序沒有執(zhí)行到某指令,則該指令的動作就不會發(fā)生,這樣就會耽誤很多快速發(fā)生的事情,例如,按鈕按下時的下降沿。
要使單片機在程序正常運行過程中,對快速動作做出反應(yīng),就必須使用單片機的中斷功能,該功能就是在快速動作發(fā)生后,單片機中斷正常運行的程序,處理快速發(fā)生的動作,處理完成后,在返回執(zhí)行正常的程序。
中斷功能使用中的困難是需要精確地知道什么時候不允許中斷發(fā)生(屏蔽中斷)、什么時候允許中斷發(fā)生(開中斷),需要設(shè)置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應(yīng)該干什么,中斷完成后,程序應(yīng)該干什么等等。
中斷學會后,就可以編制更復雜結(jié)構(gòu)的程序,這樣的程序可以干著一件事,監(jiān)視著一件事,一旦監(jiān)視的事情發(fā)生,就中斷正在干的事情,處理監(jiān)視的事情,當然也可以監(jiān)視多個事情,形象的比喻,中斷功能使單片機具有吃著碗里的,看著鍋里的功能。
以上三步學會,就相當于降龍十八掌武功,會了三掌了,可以勉強護身。
單片機都有USART接口,特別是MSP430系列中很多型號,都具有兩個USART接口。USART接口不能直接與PC機的RS232接口連接,它們之間的邏輯電平不同,需要使用一個MAX3232芯片進行電平轉(zhuǎn)換。
USART接口的使用是非常重要的,通過該接口,可以使單片機與PC機之間交換信息,雖然RS232通信并不先進,但是對于接口的學習是非常重要的。正確使用USART接口,需要學習通信協(xié)議,PC機的RS232接口編程等等知識。試想,單片機實驗板上的數(shù)據(jù)顯示在PC機監(jiān)視器上,而PC機的鍵盤信號可以在單片機實驗板上得到顯示,將是多么有意思的事情?。?/p>
第五步:學會A/D轉(zhuǎn)換
MAP430單片機帶有多通道12位A/D轉(zhuǎn)換器,通過這些A/D轉(zhuǎn)換器可以使單片機操作模擬量,顯示和檢測電壓、電流等信號。學習時注意模擬地與數(shù)字地、參考電壓、采樣時間,轉(zhuǎn)換速率,轉(zhuǎn)換誤差等概念。使用A/D轉(zhuǎn)換功能的簡單的例子是設(shè)計一個電壓表。
第六步:學會PCI、I2C接口和液晶顯示器接口
這些接口的使用可以使單片機更容易連接外部設(shè)備,在擴展單片機功能方面非常重要。
第七步:學會比較、捕捉、PWM功能
這些功能可以使單片機能夠控制電機,檢測轉(zhuǎn)速信號,實現(xiàn)電機調(diào)速器等控制起功能。如果以上七步都學會,就可以設(shè)計一般的應(yīng)用系統(tǒng),相當于學會十招降龍十八掌,可以出手攻擊了。
第八步:學習USB接口、TCP/IP接口、各種工業(yè)總線的硬件與軟件設(shè)計。
學習USB接口、TCP/IP接口、各種工業(yè)總線的硬件與軟件設(shè)計是非常重要的,因為這是當前產(chǎn)品開發(fā)的發(fā)展方向。
到此為止,相當于學會15招降龍十八掌,但還不到打遍天下無敵手的境界。即使如此,也算是單片機大蝦了!!
單片機的“超神之路”:三個規(guī)劃
首先,單片機不是萬能的,但沒有單片機那是萬萬不能的。從N年前的單片機,到現(xiàn)在的單片機,單片機只是單片機,其性質(zhì)并沒有太多的改變。只是從原來的“神秘”、“暴利”、“有趣”等等,回歸了她原來的真是面目罷了--那只是在說明社會在進步,更加的合理和趨于理性。
只是現(xiàn)在的這樣回歸,有點走了極端,從一個極端走了另一個極端罷了。但相反,社會在這方面的需求卻是越來越大,至少在我們的有生之年,這樣的“自動化”過程一直會貫穿下去。所以你有什么好擔心的,怕自己沒有用武之地嗎?!怕自己的資薪?jīng)]有或不高嗎?
我自己在單片機和自己熟悉的行業(yè)上做了快10年了,不說自己的水平怎么樣。說牛不牛,說不牛也牛--該驕傲的時候還是要驕傲的,那是對自己的肯定,該謙虛的時候也要謙虛學習,畢竟單片機總是一個系統(tǒng)工程,方方面面的東西不是自己都要熟悉和精確把握的。要想自己混的不錯,我還是那句話---和自己所處的行業(yè)結(jié)合,那才是王道。
有些人在抱怨單片機在社會上的方方面面,那只是一個現(xiàn)象或表象罷了,或者說那只是純電子開發(fā)或純電子開發(fā)的配套產(chǎn)品,在面臨更加激烈的競爭情況罷了。別說自己只會編編程,做點純電子的工作就覺得不得了了,那就錯了,單片機系統(tǒng)工程沒有那么狹隘。
如果你走不出這種狹隘,那你注定就是在抱怨的那部分人。就像我前面說的,單片機只是在回歸她的本來面目而已。還有就是中國就是太缺少“到了50、60歲的樣子”,都還在從事單片機工作的人。也許那也是新興的中國需要經(jīng)歷的一個過程吧?!
沒有什么職業(yè)是最好的,只有在當前或相當一段時間內(nèi)適合自己的職業(yè)。就說單片機,對我來說,單片機的工作成果那只是一個配件(當然純電子產(chǎn)品除外),正因為是“配件”,所以你需要提供相應(yīng)的物理尺寸,單片機系統(tǒng)的散熱,安裝條件和安裝方式等等情況,需要與你的上下游提供的環(huán)境配合好,而不是說我的單片機功能完成了就沒我的事了,萬事大吉了。
就僅對單片機需要實現(xiàn)的功能來說,如果你連功能都實現(xiàn)不了,那我還要你做什么--那只是基礎(chǔ)工作。其實,往往上下游提供的環(huán)境對你的設(shè)計就是一種考驗,也有你需要變換N種方案才能比較好的實現(xiàn)的可能。很明顯,這樣的上下游環(huán)境,對你就是一種很好的資源,不過有些人可能就會視而不見,讓你更加熟悉自己開發(fā)的東西,在這個行業(yè)中的使用和價值情況,對自己的今后發(fā)展都是一個很好的參考。不像C、C++的人員到了沒有發(fā)揮平臺的時候,就很郁悶了。相反,對單片機來說,我們可以為自己建立那樣的可以供自己發(fā)揮和發(fā)展的平臺。
說了那么多,我只是在閑聊,聊聊自己的看法,希望對你有點幫助。
就我的理解出發(fā),單片機是相當“底層”和“硬件”的東西,沒有太多高深的數(shù)據(jù)結(jié)構(gòu),也沒有太多需要技巧的編程算法,只要我們從單片機執(zhí)行的角度去理解和編程就行了。一個單片機就可以構(gòu)成一個電子系統(tǒng),也可以只構(gòu)成一個智能節(jié)點。沒有太多高深的東西需要去研究,因為我們只是單片機的應(yīng)用者而已,別把自己提到“研究”的高度,我們只在“應(yīng)用”的高度。
正因為是在“應(yīng)用”的高度,所以在熟悉和能精確把握“單片機的使用”的時候,應(yīng)該把更多的精力放在“單片機的應(yīng)用”的“使用環(huán)境”上。曾經(jīng)有個牛人,拿著intel的8031的芯片技術(shù)手冊和內(nèi)部手冊,在一個單片機上實現(xiàn)了你想都沒想過能實現(xiàn)的應(yīng)用,但我認為那個是沒有必要的,除非你想搞51芯片開發(fā)。說了那么多,如果你還在為單片機而單片機的話,那我覺得你有點可悲了。
多熟悉單片機的上下游環(huán)境和條件,那不是很困難的事。我希望自己理解的這些東西,對后來者有點幫助,對新手能夠帶來點思考的東西,那就夠了。
規(guī)劃高度一:
當有一定的年齡和人力資源后,就可以自己出來做了,當個所謂的半個老板了。但當自己做老板說容易也容易,說不容易也不容易。當初我就是在這樣的忐忑中,沖了進去。項目接的很多,周期對自己規(guī)定的也很短,往往都是白天在處理前一個或前面項目的維護工作,晚上回來工作到一、二點開發(fā)新項目。
累就不用說了,有時想想那是在拿自己的命來搏錢啊!!!老婆不太同意我出來自己干,做的好好的也不錯。于是,我就對老婆說,可能我不能每個月準時的拿錢養(yǎng)家糊口,但我保證一年下來的平均每個月養(yǎng)家糊口的錢一定不會低于現(xiàn)在。就這樣,我開始了走自己的路了。吃苦受累我不怕,付出了沒有收獲我不怕。怕的就是過不了自己的心理關(guān),也許一直以來都比較好運氣和順利的緣故吧?!作為和我同行的兄弟姐妹們,一定要過了自己的心理關(guān),別太在意今時今日的得失,還有所謂的某些情況下的“面子”。
至少我們應(yīng)該用“最小的代價”來給自己當“學費”。也不怕你們笑話,我的“學費”交的也不少。一個成功的項目,不是你的功能有多好,有多強,而是你的開發(fā)成功為你的項目方帶來了多少的利潤收入,那才是真正的成功了,盡管你只賺了點兒開發(fā)費。
做項目,別為自己考慮太多,多換位思考一下。人家能信任你,把項目交給你做,你就多該從項目方的角度考慮考慮---也許有時他們的要求有點過分,但所謂不知者不去怪罪了。
規(guī)劃高度二:
做一個稱職的軟硬電子工程師吧。不用學太多,就學一些就行了,也不要去跟風,那個沒有必要。有時,你就是去學了,如果沒有相應(yīng)對應(yīng)的開發(fā)任務(wù),學的也是皮毛,不過只要皮毛也可以了,當你真正需要的時候,再拿起來就會快很多,也算是一種儲備吧。
但你至少要會一種,一種相對來說狹隘的系統(tǒng)吧?!不怕你笑話,我就只會51單片機。先說說我自己了,從事工業(yè)自動化方面的機床設(shè)備行業(yè):
精通51,了解其他的單片機,精通51匯編,精通CPLD,半精通C51(只用來做點人機界面工作),粗通FPGA(想精通自己做51IP核)。
精通三維造型軟件SOLIDWORKS(可以為自己的線路板造型和機械設(shè)備造型)
粗通機加工大部分的工藝。
精通鈑金和焊接。
熟悉數(shù)控設(shè)備、機床的實現(xiàn)解決方案。
對于每個人來說,學以致用,以前的我什么都想學,什么都用不好,當學的時候,卻沒有用的發(fā)揮平臺,都是為學而學。但至少當你要用的時候,重新?lián)炱饋淼臅r候,就會很快。就拿ARM來說吧,學的時候?qū)W的很努力,從其機理到實現(xiàn),也做過好多的實驗,可現(xiàn)在就是用的少就剩下了點概念的東西了。
所以沒必要什么都要精通,只要一樣,比如51單片機吧,從設(shè)計、投板、采購、焊接、一直到調(diào)試成成品等等一個系統(tǒng)下來,如果你思考了,如果你精通了,你還怕什么,不給高工資也要給你高年薪了,應(yīng)該都能了解“老板一將難求”的道理了。
規(guī)劃高度三:
做一個合格的新手電子工程師吧。對于新手,我的建議是:別上來就是一個什么五年十年規(guī)劃之類的,我們都是普通人,那種規(guī)劃不適合普通人。如果我們能將今后一年和二年的規(guī)劃做好了,那你就已經(jīng)很了不起了。
每天都是一個想法,每月都是一個變化,更別說每年了,只要你在努力,腳踏實地的做事。不要把自己搞的太忙碌了,給自己每天留半個小時想想“心事”了。做好一樣,再發(fā)散開去,對于電子類的,什么STM32,DSP,51都是相通的:
編輯:黃飛
評論
查看更多