㈠ 學會51單片機能做什麼工作
例如,工業控制領域方面,儀器儀表方面,汽車行業,通訊方面,航海航空。
㈡ 單片機一體化教學中的幾點感悟
是一位教授單片機的老師提的問?你有什麼感悟呢?分享出來或許同學們也能受益。
㈢ 學好單片機未來前景如何
前景一般,吃不飽也餓不死,找工作不難,好工作很難。
㈣ 做單片機開發 ,有前途嗎請過來人指教!
本人還未畢業的小白,實習生而已~
弱弱的認為,單片機還是有前途,起碼非常容易創業,當然,也非常容易出屌絲:
我覺得有以下要點要注意:
1、單片機,是越小越有前途,不是越大越有前途(最好十幾個引腳的那種---》專用晶元(比如usb晶元))......像stm32那種,有點不倫不類的,當然工作自然不難找,但是.........就淪為樓上所提到的單片機+單片機的情況了。
2、熟悉協議,常用的協議 spi i2c這些不算(當然要懂),我說的是,起碼兩門以上大型協議:比如can匯流排協議,usb協議,或者網路協議,解明支持協議所需要的庫函數的每一行(將硬體與軟體相互投影)
3、熟悉多門業務,電源也好,觸摸屏也好,把他們的原理弄的熟悉無比。最好工業啊,產品啊,這些相關東西起碼要比較熟悉,畢竟,嵌入式是弄產品的。
4、了解操作系統,我說的是,為你弄的設備,寫驅動程序(win 和 linux這兩種是必須的),當然,如有現成的代碼,你也可以不用寫,但是起碼你要看的懂。。。。畢竟你要指導別人移植,使用的。
5、熟悉上位機的面向對象編程,單片機也是軟體工程師,多學學這些也是好的。。。。而且,你很有可能參與到上位機支持應用軟體的編寫當中。
6、當然,還有一些必要條件,比如良好的計算機基礎(如編譯原理,操作系統原理,微機原理之類),不是課本那些古老的東西,要結合你的環境,深入理解。
7、多認識些人,人--------》指的是有效的人
很多人,表面上認識人很多,實際上。。。。。。。
要認識,有特點的人!不解釋,但這點很重要。。。。
也不多啦,就上面七點~
祝你好運!
本來,弄這行就是修羅之道。害怕的話去考研,考公務員~~~~~~
心血來潮來回答問題。。。。。。
再次強調!!本人是小白。
㈤ 電子信息工程專業有必要學習單片機嗎請給理由
需要
單片機作為 微機的一種具體體現,絕對算得上是 電子信息工程專業的專業能力課程,所以必須學習。
電子信息工程專業主幹學科:電子科學與技術、信息與通信工程、計算機科學與技術。
主要課程:電路理論系列課程、計算機技術系列課程、信息理論與編碼、信號與系統、數字信號處理、電磁場理論、自動控制原理、感測技術等。
主要實踐性教學環節:包括課程實驗、計算機上機訓練、課程設計、生產實習、畢業設計等。一般要求實踐教學環節不少於30周。
單片機學習方法:
基礎理論知識包括模擬電路、數字電路和C語言知識。模擬電路和數字電路屬於抽象學科,要把它學好還得費點精神。在你學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。否則,你的單片機學習之路不僅會很艱難和漫長,還可能半途而廢。筆者始終認為,扎實的電子技術基礎是學好單片機的關鍵,直接影響單片機學習入門的快慢。有些同學覺得單片機很難,越學越復雜,最後學不下去了。有的同學看書時似乎明白了,可是動起手來卻一塌糊塗,究其原因就是電子技術基礎沒有打好,首先被表面知識給困惑了。
單片機屬於數字電路,其概念、術語、硬體結構和原理都源自數字電路,如果數字電路基礎扎實,對復雜的單片機硬體結構和原理就能容易理解,就能輕松地邁開學習的第一步,自信心也會樹立起來。相反,基礎不好,這個看不懂那個也弄不明白,越學問題越多,越學越沒有信心。如果你覺得單片機很難,那就應該先放下單片機教材,去重溫數字電路,搞清楚觸發器、寄存器、門電路、COMS電路、時序邏輯和時序圖、進制轉換等理論知識。理解了這些知識之後再去看看單片機的結構和原理,我想你會大徹大悟,信心倍增。
模擬電路是電子技術最基礎的學科,它讓你知道什麼是電阻、電容、電感、二極體、三極體、場效應管、放大器等等以及它們的工作原理和在電路中的作用,這是學習電子技術必須掌握的基礎知識。一般是先學習模擬電路再去學習數字電路。扎實的模擬電路基礎不僅讓你容易看懂別人設計的電路,而且讓你的設計的電路更可靠,提高產品質量。
單片機的學習離不開編程,在所有的程序設計中C語言運用的最為廣泛。C語言知識並不難,沒有任何編程基礎的人都可以學,在我看來,初中生、高中生、中專生、大學生都能學會。當然,數學基礎好、邏輯思維好的人學起來相對輕松一些。C語言需要掌握的知識就那麼3個條件判斷語句、3個循環語句、3個跳轉語句和1個開關語句。別小看這10個語句,用他們組合形成的邏輯要多復雜有多復雜。學習時要一條語句一條語句的學,學一條活用一條,全部學過用過這些關鍵語句後,相信你的C基礎建立了。
當基礎打好以後,你會感覺到單片機不再難學了,而且越學越起勁。當單片機乖乖的依照你的邏輯思維和演算法去執行指令,實現預期控制效果的時候,成就感會讓你信心十足、夜以續日、廢寢忘食的投入到單片機的世界裡。可以這么說,扎實的電子技術基礎和C語言基礎能增強學習單片機信心,較快掌握單片機技術。
實驗實踐
這是真正學習單片機的過程,既讓人興奮又讓人疲憊,既讓人無奈又讓人不服,既讓人孤獨又讓人充實,既讓人氣憤又讓人欣慰,既有失落感又有成就感。其中的酸甜苦辣只有學過的人深有體會。思想上要有刻苦學習的決心,硬體上要有一套完整的學習開發工具,軟體上要注重理論和實踐相結合。
1.有刻苦學習的決心
首先,明確學習目的。先認真回答兩個問題:我學單片機來做什麼?需要多長時間把它學會?這是你學單片機的動力。沒有動力,我想你堅持不了多久。其次,端正學習心態。單片機學習過程是枯燥乏味、孤獨寂寞的過程。要知道,學習知識沒有捷徑,只有循序漸進,腳踏實地,一步一個腳印,才能學到真功夫。再次,要多動腦勤動手。單片機的學習具有很強的實踐性,是一門很注重實際動手操作的技術學科。不動手實踐你是學不會單片機的。最後,虛心交流。在單片機學習過程中每個人都會遇到無數不能解決的問題,需要你向有經驗的過來人虛心求教,否則,一味的自己埋頭摸索會走許多彎路,浪費很多時間。
2.有一套完整的學習開發工具
學習單片機是需要成本的。必須有一台電腦、一塊單片機開發板(如果開發板不能直接下載程序代碼的話還得需要一個編程器)、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板用來運行單片機程序,驗證實際效果;視頻教程就是手把手教你單片機開發環境的使用、單片機編程和調試。對於單片機初學者來說,視頻教程必須看,要不然,哪怕把教材看了幾遍,還是不知道如何下手,尤其是院校里的單片機教材,學了之後,面對真正的單片機時可能還是束手無策;單片機教材和C語言教材是理論學習資料,備忘備查。不要為了節約成本不用開發板而光用Proteus軟體模擬調試,這和紙上談兵沒什麼區別。
3. 要注重理論和實踐相結合
單片機C語言編程理論知識並不深奧,光看書不動手也能明白。但在實際編程的時候就沒那麼簡單了。一個程序的形成不僅需要有C語言知識,更多需要融入你個人的編程思路和演算法。編程思路和演算法決定一個程序的優劣,是單片機編程的大問題,只有在實際動手編寫的時候才會有深切的感悟。一個程序能否按照你的意願正常運行就要看你的思路和演算法是否正確、合理。如果程序不正常則要反復調試(檢查、修改思路和演算法),直到成功。這個過程耗時、費腦、疲精神,意志不堅強者往往被絆倒在這里半途而廢。
學習編寫程序應該按照以下過程學習,效果會更好。看到常式題目先試著構思自己的編程思路,然後再看教材或視頻教程里的代碼,研究人家的編程思路,注意與自己思路的差異;接下來就照搬人家的思路親自動手編寫這個程序,領會其中每一條語句的作用;對有疑問的地方試著按照自己的思路修改程序,比較程序運行效果,領會其中的奧妙。每一個常式都堅持按照這個過程學習,你很快會找到編程的感覺,取其精華去其糟粕,久而久之會形成你獨特的編程思想。當然,剛開始,看別人的程序源代碼就像看天書一樣,只要硬著頭皮看,看到不懂的關鍵字和語句就翻書查閱、對照。只要能堅持下來,學習收獲會事半功倍。在實踐過程中不僅要學會別人的常式,還要在別人的程序上改進和拓展,讓程序產生更強大的功能。同時,還要懂得通過查閱晶元數據手冊(DATASHEET)里有關晶元命令和數據的讀寫時序來核對別人常式的可靠性,如果你覺得常式不可靠就把它修改過來,成為是你自己的程序。不僅如此,自己應該經常找些項目來做,以鞏固所學的知識和積累更多的經驗。
硬體設計
當編寫自己的程序信手拈來、閱讀別人的程序能夠發現問題的時候,說明你的單片機編程水平相當不錯了。接下來就應該研究硬體了。硬體設計包括電路原理設計和PCB板設計。學習做硬體要比學習做軟體麻煩,成本更高,周期更長。但是,學習單片機的最終目的是做產品開發----軟體和硬體相結合形成完整的控制系統。所以,做硬體也是學習單片機技術的一個必學內容。
電路原理設計涉及到各種晶元的應用,而這些晶元外圍電路的設計、典型應用電路和與單片機的連接等在晶元數據手冊(DATASHEET)都能找到答案,前提是要看得懂全英文的數據手冊。否則,照搬別人的設計永遠落在別人的後面,你做的產品就沒有創意。電子技術領域的第一手資料(DATASHEET)都是英文,從第一手資料里你所獲得的知識可能是在教科書、網路文檔和課外讀物等所沒有的知識。雖然有些資料也都是在DATASHEET的基礎上撰寫的,但內容不全面,甚至存在翻譯上的遺漏和錯誤。當然,閱讀DATASHEET需要具備一定的英文閱讀能力,這也是阻礙單片機學習者晉級的絆腳石。良好的英文閱讀能力能讓你在單片機技術知識的海洋里自由遨遊。
做PCB板就比較簡單了。只要懂得使用Protel軟體或 AltiumDesigner軟體就沒問題了。但要想做的板子布局美觀、布線合理還得費一番功夫了。
嫻熟的單片機C語言編程、會使用Protel軟體或 AltiumDesigner軟體設計PCB板和具備一定的英文閱讀能力,你就是一個遇強則強的單片機高手了。[2]
抗干擾設計
在提高硬體系統抗干擾能力的同時,軟體抗干擾以其設計靈活、節省硬體資源、可靠性好越來越受到重視。下面以MCS-51單片機系統為例,對微機系統軟體抗干擾方法進行研究。
抗干擾
在工程實踐中,軟體抗干擾研究的內容主要是:一、消除模擬輸入信號的雜訊(如數字濾波技術);二、程序運行混亂時使程序重入正軌的方法。本文針對後者提出了幾種有效的軟體抗干擾方法。
㈥ 前輩學51單片機的感悟是怎麼樣的
對單片機的理解可以是對計算機整體的認識,包括軟體硬體,等你接觸到嵌入式,你就會思考,計算機的設計,架構,執行,原理
㈦ 自學單片機有好處和必要嗎
其實你們專業課就有單片機,但如果你覺得很無聊,想學點這些來充實自己,對你以後的學習來說也是有意義的。
首先,你要明確一點,單片機是自動控制領域一個比較重要的控制晶元,它是用來控制系統電路的運行的。有的時候沒它不行,但它也不是單單只做單片機。所以電子技術你要知道,比如設計模擬電路,數字電路。在程序方面,雖然很多人都喜歡用C編寫程序,但匯編指令也是學單片機必須要掌握的,因為有的時候,涉及最底層的晶元操作時候,C語言不一定能完全勝任。不要怕麻煩,不要覺得匯編指令枯燥就不管它。
接下來說說怎麼學,先問問你的學長你們學校開什麼廠家的單片機的教程,一般中國的大學單片機課程都是教51系列單片機,但也有教其他單片機的。還有就是問問你們的老師有沒有組織什麼興趣組或參加電子比賽的。你可以先混進去跟老師和學長們學習。就算是旁觀也比你悶著頭自己學容易上手。
然後買本單片機教材,先把原理看一下,然後自己買個對應的單片機學習板(要跟你學的單片機種類相同哦),自己把書本上的程序都寫一次,燒寫進單片機里看看結果如何。然後把書本後的上機操作習題都寫出程序燒進單片機試試。
如果你們學校有參加電子比賽的,而老師也樂意讓你跟著學長後面學的,那是最好不過的,因為學校有資源,不用自己額外花錢。
有什麼成果!首先是能在你上單片機課之前就了解了這門課,如果學得快這時候你能根據自己的理解來嘗試做一個小小的自控系統了。以前我的學弟就是,還沒開課,就能跟我做數據採集系統了。他們那屆上完單片機課之後(大三上學期),他的畢業設計都做完了,並且把作品拿去參賽。這成為了他就業的資本了,因為要做電子方面的研發工作,一般都要求有經驗。應屆畢業生沒工作經驗怎麼辦,參加過比賽的學生一般比啥都沒作過的更有機會,參加過比賽作過東西出來的就是經驗。
㈧ 學單片機的前途有前途嗎,未來的工作會是什麼樣子的
哎呀,並不是我想嚇唬你的哇!我大四剛剛畢業,在富士康,CNSBG事業群,測試技術委員會,也是個研發部門。天天對著電腦,看的都要腦殘了,一個月累死累活不超過4.5K。單片機門檻低,提升雖然快,後期完全不給力,單會編程完全不行,工資不會超過10K的。你要是單片機+FPGA,那你就是個嵌入式高手,單片機+電源,那你就是個電源工程師,單片機+電路板,就是板級高手,只要是你是單片機+實用的什麼東西,都可以。單片機加單片機,真是一坨屎。每日以淚洗面啊。
這么說吧單片機只是一個工具,用來實現你先要的功能,就想是一把刻刀,有什麼價值,完全看你刻的什麼東西,你對你刻的東西有多深的體會。對你的專業有多深的感悟。否者你只能是IT農民工,別人把想法給你,你就刻吧,給你點工錢。累死累活。
樓上說的年薪十萬,的確有,和我一個辦公室的,我老闆,師14,一個月公司發80K當零花錢,年終再發1M以上,不過別人高手也不是高在單片機編程比你厲害,而是因為有專業上深刻的理解。到那水平了,就只走過來,說我要這功能,跟另一個人說我要這功能,最後所有的功能綜合起來就是一個巨大的模塊了,拿出去賣幾十萬上百萬很輕松的。
㈨ 學習MCS-51(具體以89C51為例)系列單片機的體會
http://www.38xian.com/index.aspx?menuid=4&type=articleinfo&lanmuid=19&infoid=685&language=cn
http://www.38xian.com/index.aspx?menuid=4&type=articleinfo&lanmuid=19&infoid=686&language=cn
又來看了一下,修改一下吧,加點文字
C語言學習總結
搞嵌入式的,大都用C語言寫代碼,本人從事單片機開發,也寫了不少的代碼,一直習慣用 if 、switch打天下,在定義數據結構的時候也只用到 字元型、整型、數組,位;很少用結構體,共用體,枚舉,因為咱C語言學得不好,和它們不熟,總感覺它們不那麼好招呼,重要的是自已覺得沒必要用上它們。隨著越來越多的積累,咱寫代碼的風格也在不斷的發生變化,從以前的喜歡將所有的函數及數據的定義寫在一個文件里到逐漸的將函數按功能模塊化、從以前的習慣直接在程序里寫常數到慢慢的開始用上宏來代替,咱編程的風格也逐漸開始正規化,編程水平也逐步提升,當然這些成績都源於咱不斷的學習,學習匠人的編程規范、學習herald的感悟設計、還有網上寫得非常出色的代碼以及STM32的固件函數庫,在咱的不斷領悟和思考下,總結了幾點關於C語言的用法,與大家共同分享。
一、 學習匠人的頭文件包含巧妙用法
當一個頭文件被多個C文件包含,且該頭文件中定義了這些C文件的公共變數,則在編譯的時候會出現重復定義,導致編譯通不過,通常我們會採用如下兩種做法來解決上述問題。
(為了讓問題表述得更清楚,我們假設兩個C文件C1,C2,C3,一個頭文件H1,C1,C2,C3有兩個公共變數V1和V2)
1、 在C1文件中定義變數V1和V2,在C2和C3文件中對V1,V2用extern聲明;
2、 在C1文件中定義變數V1和V2,在H1中對V1,V2用extern聲明,然後在C2和C3文件中包含H1;
很顯然,以上兩種方法都要對V1和V2書寫至少兩次,一次定義,一次外部聲明,且不是在同一文件下,這樣不利於管理和修改,有沒有一種方法可以讓這些公用的變數放在一個文件里,且只要書寫一次呢?
偶在二姨那裡無意中看到匠人的發帖,就是關於該問題的討論,現在我轉發一下,與大家同共分享。首先我們將要用到的公共變數全部書寫到com.h文件中,每一個變數在定義前加一個符號EXT_,當該頭文件被main.c函數包含時,定義EXT_為空,表示com.h中的變數在main.c中被定義,當被其它文件包含時,定義EXT_為extern,表示外部聲明,如:
Com.h文件:
//避免重復定義
#ifdef root
#define EXT_
#else
#define EXT_ extern
#endif
//全局變數
EXT_ u8 variable1; //該變數在三個C文件中都要用到
Main.c
#define root //在包含com.h前定義root
#include "com.h"
二、 用結構體的方式來定義匯流排或外設地址
當一個整體包含不同類型的多個成員時,通常用結構體來定義結構體變數,這樣內存會將這些變數按照遞增的方式分配到相鄰的地址(不對齊的地方會有填充),按「結構體名.成員名」的方式訪問結構體內的成員,這是訪問結構體變數的方式;但是還有一種指向結構體變數的指針,它可以將某個地址轉換成該結構體類型的指針,比如寄存器的定義:
(以下是摘自STM32固件函數庫,關於GPIO的定義)
typedef struct
{
vu32 CRL; //0
vu32 CRH; //偏移量4
vu32 IDR; //偏移量8
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
#define GPIOA_BASE ((u32)0x40010800) //GPIOA的基地址為0x40010800
#define GPIOA (GPIO_TypeDef *) GPIOA_BASE; //強制類型轉換為GPIO_TypeDef類型的指針
這樣在操作GPIOA的寄存器時只要這樣寫就可以了
讀: X="GPIOA-">CRL; 寫:GPIOA->CRL=X;
或 讀: X=(*GPIOA).CRL; 寫:(*GPIOA).CRL =X;
當然,要達到上述目的也可以採用如下方式
#define GPIOA_ CRL 0x40010800
#define GPIOA_ CRH 0x40010804
#define GPIOA_ IDR 0x40010808
#define GPIOA_ ODR 0x4001080C
#define GPIOA_ BSSR 0x40010810
#define GPIOA_ LCKR 0x40010814
很明顯,第一種書寫方式更加正規化,且當定義多個GPIO時,只要將其它GPIO的基地址強制轉換為該結構類型的指針即可。
再來看看一個定義外部匯流排的例子
typedef struct
{
vu8 CH375_DATA;
vu8 CH375_CMD; //偏移量1
} CH375_TypeDef;
#define CH375 ((CH375_TypeDef *) 0x6c000000)
CH375-> CH375_DATA=data; //往0x6c000000地址處寫數據
CH375-> CH375_CMD=cmd; //往0x6c000001地址處寫命令
怎麼樣,是不是方便多了。重要的是代碼的觀賞和可讀性提高了。
三、 用枚舉數據類型來定義特定的狀態
在實際問題中,有些變數的取值被限定在一個有限的范圍內。例如,一個函數在操作過程中會返回幾個特定的狀態:操作成功,操作失敗,忙,等等。如果我們直接在函數里用0,1和2來表示這三種狀態,有時偶爾會出現數值與實際狀態對不上號的情況,造成置狀態和判斷狀態錯誤,那麼我們可以在程序里用宏或者枚舉來事先定義好這些狀態。
如:用宏定義:
#define Sucess 0
#define Failure 1
#define Busy 2
用枚舉
typedef enum { Sucess = 0, Failure , Busy } FlagStatus;
四、 用共用體類型定義共享內存空間
共用體類型定義的數據是將多個成員共享同一內存空間,該空間的大小為最大成員的大小,其用法與結構體完全相同,但值得注意的是不能同時引用多個成員,在某一時刻只能使用其中之一成員。
在程序中如果全局變數比較多,包含幾個結構和數組,如果這些全部定義的話勢必會佔大量的內存,有可能還會導致單片機內存不夠,如果能讓幾個不同時用到的數組和結構變數共享一段內存,則能省出很多的內存空間。
比如以下輸入輸出若不同時進行,則可以共享同一段內存空間
union {
struct {
unsigned char Flag;
unsigned char Type;
unsigned char State;
unsigned long DataLen;
unsigned char Buffer[64];
}DataOut;
struct {
unsigned char Flag;
unsigned char Type;
unsigned char State;
unsigned long DataLen;
unsigned char Buffer[64];
} DataIn;
} BOC;
C語言博大精深,豐富多彩,用得好能很好的發揮它的作用,同時學習好的編程方法養成良好的編程習慣對於一名設計人員來說也是極其的重要,以上四點都是本人自身積累和學習的一些總結,希望能夠與大家一起共同交流,共同學習和提高。
個人珍藏的好文章,貼出來分享