說到單片機,應該是從興趣開始的吧。基于興趣,才能激發開發的靈感。學習單片機快一年多了,也漸漸找到了感覺,也讓自己更熱衷于開發了。
當初是以AVR單片機入門的,自己跟著視頻,慢慢開始的。剛開始可能感覺有些難,但堅持下來,還是有收獲的。 pic單片機也只是簡單了解。在學校里公選課選修過瑞薩單片機,接觸幾類不同的單片機后,發現都差不多,基本能熟悉一種,就看所在的實驗室和將來所在的公司用什么芯片了。從一種單片機轉型到另一種單片機不是難事。
當然在很多的教學中,都是以51單片機為主。在自己接觸51單片機的過程中,也有所感覺。這只是個人的一些意見和整理, 希望對讀者有所幫助。如果你是單片機高手,抱歉,你會覺得我這文章是在顯擺。如果你是初學愛好者,希望你可以作為參考一下。畢竟合適自己的才是最好的方法。有一個是必須的,如果要學好,那就是堅持。
這不是教大家怎么入門單片機,只是自己學習單片機過程中的一些整理。
一 單片機的入門技巧
1.所需基礎知識。
單片機開發,不僅僅只是一塊芯片那么簡單。當然至少得了解這塊芯片。 比如51芯片,雖然是51的內核,但很多公司都基于這個內核,開發自己的芯片。但只要懂得對51內核進行程序編寫,基本不成問題。比如常用的89c51,就有STC89c51,AT89c51,在keil開發的時候,常用AT89c51,當然還有什么90啊,52啊,都差不多。
如果你上過微機原理這個課,相信對你的單片開發有幫助,因為單片機的內部,也是由CPU和各種東西組成。如果懂多一些內部結構,對嵌入式開發更有幫助。既然是嵌入式,對內部結構理解了,才能更好的嵌入啊,雖然這個說法有點不太科學。還要有數電知識的基礎。畢竟你會接觸很多數字芯片。至少你在編程時,接觸的二進制,十六進制會比十進制還多。這點基礎還是要的。
哪怕你前面的基礎都沒有,但,至少,你也得有c的基礎。我所說的基礎,并不是要一定精通,至少,你要去開發的,你得去積累這些基礎。我建議可以去看看這個單片機教程 http://www.raoushi.com/mcuteach/252.html 里面介紹的比較通俗易懂. 很多東西并不一定要記住理解即可.
2.開發過程。
我認識的不少人都是自己在網上買個開發板回來,然后自己跟著視頻教程慢慢學。當時我自己也是這么做的。如果,你想節省成本,那么,你得要學會使用proteus這個仿真軟件了。當然,你總得有編程的工具吧。那么,keil這個軟件,應該是你的好幫手了。 這兩個軟件都可以在網上找到很多資源的。鑒于版權問題,以防被人肉,就不提供資源與鏈接。當我有權讓讀者知道至少還有這兩個軟件是單片機開發的好助手。如果還有興趣,protel這個軟件也是不可缺少的。
3.由內到外認識單片機
認識單片機呢,至少知道它有什么,怎么用。這樣你至少都可以開發了。至于它的原理,構造,有興趣可以作深入研究。比如51單片機,有四組8位端口,然后這8位端口都怎么用,以及復用功能只要了解,就可以開發了。還有定時計數器有幾個,對應的寄存器是什么,怎么用。中斷有幾個,還有串口通信等。這應該相對說內。要說外,可多了,先是簡單的LED,數碼管,開關,蜂鳴器,電機,LCD顯示器,點陣。ADC/DAC等。這些至少都是一般開發板或單片機書介紹所基本有的硬件。要說在外,那可是說不勝數,當是各種數字芯片,各種功能模塊,如果每一個都學的話,都不知道學到什么時候。你所要做的就是掌握學習的能力,知道它有什么功能,怎么用就好,原理,結構甚至可以不用了解。(當然,這是對初級開發的建議)
4. keil軟件的使用
剛開始的時候,也不知道keil這個軟件怎么使用。當時的做法就是從一個例子里打開,然后把程序刪掉, 輸入自己的練習程序,就可以生成hex,燒寫到單片機。使用多次后就會對keil這個軟件熟悉了。
但盡管使用多次后,我相信還是有部分人沒有考慮修改keil編程文字的字體,大小,顏色了。只是按默認的方式。當然默認的方式不影響編程開發,但,如果作些修改的話,看程序比較明朗一些。
點擊edit,選擇最后一項Configuration,彈出一個對話框。如下:
1.JPG (78.7 KB, 下載次數: 43)
下載附件
2013-7-26 15:06 上傳
2.JPG (87.14 KB, 下載次數: 38)
下載附件
2013-7-26 15:06 上傳
在這里就可以修改顯示文字的顏色,字體,大小了。這里的一個功能不只是這樣,更重要的是,可以選擇不同類型的編程文字顯示不同。
比如至少c語言的關鍵字顯示為藍色或其它你喜歡的顏色,至少你看到這類顏色,就知道這些是關鍵字了。預定義的顏色,數組顏色,字符串顏色等,改變這些顏色和大小,在看程序的時候,就比較直觀了,易于檢查和管理程序,養成開發好習慣。別小看了這點功能,這個會潛移默化的幫助開發,至少,我是這么認為。
5.proteus的使用。
如果英語不太好的同學,建議使用中文版的。不過,個人建議還是用英文版的好,畢竟用英文版的洋氣一些(這句只是我朋友的原話),用英語版呢用開發還是有好處的,由于好處太多,就不列出來占篇幅了。畢竟這具好處在網上百度一下還是很多版本的。知道里面有什么芯片,盡管拉出來使用,不在于乎原件個數及成本,這是用來學習的一個好處。可以到網上多找些例子來仿真看看,有一定熟悉了再自己設計仿真。
二,單片機開發的一些技巧
在開發上,如果掌握了一些技巧,可以縮短開發周期。或者說,讓開發變得更容易一些。
1. keil開發技巧
keil的開發,應該也差不多是程序的開發了吧。很多例子上都是選用at89c51,當然也不一寫。
(1),設置不同的數據類型顯示不同的顏色,字體,大小。方便自己看程序,也有一定的糾錯能力。如果你想寫一個關鍵字,發現它不是藍色的(不好意思,我這里使用的是藍色),就說明你輸入錯了,就可以及時糾錯了。 一些常用的語句或定義可以將其設置為用戶自定義關鍵字,這些顯示的時候,就可以方便自己的管理。
3.JPG (39.85 KB, 下載次數: 40)
下載附件
2013-7-26 15:08 上傳
4.JPG (7.79 KB, 下載次數: 41)
下載附件
2013-7-26 15:08 上傳
自己把main定義用用戶關鍵字后,就可以以關鍵字顯示出來,這樣一看就知道main在哪里了。我曾幫忙同學檢查過一個錯誤。程序無論怎么都不能正常運行,一堆代碼里,檢查了半個小時,后來才發現原來是main()寫成了mian()。
(2) .要學會使用keil c里面的庫函數
keil c里面的庫函數和我們常說的c語言函數庫差不多。里面定義了很多函數,我們就可以直接調用。學會使用這些庫,可以讓我們的代碼更優秀。
字符函數庫 ctype.h 里面是對字符的檢查與轉換等功能。內部函數庫, intrins.h ,里面有移位操作及空指令操作等。字符串函數庫,
string.h,相信用過c語言的,對這個函數庫不陌生了。還有數學函數庫,math.h相信大家不陌生了,特別是如果用到單片機開發一些游戲算法的,這些數學算法就離不開了。特別是產生隨機數的話,這個庫是不可缺少的。還有一些庫就不作介紹了。
(3) ,嘗試使用#error進行錯誤檢測
先看這個例子:
5.JPG (11.83 KB, 下載次數: 55)
下載附件
2013-7-26 15:08 上傳
6.JPG (18.77 KB, 下載次數: 45)
下載附件
2013-7-26 15:08 上傳
因為你的程序如果比較長的話,適當進行插入這些的錯誤檢測,可以讓你快速檢測出程序的錯誤。
2.要學會建立自己的庫。
開發的時候,經常會用到常用的模塊,而這些模塊是自己都用過的,每次都要重新寫相應的程序的話,還是比較麻煩的事 ,因此建立自己的函數庫呢,就是事半功倍了。比如常用到lcd1602,就可以建立一個lcd1602的庫,里面是對使用lcd1602引腳的定義, 初始化函數,寫指令函數, 就是和lcd有關的,都可以寫進去。這樣以后用到lcd1602的時候,就可以直接使用自己的庫,最多只是改一下引腳的定義就行了。當然還有各種延時函數啊,lcd12864,時鐘芯片,溫度傳感芯片,還有IIC通信,串口通信等都可以建立自己的庫,方便下次編程調用。
3, 學會使用通信協議模擬。有些芯片不支持IIC通信,SPI通信,CAN通信。但有些芯片模塊是使用這些協議,因此,學會使用協議模擬是很實用的。比如51單片機模擬IIC通信協議,去網上找騰IIC通信的例子,把有關IIC的函數,定義整理成一個庫,這就模擬了IIC協議,就可以直接和支持IIC協議的模塊使用了。畢竟芯片太多,我們不可能學完,要懂得用程序模擬其它功能。這樣編寫的程序,移植性就比較強。
4, 保留用過的數據
比如開發點陣的時候,就用過很多顯示數據,把這些代碼保留起來,下次編寫到類似程序的時候,就可以用到這些數據了。以及數碼管顯示數據(共陰,共極的)都備份一些,這樣用到數碼管的時候,就可以直接調用了。還有顯示屏開發的時候,用到的自定義圖形數據就更多了,如果每次都用取模軟件現場取模數據就比較費時了。
5 積累錯誤,把自己的錯誤記下來, 防止同樣的錯誤犯兩次。
以上僅是個人的一些整理,談不上建議。畢竟每個人都有自己的編程習慣。還有更多的技巧,算法,有時間再和大家交流交流。
|