單片機難不難,該怎麼起手?學好了能做什麼崗位
很多想學單片機的人問我的第一句話就是:怎樣才能學好單片機?
對於這個問題我今天就我自己是如何初始學單片機,如何初始上手,如何初始熟練這個過程給大家講講。先說說單片機,一般我們此時用的比較多的的MCS-51的單片機,它的資料比較多,用的人也很多,市場也很大。就我個人的體會怎麼樣才能更快的學會單片機這門課。
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比賽///
正文開始:
單片機這門課是一項非常重視動手實踐的科目,不能總是看書,但是進修它首先鄙儇須得看書,由於從書中你須要大略了解一下,單片機的各個功能寄存器,而說明白點,我們使用單片機就是用軟體去控制單片機的各個功能寄存器,再說明白點,就是控制單片機那些管腳的電平什麼時候輸出高,什麼時候輸出低。由這些高低電平的變化來控制你的系統板,實現我們須要的各個功能。至於看書,只需大略了解單片機各管腳都是幹什麼的?能實現什麼樣的功能?第一次,第二次你可能看不明白,但這不要緊,由於還缺少少實際的感觀認識。
所以我總是說,學單片機看書看兩三天的就夠了,看小說你一天能看五六本,看單片機你兩三天看兩三遍就夠了,能夠不用仔細的看。舉薦一本書,就這一本就足夠,書名是《新編MCS-51單片機應用設計》,是哈爾濱工業大學出版社出的的,作者是張毅剛。大略了解一下書上的內容,然後實踐,這是非常關鍵的。假如說學單片機你不實踐那是不可能學會的,關於實踐有兩種方法你能夠選擇,一種方法:你自己花錢買一塊單片機的進修板,不要求功能太全的,對於初學者來說你買功能非常多的那種板子,上面有很多東西你這輩子都用不著,我建議有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD或DA(原理一樣)、液晶、蜂鳴器,這就差不多了。假如上面我提到的這些,你能熟練應用,那能夠說對於單片機方面的硬體你已經入門了,剩下的就是自己練習設計電路,不斷的積攢經歷。只有過了第一關,後面的路就好走多了,萬事開頭難,大家可能都聽過。方法二:你身邊假如有單片機方面的高手,向他求助,讓他幫你搭個簡略的最小系統板。
對於高手來說,做個單片機的最小系統板只須要一分鐘的時長,而對於初學者可就難多了,由於獨有對硬體了解了,才能熟練運用。而假如你身邊沒有這樣的高手,又找不到能夠幫助你的人,那我勸你最好是自己買上一塊,畢竟自己有一塊要方便的多,以後做單片機類的小實驗時都能用得上,還省事。有了單片機進修板之後你就要多練習,最好是自己有台電腦,一天少看電影,少打遊戲,把進修板和電腦連好,翻開調試軟體坐在電腦前,先學會怎麼用調試軟體,然後從最簡略的流水燈實驗做起,等你能讓那八個流水燈依照你的意願隨意流動時你已經入門了,你會發現單片機是多麼迷人的東西啊,太好玩了,這不是在進修知識,而是在玩,當你編寫的程序按你的意願實現時你比做什麼事都開心,你會上癮的,真的。
做電子類的人真的會上癮。然後讓數碼管亮起來,這兩項會了後,你已經不能自拔了,你已經初始考慮你這輩子要走哪一行了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當得到解答後你會記住一輩子的,知識必需用於現實生活中,攻克實際問題,這樣才能發揮它的作用,你自己好好想想,上了這麼多年大學,天天上課,你在課堂上學到了什麼?
是不是為了期末考試而忙碌呢?考完得了90分,哈哈哈好高興啊,下學期開學回來忘的一乾二淨,是不是?你學到什麼了?但是我告訴你單片機一旦學會,永遠不會忘了。另外我再說說用彙編和C語言編程的問題。很多同學大一二就開設了C語言的課,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。學完了有什麼用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必需要會運用。單片機編程用C語言或彙編語言都能夠,但是我建議用C語言比較好,假如原來有C語言的根底那學起來會更好,假如沒有,也能夠邊學單片機邊學C語言,C語言也挺簡略,只是一門工具罷了,我勸你最好學會,將來肯定用得著,要不你以後也得學,你一點彙編都不會根本沒所謂,但你一點C語言都不會那你將來會吃苦頭。彙編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到算法方面的問題時,根本是麻煩的不得了,此時單片機的主頻在不斷的提高,我們完全不須要那麼高效率的代碼,由於有高頻次的時鐘,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只須要變一個IO口寫個溫度傳感器的程序在哪裡都能用,所以我勸大家用C語言:嵌入式開發初學者,如何學好C語言?。總結上面,只有你有自信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容易的事。
步驟
1.找本書大略了解一下單片機構造,大略了解就行。不用都看懂,又不讓你出書的。(3天)
2.找進修板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。(20天)
3.自己網上找些小電路類的資料練習設計外圍電路。焊好後自己調試,熟悉過程。(10天)
4.自己完全設計具有個人格調的電路、產品,你已經是高手了。
看到了嗎?下功夫一個多月你就能成為高手,我就講這麼多了,學不學得會,下不下得了功夫就看你的了。我的單片機進修心得很多人說,學單片機最好先學彙編語言,以我的經歷告訴大家,絕對沒有這個必要,初學者一初始就直接用C語言為單片機編程,既省時長,學起來又容易,進步速度會很快。在剛初始學單片機的時候,千萬不要為了解單片機內部構造而浪費時長,這樣只能打擊你的自信心,當你學會編程後,自然一步步就掌握其內部構造了。單片機的進修實踐單片機提高重在實踐,想要學好單片機,軟體編程必不可少。但是熟悉硬體對於學好單片機的也是非常重要的。
如何進修好硬體,動手實踐是必不可少的。我們能夠通過自己動手做一個自己的電子製作,通過完成它,以提高我的對一些晶片的了解和熟練運用它。這樣我們就能夠多一些了解晶片的構造。我相信,你完成了一個屬於自己的電子製作,你的單片機水平就會有一個質的提高。這就是我進修單片機的心得體會,希望給單片機的愛好者學好單片機有所幫助。使用單片機就是了解單片機硬體構造,以及內部資源的應用,在彙編或C語言中學會各種功能的初始化設置,以及實現各種功能的程序編制。
第一步:數字I/O的使用
使用按鈕輸寫信號,發光二極體顯示輸出電平,就能夠進修引腳的數字I/O功能,在按下某個按鈕後,某發光二極體發亮,這就是數字電路中組合邏輯的功能,雖然很簡略,但是能夠進修一般的單片機編程思想,例如,必需設置很多寄存器對引腳進行初始化處理,才能使引腳具備有數字輸寫和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。
第二步:定時器的使用
學會定時器的使用,就能夠用單片機實現時序電路,時序電路的功能是強大的,在工業、家用電氣設備的控制中有很多應用,例如,能夠用單片機實現一個具有一個按鈕的樓道燈開關,該開關在按鈕按下一次後,燈亮3分鐘後自動滅,當按鈕不間斷按下兩次後,燈常亮不滅,當按鈕按下時長超過2s,則燈滅。
數字集成電路能夠實現時序電路,可編程邏輯器件(PLD)能夠實現時序電路,可編程控制器(PLC)也能夠實現時序電路,但是獨有單片機實現起來最簡略,老本最低。定時器的使用是非常重要的,邏輯加時長控制是單片機使用的根底。
第三步:中斷
單片機的特點是一段程序反覆執行,程序中的每個指令的執行都須要一定的執行時長,假如程序沒有執行到某指令,則該指令的動作就不會發生,這樣就會耽擱很多快捷發生的事情,例如,按鈕按下時的下降沿。
要使單片機在程序正常運行過程中,對快捷動作做出反應,就必需使用單片機的中斷功能,該功能就是在快捷動作發生後,單片機中斷正常運行的程序,處理快捷發生的動作,處理完成後,在返回執行正常的程序。中斷功能使用中的艱難是須要精確地知道什麼時候不允許中斷髮生(屏蔽中斷)、什麼時候允許中斷髮生(開中斷),須要設置哪些寄存器才能使某種中斷起作用,中斷初始時,程序應該幹什麼,中斷完成後,程序應該幹什麼等等。
中斷學會後,就能夠編制更複雜構造的程序,這樣的程序能夠幹著一件事,監督著一件事,一旦監督的事情發生,就中斷正在乾的事情,處理監督的事情,當然也能夠監督多個事情,形象的比喻,中斷功能使單片機具有吃著碗里的,看著鍋里的功能。以上三步學會,就相當於降龍十八掌武功,會了三掌了,能夠勉強護身。第四步:與PC機進行RS232通信
單片機都有USART接口,特別是MSP430系列中很多型號,都具有兩個USART接口。USART接口不能直接與PC機的RS232接口連接,它們之間的邏輯電平不同,須要使用一個MAX3232晶片進行電平轉換。USART接口的使用是非常重要的,通過該接口,能夠使單片機與PC機之間替換信息,雖然RS232通信並不先進,但是對於接口的進修是非常重要的。正確使用USART接口,須要進修通信協議,PC機的RS232接口編程等等知識。試想,單片機實驗板上的數據顯示在PC機監督器上,而PC機的鍵盤信號能夠在單片機實驗板上得到顯示,將是多麼有意思的事情啊!第五步:學會A/D轉換
MAP430單片機帶有多通道12位A/D轉換器,通過這些A/D轉換器能夠使單片機操作模擬量,顯示和檢測電壓、電流等信號。進修時注意模擬地與數字地、參照電壓、採樣時長,轉換速率,轉換誤差等概念。使用A/D轉換功能的簡略的例子是設計一個電壓表。第六步:學會PCI、I2C接口和液晶顯示器接口
這些接口的使用能夠使單片機更容易連接外部設備,在擴展單片機功能方面非常重要。第七步:學會比較、捕捉、PWM功能
這些功能能夠使單片機能夠控制電機,檢測轉速信號,實現電機調速器等控制起功能。假如以上七步都學會,就能夠設計一般的應用系統,相當於學會十招降龍十八掌,能夠出手攻擊了。第八步:進修USB接口、TCP/IP接口、各種工業總線的硬體與軟體設計。
進修USB接口、TCP/IP接口、各種工業總線的硬體與軟體設計是非常重要的,由於這是當前產品開發的開展方向。到此為止,相當於學會15招降龍十八掌,但還不到打遍天下沒敵手的境界。即便如此,也算是單片機大蝦了!!
單片機的「超神之路」:三個布局
首先,單片機不是萬能的,但沒有單片機那是萬萬不能的。從N年前的單片機,到此時的單片機,單片機只是單片機,其性質並沒有太多的變更。只是從原來的「神秘」、「暴利」、「有趣」等等,回歸了她原來的真是面目而已--那只是在說明社會在進步,愈加的合理和趨於理性。
只是此時的這樣回歸,有點走了極端,從一個極端走了另一個極端而已。但相反,社會在這方面的需求卻是越來越大,至少在我們的有生之年,這樣的「自動化」過程一直會貫通下去。所以你有什麼好擔憂的,怕自己沒有用武之地嗎?!怕自己的資薪沒有或不高嗎?
我自己在單片機和自己熟悉的行業上做了快10年了,不說自己的水平怎麼樣。說牛不牛,說不牛也牛--該自豪的時候還是要自豪的,那是對自己的肯定,該謙虛的時候也要謙虛進修,畢竟單片機總是一個系統工程,方方面面的東西不是自己都要熟悉和精確把握的。要想自己混的不錯,我還是那句話---和自己所處的行業聯合,那才是王道。
有些人在埋怨單片機在社會上的方方面面,那只是一個現象或表象而已,或者說那只是純電子開發或純電子開發的配套產品,在面臨愈加激烈的競爭情況而已。別說自己只會編編程,做點純電子的工作就覺得不得了了,那就錯了,單片機系統工程沒有那麼狹隘。
假如你走不出這種狹隘,那你註定就是在埋怨的那局部人。就像我前面說的,單片機只是在回歸她的原本面目罷了。還有就是中國就是太缺少少「到了50、60歲的樣子」,都還在從事單片機工作的人。興許那也是新興的中國須要經歷的一個過程吧?!
沒有什麼職業是最好的,獨有在當前或相當一段時長內合適自己的職業。就說單片機,對我來說,單片機的工作成果那只是一個配件(當然純電子產品除外),正由於是「配件」,所以你須要提供相應的物理尺寸,單片機系統的散熱,安裝條件和安裝方式等等情況,須要與你的高低游提供的環境配合好,而不是說我的單片機功能完成了就沒我的事了,萬事大吉了。
就僅對單片機須要實現的功能來說,假如你連功能都實現不了,那我還要你做什麼--那只是根底工作。其實,往往高低游提供的環境對你的設計就是一種考驗,也有你須要變換N種方案才能比較好的實現的可能。很明顯,這樣的高低游環境,對你就是一種很好的資源,不過有些人可能就會視而不見,讓你愈加熟悉自己開發的東西,在這個行業中的使用和價值情況,對自己的今後開展都是一個很好的參照。不像C、C++的人員到了沒有發揮平台的時候,就很鬱悶了。相反,對單片機來說,我們能夠為自己建設那樣的能夠供自己發揮和開展的平台。
說了那麼多,我只是在閒聊,聊聊自己的看法,希望對你有點幫助。
就我的了解出發,單片機是相當「底層」和「硬體」的東西,沒有太多高深的數據構造,也沒有太多須要技巧的編程算法,只有我們從單片機執行的角度去了解和編程就行了。一個單片機就能夠構成一個電子系統,也能夠只構成一個智能節點。沒有太多高深的東西須要去鑽研,由於我們只是單片機的應用者罷了,別把自己提到「鑽研」的高度,我們只在「應用」的高度。
正由於是在「應用」的高度,所以在熟悉和能精確把握「單片機的使用」的時候,應該把更多的精力放在「單片機的應用」的「使用環境」上。曾經有個牛人,拿著intel的8031的晶片技術手冊和內部手冊,在一個單片機上實現了你想都沒想過能實現的應用,但我認為那個是沒有必要的,除非你想搞51晶片開發。說了那麼多,假如你還在為單片機而單片機的話,那我覺得你有點可悲了。
多熟悉單片機的高低游環境和條件,那不是很艱難的事。我希望自己了解的這些東西,對後來者有點幫助,對新手能夠帶來點思考的東西,那就夠了。
布局高度一:
當有一定的年齡和人力資源後,就能夠自己出來做了,當個所謂的半個老闆了。但當自己做老闆說容易也容易,說不容易也不容易。當初我就是在這樣的忐忑中,沖了進去。項目接的很多,周期對自己規定的也很短,往往都是白天在處理前一個或前面項目標維護工作,晚上回來工作到一、二點開發新項目。
累就不用說了,有時想想那是在拿自己的命來搏錢啊!!!老婆不太同意我出來自己干,做的好好的也不錯。於是,我就對老婆說,可能我不能每個月準時的拿錢養家餬口,但我保證一年下來的平均每個月養家餬口的錢一定不會低於此時。就這樣,我初始了走自己的路了。吃苦受累我不怕,付出了沒有收穫我不怕。怕的就是過不了自己的心理關,興許一直以來都比較好運氣和順利的緣故吧?!作為和我同行的兄弟姐妹們,一定要過了自己的心理關,別太在意今時今日的得失,還有所謂的某些情況下的「面子」。
至少我們應該用「最小的代價」來給自己當「學費」。也不怕你們笑話,我的「學費」交的也不少。一個成功的項目,不是你的功能有多好,有多強,而是你的開發成功為你的項目方帶來了多少的利潤收入,那才是真正的成功了,只管你只賺了點兒開發費。
做項目,別為自己考慮太多,多換位思考一下。人家能信任你,把項目交給你做,你就多該從項目方的角度考慮考慮---興許有時他們的要求有點過分,但所謂不知者不去怪罪了。
布局高度二:
做一個稱職的軟硬電子工程師吧。不用學太多,就學一些就行了,也不要去跟風,那個沒有必要。有時,你就是去學了,假如沒有相應對應的開發任務,學的也是皮毛,不過只有皮毛也能夠了,當你真正須要的時候,再拿起來就會快很多,也算是一種儲備吧。
但你至少要會一種,一種相對來說狹隘的系統吧?!不怕你笑話,我就只會51單片機。先說說我自己了,從事工業自動化方面的工具機設備行業:
精通51,了解其他的單片機,精通51彙編,精通CPLD,半精通C51(只用來做點人機介面工作),粗通FPGA(想精通自己做51IP核)。
?粗通ARMDSP,粗通ARM和DSP的彙編,了解C編程。
?精通三維造型軟件SOLIDWORKS(能夠為自己的線路板造型和機械設備造型)
?粗通機加工大局部的工藝。
?精通鈑金和焊接。
?熟悉數控設備、工具機的實現攻克方案。
對於每個人來說,學以致用,以前的我什麼都想學,什麼都用不好,當學的時候,卻沒有用的發揮平台,都是為學而學。但至少當你要用的時候,重新撿起來的時候,就會很快。就拿ARM來說吧,學的時候學的很努力,從其機理到實現,也做過好多的實驗,可此時就是用的少就剩下了點概念的東西了。
所以沒必要什麼都要精通,只有一樣,假如51單片機吧,從設計、投板、採購、焊接、一直到調試成成品等等一個系統下來,假如你思考了,假如你精通了,你還怕什麼,不給高工資也要給你高年薪了,應該都能了解「老闆一將難求」的道理了。
布局高度三:
做一個合格的新手電子工程師吧。對於新手,我的建議是:別上來就是一個什麼五年十年布局之類的,我們都是普通人,那種布局不合適普通人。假如我們能將今後一年和二年的布局做好了,那你就已經很了不起了。
每天都是一個想法,每月都是一個變化,更別說每年了,只有你在努力,腳踏實地的做事。不要把自己搞的太忙碌了,給自己每天留半個小時想想「心事」了。做好一樣,再發散開去,對於電子類的,什麼STM32,DSP,51都是相通的:簡略分析STM32和51的區別。精通了一個體系,那麼其他電子類的體系都是相通。怕就怕你什麼都不通,都是半通。還半桶水的晃來晃去的,那就有點鬱悶和悲哀了!