初學單片機的誤區

  • 2020 年 3 月 17 日
  • 筆記

(1)很難記住繁雜的暫存器

暫存器不用全部記住,更不能死記硬背,小代玩單片機多年,還是只記住了最常用的幾個暫存器的名稱,具體的位設置的什麼,還是沒記住。在編程時需要配置暫存器的時候,可以上網找,或者書上找別人配置的程式,稍加修改,再或者查找晶片數據手冊,查看相關的暫存器的說明。死記硬背暫存器是最最下策的。每種單片機有幾十上百個的暫存器,學的單片機系列多了,你記得了那麼多來嗎?

(2)學單片機是用彙編語言還是C語言

除非是在校學生應付考試或者少數工作中繞不開彙編,否則學彙編就是浪費時間。彙編語言的效率高,程式碼編譯後小。彙編是直接操作硬體的,也就是直接操作單片機的暫存器,著就回到第一個問題上,記住暫存器的問題。彙編語言編程,你還得記住暫存器的物理地址。C語言在編程時候簡單,容易移植,容易看懂。再說現在大學生,誰不會C語言啊。特別是在寫演算法的程式段,C語言簡單快捷。缺點就是編譯的程式碼效率不高,程式碼大,但是現在的單片機的主頻和記憶體越來越大。根本沒必要去考慮這些問題,單片機資源足夠你用。小代一開始也學過彙編,也寫過程式碼,畢業設計時候寫的彙編有N多頁A4紙,就實現了LCD的驅動和測溫等一些簡單的操作。還用筆記下用到的暫存器,如果重複用到,那就麻煩了。調試時候會要命的。所以,在此小代還是推薦大家學習C語言,小代也是一直用C語言做項目。你一點彙編都不會根本無所謂,但你一點 C 語言都不會那你將來會吃苦頭。彙編寫程式程式碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到演算法方面的問題時,根本是麻煩的不得了。

(3)C語言很難學

上面推薦了C語言,大家又會說C好難學啊, C語言的課程我都掛科了。這裡小代說的C語言,特指單片機的C語言,和標準C語言有很大的差別。單片機的C語言,簡單、實用。跟著小代走,包你不超過兩節課就會C語言編程。你不用學指針,你不用學帶形參的函數,你不用學結構體,你不用學宏定義,你不用學文件操作,你也不用死記繁瑣的數據類型。你只要會以下5點:

1、5條指令語句:switch語句,if 語句,while語句,for語句,=賦值語句。

2、7個運算符:+, -, *, /, |, &, !(加 減 乘 除 或 與 非)

3、4個邏輯關係符:||, &&, !=, ==(或 與 不等 等於)

4、3個數據類型unsigned char, unsigned int, unsigned long(ps:不常用)

5、3個進位相互轉化,二進位,十六進位,十進位。(ps:不會也沒事,可以用計算器)

那麼單片機C語言你可以運用自如了。

小代學習C語言,其實就跟老師上了一節課,以後就是自學,通過多年的學習實踐經驗,總結出以上幾點,學會以上幾點基礎,玩遍單片機你都不會怕。自己從最簡單的程式寫起,慢慢的到現在,自己做項目。一開始只用if語句和for語句就把項目做出來了,沒有用指針,沒有用帶形參的函數等複雜的功能。再到後來才慢慢開始用C語言其他的高級功能,但是我發現C語言其他的高級功能,本質上都是用我前面列舉出來的最基本功能集合而成,只是書寫更加簡單方便了一點,編譯後的機器碼都大同小異。所以不會指針不會數組等高級功能你不用自卑,恰恰相反,當你會最簡單的幾個語句,就把這些高級功能的程式都做出來了,你才發現你對底層了解得更加透切,再學那些高級功能輕而易舉。當你裸機跑的程式都能夠協調得很好的時候,你才發現所謂高深的作業系統也不過如此,只要給你時間和金錢你也可以寫個作業系統來玩玩。

(4)不會計算時間,計算公式不會用

經常看到時間公式等於晶振,時鐘周期,指令周期和執行指令次數他們之間的乘除關係式。C語言編程,你寫的一句程式碼,在編譯後可以會編譯為好多句,這樣我們怎麼算呢。所以不用糾結也不用去記,也沒必要會算,大概了解一下就可以了。到後面需要用到計算的地方,小代會在影片中詳細講解。不管你對公式掌握得有多精確,你都不可能做出非常精確的時間。晶振也好,單片機也罷,在製造的時候和在運行的時候都會存在誤差,不是說我用的24M的晶振,它就肯定必須是24M,這在現在的製造業還不能實現,我想什麼時候也不可能實現。這個晶振頻率可以在以後我們下載程式的時候,下載軟體會自動測量,到時我們再說。想用單片機做一個非常精確的時間這種想法一開始就是錯的,不可能的。真想做一個比較精確的時間,比如電子時鐘,我們的測試常式中有。應該用外圍的時鐘晶片,而不是只是單片機。

(5)很難記住繁雜的各種通訊協議

什麼IIC,SPI,232串口通訊,CAN,USB等等。這些都是浮雲,你不用記那麼多,你只要理解兩種通訊方式就夠了,那就是串列通訊方式和並行通訊方式。不管世界上有多少種通訊協議,物理世界上只有這兩種通訊方式,其他各種名稱的通訊協議都基於此兩種方式演變而來。

(6)很難寫短小精悍的程式

初學者不要糾結於此。做項目開發,程式容量不是刻意追求的目標,程式多一點少一點沒關係,現在大容量的單片機品種非常多,容量不會是寸土寸金的事情,我們更加要關注程式的運行效率,可讀性和可修改性。

(7)很難選出適合自己的51單片機學習板

市場上各種學習板子非常繁多,小代可以負責人的說沒有一塊是適合初學者的。簡單說幾點原因,《1》單片機老套,某寶上還在清一色的STC89系列的單片機開發板,很便宜,為什麼,這晶片STC官方都放棄的了,現在賣的都是庫存,只要能出貨,就是賺錢,所以很便宜,便宜到你無法想像。《2》開發板的所有介面,所有電路都是在PCB板子上連接好的了,使用者不需要連任何線(下載線除外),這樣一來,對電路知識就一無所知,要知道,學單片機是需要硬體和軟體結合的,運用也是這樣。《3》其實算是第二的延伸,所有的教程都不會教你電路知識,這樣一來學完的結果就是在他開發板上,什麼都會(還有一各原因是有常式),出了開發板,要自己做個小東西,就懵逼了,連要什麼元件都不知道。《4》教程里編程的不規範,一味追求精簡,高效率,要知道,對初學者來說,會自己寫才是硬道理,會自己寫了,那就會自己設計,那才能談效率個精簡。

STC官方都出到STC15系列,STC8系列(後續肯定是STC32系列了)了,那我們還在學官方放棄的89系列,你說有意義嗎?不要貪圖一時的便宜,你現在省下了幾十塊上百塊錢,最後工作了老闆回省下上千元你的工資,不要問畢業了能拿多少錢一個元,首先要問問自己一個月能問老闆賺多少錢?

官方論壇已經上線,歡迎投稿拿紅包www.mcuhouse.com(複製到地址欄打開)