第一篇:單片機(jī)的學(xué)習(xí)心得
如何開始學(xué)習(xí)單片機(jī)
我并不是什么高手,只是自己在摸爬滾打7、8年后得到的一點(diǎn)點(diǎn)經(jīng)驗(yàn),說出來和大家分享罷了。這篇文章也就是個經(jīng)驗(yàn)只談,大家覺得合適就看看,不合適就不要看下去了。我呢,什么時候發(fā)現(xiàn)這片文章需要補(bǔ)充了,就繼續(xù)來完善,我想,也許用這篇文章,就可以指導(dǎo)你入門單片機(jī)。如果你真的是通過這片文章來學(xué)習(xí)單片機(jī)的,那就是我最大的欣慰了。
一、明確為什么要學(xué)單片機(jī)
如果你對單片機(jī)一無所知,是因?yàn)楣ぷ髟蚨黄热W(xué)習(xí)單片機(jī),那我建議你去買個開發(fā)板,照著附送的光盤里的程序運(yùn)行單片機(jī),這樣可以比較快的上手。
如果你是因?yàn)榕d趣去學(xué)習(xí)單片機(jī),那么恭喜你,你已經(jīng)站在的單片機(jī)的大門口,接下來只要稍稍努力一下就好了。
學(xué)習(xí)單片機(jī),學(xué)習(xí)arm,學(xué)習(xí)嵌入式系統(tǒng),學(xué)習(xí)這些東西并不是為了追趕潮流,學(xué)習(xí)他們只是增加自己的見識,提高自己的技術(shù)罷了,盲目的追求和無目的的學(xué)習(xí),最后只會讓自己一無所獲。
如果你是高中初中生,想學(xué)習(xí)單片機(jī),我建議你不要這么早開始學(xué)習(xí)。先學(xué)好數(shù)學(xué),物理,化學(xué)這三門課;如果可以的話,把英語、計(jì)算機(jī)基礎(chǔ)打好,然后再進(jìn)一步學(xué)好語文和政治。數(shù)學(xué)是學(xué)習(xí)理工科的技術(shù),單片機(jī)世界中的很多知識和物理化學(xué)結(jié)合的很緊密,所以這三門課是必學(xué)的; 學(xué)好英語是了能看懂一些外文資料,單片機(jī)也離不開計(jì)算機(jī),這些都可以輔助自己學(xué)習(xí)單片機(jī);至于為什么要學(xué)習(xí)語文和政治,學(xué)好這兩門課是為了讓你能清楚的表達(dá)出自己的問題和想法,很多人在發(fā)帖提問的時候不能清楚的表達(dá)自己的意思,導(dǎo)致別人給出錯誤的解決方法。
如果你是大一大二的學(xué)習(xí),那正是一個學(xué)習(xí)單片機(jī)的好時光。在大學(xué)的課余時間相對較多,環(huán)境也好,很適合去學(xué)習(xí)某一樣?xùn)|西。所以如果這個時候開始學(xué)習(xí)單片機(jī),等大學(xué)4年出來后,你的功底將比同齡人強(qiáng)很多。
有些人習(xí)慣上來就去買開發(fā)板,我認(rèn)為這樣做并不好。因?yàn)槭褂瞄_發(fā)板,練習(xí)的只有程序這一個部分,而對硬件的研究卻相對較少.所以我建議,從一些基礎(chǔ)的板焊起,這樣不但可以練習(xí)軟硬件,還可以學(xué)會一種調(diào)試開發(fā)板的方法,更可以練習(xí)焊接技術(shù),一舉而多得,何樂而不為呢?
二、態(tài)度問題
我一直主張學(xué)習(xí)一定要有個好的態(tài)度。學(xué)習(xí)單片機(jī),最忌諱心浮氣燥,遇到問題時在網(wǎng)上到處發(fā)帖求人,不去自己解決問題。
在剛開始學(xué)的時候,不要怕自己會犯錯誤,程序調(diào)不通,或者燒幾個單片機(jī),是非常正常的事情。基礎(chǔ)需要自己一點(diǎn)一點(diǎn)的積累,當(dāng)積累的一定的數(shù)量后,自然就會有質(zhì)的飛躍。但如果你遇到問題后就到處求人,自己不動腦筋的去解決問題,你就決不可能有質(zhì)的飛躍。而且,誰都有這么一個初學(xué)階段,沒什么大不了的基礎(chǔ)知識,在我們學(xué)習(xí)單片機(jī)的過程中十分重要。打好基礎(chǔ),就可以從一個點(diǎn)出發(fā),逐漸觸及其他知識。這也就是為什么網(wǎng)上有人認(rèn)為先學(xué)好51單片機(jī)再去學(xué)arm會更好。
三、開始學(xué)習(xí)前你需要了解的幾個概念
單片機(jī):單片機(jī)是個廣義的叫法,mcs51系列,96系列,arm系列,msp430系列等等,都可以叫單片機(jī)。單片機(jī)其實(shí)就是指那些把輸入輸出部分,控制器,運(yùn)算器等各個部件集成到一個芯片的ic。國外也叫SingalChip。至于把單片機(jī)叫做mcu,我覺得因?yàn)?1系列單片機(jī)多用于工業(yè)控制領(lǐng)域,所以叫micro control unit。
燒錄: 早期的單片機(jī),要執(zhí)行某個程序的話,需要從單片機(jī)以外的地方(一般是外部存儲器)獲取指令; 現(xiàn)代的單片機(jī)內(nèi)部集成了存儲器,執(zhí)行時可以直接從內(nèi)部存儲器獲取指令。而這些指令是如何寫進(jìn)內(nèi)部或外部存儲器中的呢?當(dāng)然是通過一種比較特殊的手段寫入,這個寫入過程就稱為燒錄
仿真: 單片機(jī)獲取了指令后,就會執(zhí)行下去,執(zhí)行過程中,你無法看到單片機(jī)內(nèi)部的狀態(tài)?,F(xiàn)在我有這樣一個設(shè)備,這個設(shè)備可以模擬單片機(jī)的全部功能,我通過這個設(shè)備執(zhí)行某個程序,這樣我就可以查看單片機(jī)內(nèi)部的狀態(tài)了,這個操作程為仿真。
燒錄器&仿真器: 燒錄器是用來給存儲器寫入程序用的,仿真器是用來模擬單片機(jī)運(yùn)行情況的下載線: 當(dāng)單片機(jī)內(nèi)部具有了存儲器后,通過燒錄器可以給它的內(nèi)部存儲器寫入程序;這種寫入方式是并行寫入的,也就是一次寫入一個字節(jié)。這樣會帶來一些不方便,所以就有廠家使用了串行寫入方式,也就是每次寫入一個位。上位機(jī)(PC)只需要和單片機(jī)連接5跟線就可以對單片機(jī)的內(nèi)部存儲器寫入程序了。這樣的5根線就組成了下載線。(為什么不是6根,可以看下文的解釋)。
明白了以上幾個概念后,再去學(xué)習(xí)單片機(jī)會更快。
如果你對上面的幾個概念感覺仍然很模糊,就請不要再去思考它們了,隨著你學(xué)習(xí)的深入,上面的幾個概念自然會明白的。
四、學(xué)習(xí)前的準(zhǔn)備工作
首先,你要準(zhǔn)備幾個必要的東西。
書: 一本好的書將指導(dǎo)自己如何開始學(xué)習(xí)。我推薦兩本:胡漢才的《單片機(jī)原理及其接口技術(shù)》 清華大學(xué)出版社;還有一本是何立民的《MCS51單片機(jī)接口技術(shù)》(好象是叫這個名字,很老的一本書了)。胡汗才的那本用來學(xué)習(xí),何教授那本是用來參考的工具: 電烙鐵和萬用表是必備的,除此之外是螺絲刀等其他小工具,都會用的到的,可能你還需要準(zhǔn)備一些萬用電路板,來焊接電路.如果想自己做電路板的話,可以買一些敷銅板.這些在電子市場都可以買到的.如果沒有條件到電子市場,可以考慮郵購,或者,寫信給我,我也可以幫忙購買的,當(dāng)然了,我?guī)兔徺I的話,價(jià)格和郵費(fèi)需要你自己掏了~~
軟件: keil(這個是編譯程序不可少的),Easy51Pro宇宙版(用來下載程序的).這兩個軟件在網(wǎng)上都可以下到.準(zhǔn)備好上面幾個東西后,再需要準(zhǔn)備的就是一個下載線和一個開發(fā)板。下載線的電路圖在這里可以找到(http:///new/Article_Show.asp?ArticleID=3)注意一下,圖中接了6根線,如果去掉那個244不用,只用5根線就可以了。那各244是用來保護(hù)并口的,所以最好加上,否則燒并口了不要怪我。
五、動工了。。
雖然是開始動工了,你的那個下載線準(zhǔn)備好了嗎? 沒有的話趕快先焊一根吧,這個可是相當(dāng)重要的哦
有了下載線后,你需要下面幾個元件
1、一片AT89S51單片機(jī),大概8塊錢左右
2、一個12MHz或11.0592MHz的晶振。
3、2個22pF的電容
4、一個10uf的電容和一個10k的電阻
5、一小塊電路板,一個插針
總的成本大概是在15塊,怎么樣,區(qū)區(qū)15塊就可以讓你進(jìn)如單片機(jī)的世界,是不是很劃算。
呵呵,不過別想的那么好,開始是很便宜,但想深入學(xué)習(xí)就要做長期打算了,成本有時是很高的哦~
準(zhǔn)備好上面的東西后,按照下面的電路圖焊好電路板
那個J1就是用和下載線相連的,注意不要接錯
啟動Keil,建立工程,注意輸出格式是hex文件,輸入下面的程序
mov p1,0x55;
jb $
end
不知道什么意思不要緊,先這么做著吧。編譯后,你就可以得到hex文件(如何使用keil,請先從網(wǎng)上看相關(guān)的文章吧)
焊好之后,啟動Easy51Pro,(如何使用就不用我這里羅嗦了),設(shè)置編程器類型為Atmel ByteBlaster下載線。打開剛才你編譯得到的hex文件,然后點(diǎn)“自動完成” 就可以了
以上的操作,就稱之為下載。如果順利的話,Easy51Pro會提示成功,然后用萬用表依次測量P1口,你會得到 高-低-高-低-高-低-高-低這樣的電平。
如果Easy51Pro提示有問題,或你得不到這樣的輸出結(jié)果,那就需要進(jìn)行檢查了。
六、焊的板不能工作。。
一般來說,按照上面的電路圖,只要焊的沒有問題,一般都能正常工作。但也不能排除
少數(shù)情況。我把可能出現(xiàn)的情況列出來,解決辦法不用說大家也該知道了。1-4表示了一個檢測順序,一般來說,上一個檢測點(diǎn)對下一個檢查點(diǎn)是有影響的。
1、電源。這個電路的工作電壓范圍是3.3-7v之間,低了單片機(jī)就不工作了,高了就要燒單片機(jī)了。一般都是5v供電的2、EA線是否接高? 由于我們使用的單片機(jī)內(nèi)部的存儲器,所以這根線一定要接高
3、斷開電源,萬用表的黑標(biāo)筆接地,紅標(biāo)筆接在9引腳上,然后上電,看是否能測量到一個大于0.5v的瞬間電壓。這個瞬間電壓是給單片機(jī)復(fù)位用的,沒有這個復(fù)位信號,單片機(jī)是不會開始工作的4、給電路供電后,萬用表的黑標(biāo)筆接地,紅標(biāo)筆依次測量18、19兩個引腳,有沒有測量到2v左右的電壓? 如果沒有,表示晶振部分沒有起振,有的話才算單片機(jī)的時鐘部分開始工作了。
檢查完上面這幾個地方,對于我們焊的這個板,所有可能出現(xiàn)的問題就都被排除了。如果這樣還不能正常的燒錄程序或執(zhí)行程序,那很有可能你的那個單片機(jī)掛掉了,換一個來試試。
這里有個小技巧:如果單片機(jī)沒有正常工作的話,使用Easy51pro的時候,它會提示燒錄不成功,這個時候你就需要開始檢查焊的那個電路板了,還有你焊的那個下載線,都需要仔細(xì)檢查。而我們的那個小程序,這個時候還不需要檢查的。
現(xiàn)在,我來解釋一下那個小程序的意思
mov p1,0x55;就是往P1口送0x55數(shù)據(jù),所以測量出來的結(jié)果就是高-低-高-低-高-低-高-低,這種交替電平
jb $; 這句是讓單片機(jī)反復(fù)執(zhí)行這條指令,這樣單片機(jī)就不會去執(zhí)行其他程序了,也就是常說的“停機(jī)”
end;表示程序結(jié)束
上面進(jìn)行的操作就是一個單片機(jī)初學(xué)者最開始做的東西.因?yàn)榈饶銠z查到有那樣的交替電平后,表示你自己的單片機(jī)學(xué)習(xí)的平臺已經(jīng)搭建好了,剩下的操作是要擴(kuò)充這個平臺,利用這個平臺做實(shí)驗(yàn),以及修改這個平臺等.當(dāng)然,上面的操作完成了最基礎(chǔ)的入門.如果你想使自己能更加的入門,則至少要完成下面的四個實(shí)驗(yàn):
1.流水燈實(shí)驗(yàn).其實(shí)就是在上面的操作上做一些改進(jìn).做這個實(shí)驗(yàn)是為了熟悉一下單片機(jī)的io口操作.另外,可以給自己一個感性上的認(rèn)識,到底單片機(jī)執(zhí)行程序的速度有多快.2.行列鍵盤.這是使用單片機(jī)做為輸入用的一個典型程序.雖然有很多通用的鍵盤掃描程序,但如果自己能設(shè)計(jì)出一個完美的程序來,則說明自己具有了一定的編程功底.3.秒表.這個是利用單片機(jī)定時器的一個實(shí)驗(yàn).做這個實(shí)驗(yàn)是為了熟悉單片機(jī)的內(nèi)部功能單元以及單片機(jī)的寄存器.4.串口通訊.這個是一個擴(kuò)展的實(shí)驗(yàn),用這個實(shí)驗(yàn)可以完成單片機(jī)和電腦通訊的操作,很值得
練一練.同時,也能反映出你搭建的平臺是否夠穩(wěn)定.做完上面的實(shí)驗(yàn)后,自己就會具有一定的開發(fā)能力了.接下來根據(jù)的實(shí)際做些小東西,多練練就好了
七、如何學(xué)好單片機(jī)
也許,學(xué)單片機(jī)學(xué)久后,就會發(fā)現(xiàn),自己有很長一段時間沒有任何長進(jìn)了,甚至發(fā)現(xiàn)自己好象已經(jīng)無法提高了,好象碰到什么問題拿單片機(jī)都能解決,但實(shí)際做的時候卻有做不出來。如果碰到這樣的情況,你就要稍微注意了。你需要提高自己了。
單片機(jī)是一門很廣的學(xué)問,用佛教的一句話就是“ 至簡至深 ”。單片機(jī)很簡單,總共才40個引腳,程序也好寫。但單片機(jī)也很復(fù)雜,通過單片機(jī)可以做無限的擴(kuò)展。現(xiàn)代的任何一種微處理器,都會有51單片機(jī)的思路。
想學(xué)好單片機(jī),我覺得至少要做到以下幾點(diǎn)
1、養(yǎng)成一個好的心態(tài)。解決了難題不要驕傲,遇到困難不能放棄;不去求人要程序,也不要自己炫耀自己的技術(shù),等等
2、多看書,多動手。書要廣泛的看,不要只看和單片機(jī)相關(guān)的書,而是和電子相關(guān)的書都要看,比如c++,vc,vb,TCPIP,Internet, 數(shù)據(jù)結(jié)構(gòu),模擬電路,數(shù)字電路,english 等等。因?yàn)檫@些東西都是和你所學(xué)的東西相關(guān)的,看的書越多,你解決問題的思路就會越廣。練習(xí)的話可以利用你手邊的資源來操作。如果自己多注意一下的話,會發(fā)現(xiàn)自己身邊有很東西可以拿來學(xué)習(xí)單片機(jī)的3、多和其他人交流。多聽取其他人的意見。即使對方說的不對,你也拿來和自己的思路對比一下,看看哪樣做會更好。
4、多上網(wǎng),從網(wǎng)上獲取知識。多去論壇,多去解決別人的問題。
七、后記
在論壇的時候,總是看到有人發(fā)帖,詢問如何開始學(xué)單片機(jī),如何學(xué)好單片機(jī)。所以總想寫這么一篇文章,給初學(xué)者一個參考。寫完這片文章的時候,回想起自己剛開始學(xué)電子技術(shù)的情況,覺得這么多年來,走了很多彎路。也許,就是因?yàn)檫@些彎路,才培養(yǎng)了自己的技術(shù)。我覺得,學(xué)單片機(jī)也好,學(xué)其他任何一門課也好,總也擺脫不了那種老套的思路:理論加實(shí)踐。理論知識學(xué)到一定程度的時候,一定需要實(shí)踐來驗(yàn)證。學(xué)單片機(jī)的時候,動手非常重要,光看書的話,完全可以把人看暈,并讓人產(chǎn)生幻覺,學(xué)單片機(jī)怎么這么難啊。而一旦自己做進(jìn)來,就會發(fā)現(xiàn)這里面的趣味是無窮的,每一個部分都會讓人非常想琢磨到底。這也許就是單片機(jī)這門學(xué)科的魅力所在。
第二篇:單片機(jī)學(xué)習(xí)心得
單片機(jī)學(xué)習(xí)心得
一直想寫一個帖子,將自己學(xué)習(xí)單片機(jī)的經(jīng)歷、經(jīng)驗(yàn)和方法總結(jié)一下,今天終于動手寫了,呵呵,這是我學(xué)習(xí)單片機(jī)的經(jīng)驗(yàn)、心得、方法。希望對大家學(xué)習(xí)單片機(jī)有所幫助。
經(jīng)常在群、論壇里看到有人問:怎么學(xué)單片機(jī)?也??吹接腥苏f學(xué)了好幾個月可就是沒有什么進(jìn)展。當(dāng)然,受限于每個人受到的教育水平不同和個人理解能力的差異,學(xué)習(xí)起來會有快慢之分,但我感覺最重的就是學(xué)習(xí)方法。一個好的學(xué)習(xí)方法,能讓你事半功倍,這里說說我學(xué)習(xí)單片機(jī)的經(jīng)歷和方法。
05年的時候,因?yàn)橹谱鱂M發(fā)射采用了BH1415的芯片,需要用到單片機(jī)控制,所以開始接觸使用單片機(jī),雖然以前讀書時作為一門功課學(xué)過,不過也快丟荒了10年了,基本上都忘光了,也算是從頭學(xué)起了吧。我當(dāng)時是買了一塊實(shí)驗(yàn)板,很簡單的功能,比論壇實(shí)驗(yàn)板還要少功能,還有一個仿真器,也是比較簡單的,SST芯片的。然后開始從大家都知道的流水燈寫起,萬事開頭難,第一個程序基本上就抄人家的,翻查了一份快速入門的學(xué)習(xí)資料,寫下第一個程序。然后,在仿真機(jī)是單步的看運(yùn)行結(jié)果,從每一步執(zhí)行,都硬件上反應(yīng)出來的效果,很快,對單片機(jī)的運(yùn)作有了一個非常感性的認(rèn)識,這跟只看書然后自己想象運(yùn)行是完全兩碼事。然后,是進(jìn)一步的其它程序?qū)W習(xí),一個月時間,基本上已經(jīng)熟悉了51的各種硬件資源。把流水燈,數(shù)碼管動態(tài)掃描,中斷等等的學(xué)習(xí)了,然后就是寫綜合性的程序,也就是我發(fā)在論壇里的時鐘。通過這個程序的編寫,使自己的編程水平有了很大的飛躍。之后,就是逐步學(xué)習(xí)編寫更多的程序,各種外圍器件的控制等等,通過編寫程序使自己不斷的提高。在學(xué)過匯編之后,我又轉(zhuǎn)到了C語言學(xué)習(xí),因?yàn)橐郧皼]有學(xué)習(xí)過C語言,一切都很陌生,所以自己沿用了學(xué)習(xí)匯編的方法,大約花了3天功夫基本就對C語言有了初步的了解,然后就是嘗試寫上面所說的時鐘,以匯編程序的思路作為參考,以C語言來編寫,花了幾天功夫完成了這一程序,也實(shí)現(xiàn)了從匯編編程為主到C編程為主的轉(zhuǎn)變。然后,就是以C語言編寫外圍器件的控制程序,以此來熟悉C的編程風(fēng)格,一直到現(xiàn)在,基本上就是C語言編程,匯編已經(jīng)是作為調(diào)試程序的輔助。
下面我概括了幾點(diǎn)我的學(xué)習(xí)經(jīng)驗(yàn)和心得體會:
1、萬事開頭難、要勇敢邁出第一步。開始的時候,不要老是給自己找借口,說KEIL不會建項(xiàng)目啦、沒有實(shí)驗(yàn)板啦之類的。遇到困難要一件件攻克,不會建項(xiàng)目,就先學(xué)它,這方面網(wǎng)上教程很多,隨便找找看一下,做幾次就懂了。然后可以參考別的人程序,抄過來也無所謂,寫一個最簡單的,讓它運(yùn)行起來,先培養(yǎng)一下自己的感覺,知道寫程序是怎么一回事,無論寫大程序還是小程序,要做的工序不會差多少,總得建個項(xiàng)目,再配置一下項(xiàng)目,然后建個程序,加入項(xiàng)目中,再寫代碼、編譯、生成HEX,刷進(jìn)單片機(jī)中、運(yùn)行。必須熟悉這一套工序。個人認(rèn)為,一塊學(xué)習(xí)板還是必要的,寫好程序在上面運(yùn)行一下看結(jié)果,學(xué)習(xí)效果會好很多,仿真器就看個人需要了。單片機(jī)是注重理論和實(shí)踐的,光看書不動手,是學(xué)不會的。
2、知識點(diǎn)用到才學(xué),不用的暫時丟一邊。厚厚的一本書,看著人頭都暈了,學(xué)了后面的,前面的估計(jì)也快忘光了,所以,最好結(jié)合實(shí)際程序,用到的時候才去看,不必說非要把書從第一頁看起,看完它才來寫程序。比如你寫流水燈,完全就沒必要看中斷的知識,專心把流水燈學(xué)好就是了,這是把整本書化整為零,一小點(diǎn)一小點(diǎn)的啃。
3、程序不要光看不寫,一定要自己寫一次。最開始的時候,啥都不懂,可以抄人家的程序過來,看看每一句是干什么用的,達(dá)到什么目的,運(yùn)行后有什么后果,看明白了之后,就要自己寫一次,你會發(fā)現(xiàn),原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距。。當(dāng)你自己能寫出來的時候,說明你就真的懂了。。
4、必須學(xué)會掌握調(diào)試程序的方法。不少人寫程序,把代碼寫好了,然后一運(yùn)行,不是自己想要的結(jié)果,就暈了,然后跑到論壇上發(fā)個帖子,把程序一貼,問:為什么我的程序不能正常運(yùn)行?然后就等別人來給自己分析。這是一種很不好的行為,應(yīng)該自己學(xué)會發(fā)現(xiàn)問題和學(xué)會如何解
決問題。這就需要學(xué)習(xí)調(diào)試程序的方法,比如KEIL里,可以下斷點(diǎn)啦,查看寄存器內(nèi)容等等,這些都是調(diào)試程序的手段,當(dāng)你發(fā)現(xiàn)你寫的程序運(yùn)行結(jié)果和你想象中不一樣的時候,你可以單步,也可以下斷點(diǎn),然后跟蹤,查看各相關(guān)寄存器內(nèi)容,看看程序運(yùn)行過中是不是有什么偏差,找出影響結(jié)果的地方,改正過來。這一個過程非常重要,通過程序的排錯,你可以學(xué)到的知識是書上得不到的。
5、找到解決問題思路比找到代碼更重要。我們用來控制周邊器件,達(dá)到我們想到的目的,這是一個題目,而如何寫出一個程序,來控制器件按你想要的結(jié)果去運(yùn)作,這個就是解題的思路。要寫程序,就得先找到解決問題的思路,你學(xué)會找出這個解題思路,比你找到代碼更為重要。不少人很喜歡找人家的代碼,有的人甚至有了代碼就直接復(fù)制到自己的程序中,可以說,這不是一種學(xué)習(xí)的態(tài)度,無助于你編程水平的提高。我?guī)缀醪辉趺纯慈思业拇a,多數(shù)時候是看別人的思路,有方框圖最好,沒有的話文字說明也可以,要從代碼中看出別人處理問題的思路,是相當(dāng)困難的,特別是大型的程序,看起來是非常的累人,所以現(xiàn)在我也明白了,以前讀書時說的程序流程圖很重要,現(xiàn)在算是知道了。當(dāng)你知道一個問題怎么去解決了,那么剩下的只是你安排代碼去完成,這就已經(jīng)不是什么問題了。舉個例子:數(shù)碼管動態(tài)掃描,沒寫過的初學(xué)者可能搞不清是怎么回事,其實(shí),就是分時讓每一時間段時只控制一只數(shù)碼管顯示數(shù)字,幾只數(shù)碼管輪流顯示,由于速度很快,人眼的看起來是全部數(shù)碼管都亮的。明白是這么一回事,事情就好辦了,剩下的事情,無非是你安排讓一只只數(shù)碼管輪流顯示出相應(yīng)的數(shù)值。顯示數(shù)字,然后延時一下,再下一只顯示數(shù)字,延時,知道是這樣,我們實(shí)際程序上只要做到這樣就可以:往段口送段碼,然后打開位選顯示一只,延時一下,再關(guān)閉位選,再送出段碼,再打開另一只位選..僅此而已。有了解決問題的思路,我們就能問題拆分開來,然后逐一的解決,如果動態(tài)掃描的原理都沒懂,不知道如何做,那么這個程序是怎么也寫不出來的。
6、開動腦筋,運(yùn)用多種方法,不斷優(yōu)化自己的程序。想想用各種不同方法來實(shí)現(xiàn)同一功能。這是一個練習(xí)和提高的過程,一個問題,你解決了,那么你再想想,能不能換種寫法,也可以實(shí)現(xiàn)同一功能,或者說,你寫出來的代碼,能不能再精簡一點(diǎn),讓程序執(zhí)行效率更高,這個過程,就是一個進(jìn)步的過程。很多知識和經(jīng)驗(yàn)的獲得,并不是直接寫在書讓你看就可以得到的,需要自己去實(shí)踐,開動腦筋,經(jīng)驗(yàn)才能得到積累,編程水平才能有所提高。
7、看別人的代碼,學(xué)習(xí)人家的思路。這個在學(xué)習(xí)初期是很有用,通過看別人的代碼,特別是有多年編程經(jīng)驗(yàn)的人寫出的具有一定水平的代碼,可以使自己編程水平得到迅速的提高,同時,也可以結(jié)合別人的編程手法,與自己的想法融合在一起,寫出更高水平的代碼,從中得到進(jìn)步。但要注意,切忌將學(xué)習(xí)變成抄襲,更不是抄襲完了就認(rèn)為自己學(xué)會了,這樣做只會使你退步。
8、嘗試編寫一下綜合應(yīng)用的程序。從流水燈學(xué)起,到動態(tài)掃描,再到中斷,那么,你可以試試寫一下時鐘這種綜合性應(yīng)用的程序,不要小看時鐘,要寫好它不是一件容易的事情,它包括了單片機(jī)大部分的知識,比如有按鍵(IO讀?。?、動態(tài)掃描(IO輸出)、中斷等,如何協(xié)調(diào)好各功能模塊正常工作,才是編程者需要學(xué)習(xí)的地方,當(dāng)你單獨(dú)寫一個功能的時候,比如按鍵讀取,你可能感覺很容易,因?yàn)槟愕某绦蛏兑膊蛔?,只是讀按鍵。但把它和其它功能混合在一起,如何在整個程序運(yùn)行中使每一部分都正常工作,這就不是寫一個按鍵讀取這么容易的事情,功能模塊之間有可能會互相影響,比如你需要讓數(shù)碼管既能顯示,又要去處理按鍵讀取,怎么使這兩部分都正常工作,這就是一個協(xié)調(diào)過程。當(dāng)你有了這個處理協(xié)調(diào)能力,你就算是入門了。
9、著重于培養(yǎng)解決問題的能力,而不是具體看自己編寫了多少代碼或者做過什么。“學(xué)單片機(jī)重點(diǎn)在于學(xué)習(xí)解決問題的思路,而不是局限于具體的芯片類型和語言”這一直是我的座右銘,是我學(xué)單片機(jī)多年來感悟出來的。經(jīng)??吹接腥苏f“你會驅(qū)動XX芯片,真牛啊”“你搞過XX項(xiàng)目,真厲害”之類的話,其實(shí)這是非常片面的,搞過XX芯片,搞過XX項(xiàng)目,只能說明你做過這一項(xiàng)目,它只是你的業(yè)績,并不是代表能力就一定高。真正的能力應(yīng)該是:“遇到?jīng)]有解決過的問題或器件,能利用自己已學(xué)的知識,迅速找到解決問題的方法?!边@個才是能力。寫程序的過程就是一個創(chuàng)造的過程,幾乎沒有完全一樣的項(xiàng)目,每次你遇上的幾乎都不相同,所以你擁有的必須是你面對新項(xiàng)目時的創(chuàng)造能力,而不是標(biāo)榜著你以往做過多少項(xiàng)目。當(dāng)然,業(yè)績也能從另一側(cè)面反映你的經(jīng)驗(yàn)和水平。
10、如果有可能,多學(xué)習(xí)計(jì)算機(jī)專業(yè)的知識,比如數(shù)據(jù)結(jié)構(gòu)等。這些是你解決問題的基礎(chǔ)知識,你把這些知識應(yīng)用得越好,就會發(fā)現(xiàn)越容易找到解決問題的方法,這就是為什么一個學(xué)計(jì)算機(jī)專業(yè)的人編的程序和一個非計(jì)算機(jī)專業(yè)的人編的程序有差異的原因。也是一個菜鳥進(jìn)軍到高手所要配備的知識。如果我們把編程分為宏觀編程和微觀編程,那么微觀編程就是寫具體的代碼,比如控制某某器件的語句;而宏觀編程就是如何對整個程序進(jìn)行布局、安排,使功能模塊以你想要的方式去運(yùn)行,得出你想要的結(jié)果。如前所說“會控制XX器件”這些只能算是微觀編程,能做到這一步還只能算是菜鳥級別,如果面對一個新的器件,你心里沒底,沒把握去寫這個控制程序,那說明你還是一個初級的菜鳥。當(dāng)你有了一定的編程經(jīng)驗(yàn),控制過相當(dāng)數(shù)量的器件之后,你就會發(fā)現(xiàn),控制器件這些工作都是相似的、重復(fù)的工作,體現(xiàn)不出編程的水平,最多也是寫得好與不好的差別,只能算是一些小技巧的應(yīng)用。而對整個程序進(jìn)行布局、安排這些才是最頭痛的事情,能達(dá)到宏觀編程和微觀編程都做好才是真正的高手。對于規(guī)模越大的程序,越能體現(xiàn)出這一點(diǎn)。
11、面對一個新項(xiàng)目時,多自己開動腦筋,不要急于找別人的程序。有不少人面對一個新項(xiàng)目時,第一步想到的就是網(wǎng)上找別人寫過的代碼,然后抄一段,自己再寫幾句,湊在一起就完成任務(wù),這雖然可能是省時間,但絕對不利你的學(xué)習(xí)。當(dāng)你接到一個新項(xiàng)目時,應(yīng)該先自己構(gòu)思一下整個程序的架構(gòu),想想如何來完成,有可能的話,畫一個流程圖,簡單的可以畫在腦子里,對程序中用到的數(shù)據(jù)、變量有一個初步的安排,然后自己動手去寫,遇到實(shí)在沒辦法解決的地方,再去請教別人,或看別人是怎么處理的,這樣首先起碼你自己動過腦想過,自己有自己的思路,如果你一開始就看別人的程序,你的思維就會受限在別人的思維里,自己想再創(chuàng)新就更難了,這樣你自己永遠(yuǎn)也沒辦法提高,因?yàn)槟闶亲咴趧e人的影子里。
12、多利用網(wǎng)絡(luò)的搜索,學(xué)會提問題。一般來說,學(xué)習(xí)過程中,你遇上的問題,前人們多數(shù)也有遇上的,所以如果有什么不懂,在自己解決不了的時候,最好先到網(wǎng)上搜索一下,看能不能找到答案,找不到再到論壇里發(fā)問,發(fā)問也要有目的性,盡量簡單明了的描述問題,讓幫助你的人可以用最少的時間就看懂你說什么,畢竟人家?guī)椭闶敲赓M(fèi)的,時間也是有限的。
以上就是我學(xué)習(xí)單片機(jī)的經(jīng)歷和心得體會,希望對大家會有幫助,說得有不好或不對的地方歡迎大家批評指正。
第三篇:單片機(jī)學(xué)習(xí)心得
篇一:單片機(jī)學(xué)習(xí)心得
一直想寫一個帖子,將自己學(xué)習(xí)單片機(jī)的經(jīng)歷、經(jīng)驗(yàn)和方法總結(jié)一下,今天終于動手寫了,呵呵,這是我學(xué)習(xí)單片機(jī)的經(jīng)驗(yàn)、心得、方法。希望對大家學(xué)習(xí)單片機(jī)有所幫助。
經(jīng)常在群、論壇里看到有人問:怎么學(xué)單片機(jī)?也??吹接腥苏f學(xué)了好幾個月可就是沒有什么進(jìn)展。當(dāng)然,受限于每個人受到的教育水平不同和個人理解能力的差異,學(xué)習(xí)起來會有快慢之分,但我感覺最重的就是學(xué)習(xí)方法。一個好的學(xué)習(xí)方法,能讓你事半功倍,這里說說我學(xué)習(xí)單片機(jī)的經(jīng)歷和方法。
05年的時候,因?yàn)橹谱鱂M發(fā)射電路采用了BH1415的芯片,需要用到單片機(jī)控制,所以開始接觸使用單片機(jī),雖然以前讀書時作為一門功課學(xué)過,不過也快丟荒了10年了,基本上都忘光了,也算是從頭學(xué)起了吧。我當(dāng)時是買了一塊實(shí)驗(yàn)板,很簡單的功能,比論壇實(shí)驗(yàn)板還要少功能,還有一個仿真器,也是比較簡單的,SST芯片的。然后開始從大家都知道的流水燈寫起,萬事開頭難,第一個程序基本上就抄人家的,翻查了一份快速入門的學(xué)習(xí)資料,寫下第一個程序。然后,在仿真機(jī)是單步的看運(yùn)行結(jié)果,從每一步執(zhí)行,都硬件上反應(yīng)出來的效果,很快,對單片機(jī)的運(yùn)作有了一個非常感性的認(rèn)識,這跟只看書然后自己想象運(yùn)行是完全兩碼事。然后,是進(jìn)一步的其它程序?qū)W習(xí),一個月時間,基本上已經(jīng)熟悉了51的各種硬件資源。把流水燈,數(shù)碼管動態(tài)掃描,中斷等等的學(xué)習(xí)了,然后就是寫綜合性的程序,也就是我發(fā)在論壇里的時鐘。通過這個程序的編寫,使自己的編程水平有了很大的飛躍。之后,就是逐步學(xué)習(xí)編寫更多的程序,各種外圍器件的控制等等,通過編寫程序使自己不斷的提高。在學(xué)過匯編之后,我又轉(zhuǎn)到了C語言學(xué)習(xí),因?yàn)橐郧皼]有學(xué)習(xí)過C語言,一切都很陌生,所以自己沿用了學(xué)習(xí)匯編的方法,大約花了3天功夫基本就對C語言有了初步的了解,然后就是嘗試寫上面所說的時鐘,以匯編程序的思路作為參考,以C語言來編寫,花了幾天功夫完成了這一程序,也實(shí)現(xiàn)了從匯編編程為主到C編程為主的轉(zhuǎn)變。然后,就是以C語言編寫外圍器件的控制程序,以此來熟悉C的編程風(fēng)格,一直到現(xiàn)在,基本上就是C語言編程,匯編已經(jīng)是作為調(diào)試程序的輔助。
下面我概括了幾點(diǎn)我的學(xué)習(xí)經(jīng)驗(yàn)和心得體會:
1、萬事開頭難、要勇敢邁出第一步。開始的時候,不要老是給自己找借口,說KEIL不會建項(xiàng)目啦、沒有實(shí)驗(yàn)板啦之類的。遇到困難要一件件攻克,不會建項(xiàng)目,就先學(xué)它,這方面網(wǎng)上教程很多,隨便找找看一下,做幾次就懂了。然后可以參考別的人程序,抄過來也無所謂,寫一個最簡單的,讓它運(yùn)行起來,先培養(yǎng)一下自己的感覺,知道寫程序是怎么一回事,無論寫大程序還是小程序,要做的工序不會差多少,總得建個項(xiàng)目,再配置一下項(xiàng)目,然后建個程序,加入項(xiàng)目中,再寫代碼、編譯、生成HEX,刷進(jìn)單片機(jī)中、運(yùn)行。必須熟悉這一套工序。個人認(rèn)為,一塊學(xué)習(xí)板還是必要的,寫好程序在上面運(yùn)行一下看結(jié)果,學(xué)習(xí)效果會好很多,仿真器就看個人需要了。單片機(jī)是注重理論和實(shí)踐的,光看書不動手,是學(xué)不會的。
2、知識點(diǎn)用到才學(xué),不用的暫時丟一邊。厚厚的一本書,看著人頭都暈了,學(xué)了后面的,前面的估計(jì)也快忘光了,所以,最好結(jié)合實(shí)際程序,用到的時候才去看,不必說非要把書從第一頁看起,看完它才來寫程序。比如你寫流水燈,完全就沒必要看中斷的知識,專心把流水燈學(xué)好就是了,這是把整本書化整為零,一小點(diǎn)一小點(diǎn)的啃。
3、程序不要光看不寫,一定要自己寫一次。最開始的時候,啥都不懂,可以抄人家的程序過來,看看每一句是干什么用的,達(dá)到什么目的,運(yùn)行后有什么后果,看明白了之后,就要自己寫一次,你會發(fā)現(xiàn),原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距……當(dāng)你自己能寫出來的時候,說明你就真的懂了。
4、必須學(xué)會掌握調(diào)試程序的方法。不少人寫程序,把代碼寫好了,然后一運(yùn)行,不是自己想要的結(jié)果,就暈了,然后跑到論壇上發(fā)個帖子,把程序一貼,問:為什么我的程序不能正常運(yùn)行?然后就等別人來給自己分析。這是一種很不好的行為,應(yīng)該自己學(xué)會發(fā)現(xiàn)問題和學(xué)會如何解決問題。這就需要學(xué)習(xí)調(diào)試程序的方法,比如KEIL里,可以下斷點(diǎn)啦,查看寄存器內(nèi)容等等,這些都是調(diào)試程序的手段,當(dāng)你發(fā)現(xiàn)你寫的程序運(yùn)行結(jié)果和你想象中不一樣的時候,你可以單步,也可以下斷點(diǎn),然后跟蹤,查看各相關(guān)寄存器內(nèi)容,看看程序運(yùn)行過中是不是有什么偏差,找出影響結(jié)果的地方,改正過來。這一個過程非常重要,通過程序的排錯,你可以學(xué)到的知識是書上得不到的。
5、找到解決問題思路比找到代碼更重要。我們用單片機(jī)來控制周邊器件,達(dá)到我們想到的目的,這是一個題目,而如何寫出一個程序,來控制器件按你想要的結(jié)果去運(yùn)作,這個就是解題的思路。要寫程序,就得先找到解決問題的思路,你學(xué)會找出這個解題思路,比你找到代碼更為重要。不少人很喜歡找人家的代碼,有的人甚至有了代碼就直接復(fù)制到自己的程序中,可以說,這不是一種學(xué)習(xí)的態(tài)度,無助于你編程水平的提高。我?guī)缀醪辉趺纯慈思业拇a,多數(shù)時候是看別人的思路,有方框圖最好,沒有的話文字說明也可以,要從代碼中看出別人處理問題的思路,是相當(dāng)困難的,特別是大型的程序,看起來是非常的累人,所以現(xiàn)在我也明白了,以前讀書時說的程序流程圖很重要,現(xiàn)在算是知道了。當(dāng)你知道一個問題怎么去解決了,那么剩下的只是你安排代碼去完成,這就已經(jīng)不是什么問題了。舉個例子:數(shù)碼管動態(tài)掃描,沒寫過的初學(xué)者可能搞不清是怎么回事,其實(shí),就是分時讓每一時間段時只控制一只數(shù)碼管顯示數(shù)字,幾只數(shù)碼管輪流顯示,由于速度很快,人眼的看起來是全部數(shù)碼管都亮的。明白是這么一回事,事情就好辦了,剩下的事情,無非是你安排讓一只只數(shù)碼管輪流顯示出相應(yīng)的數(shù)值。顯示數(shù)字,然后延時一下,再下一只顯示數(shù)字,延時,知道是這樣,我們實(shí)際程序上只要做到這樣就可以:往段口送段碼,然后打開位選顯示一只,延時一下,再關(guān)閉位選,再送出段碼,再打開另一只位選僅此而已。有了解決問題的思路,我們就能問題拆分開來,然后逐一的解決,如果動態(tài)掃描的原理都沒懂,不知道如何做,那么這個程序是怎么也寫不出來的。
6、開動腦筋,運(yùn)用多種方法,不斷優(yōu)化自己的程序。想想用各種不同方法來實(shí)現(xiàn)同一功能。這是一個練習(xí)和提高的過程,一個問題,你解決了,那么你再想想,能不能換種寫法,也可以實(shí)現(xiàn)同一功能,或者說,你寫出來的代碼,能不能再精簡一點(diǎn),讓程序執(zhí)行效率更高,這個過程,就是一個進(jìn)步的過程。很多知識和經(jīng)驗(yàn)的獲得,并不是直接寫在書讓你看就可以得到的,需要自己去實(shí)踐,開動腦筋,經(jīng)驗(yàn)才能得到積累,編程水平才能有所提高。
7、看別人的代碼,學(xué)習(xí)人家的思路。這個在學(xué)習(xí)初期是很有用,通過看別人的代碼,特別是有多年編程經(jīng)驗(yàn)的人寫出的具有一定水平的代碼,可以使自己編程水平得到迅速的提高,同時,也可以結(jié)合別人的編程手法,與自己的想法融合在一起,寫出更高水平的代碼,從中得到進(jìn)步。但要注意,切忌將學(xué)習(xí)變成抄襲,更不是抄襲完了就認(rèn)為自己學(xué)會了,這樣做只會使你退步。
8、嘗試編寫一下綜合應(yīng)用的程序。從流水燈學(xué)起,到動態(tài)掃描,再到中斷,那么,你可以試試寫一下時鐘這種綜合性應(yīng)用的程序,不要小看時鐘,要寫好它不是一件容易的事情,它包括了單片機(jī)大部分的知識,比如有按鍵(IO讀取)、動態(tài)掃描(IO輸出)、中斷等,如何協(xié)調(diào)好各功能模塊正常工作,才是編程者需要學(xué)習(xí)的地方,當(dāng)你單獨(dú)寫一個功能的時候,比如按鍵讀取,你可能感覺很容易,因?yàn)槟愕某绦蛏兑膊蛔觯皇亲x按鍵。但把它和其它功能混合在一起,如何在整個程序運(yùn)行中使每一部分都正常工作,這就不是寫一個按鍵讀取這么容易的事情,功能模塊之間有可能會互相影響,比如你需要讓數(shù)碼管既能顯示,又要去處理按鍵讀取,怎么使這兩部分都正常工作,這就是一個協(xié)調(diào)過程。當(dāng)你有了這個處理協(xié)調(diào)能力,你就算是入門了。
9、著重于培養(yǎng)解決問題的能力,而不是具體看自己編寫了多少代碼或者做過什么。“學(xué)單片機(jī)重點(diǎn)在于學(xué)習(xí)解決問題的思路,而不是局限于具體的芯片類型和語言”這一直是我的座右銘,是我學(xué)單片機(jī)多年來感悟出來的。經(jīng)??吹接腥苏f“你會驅(qū)動XX芯片,真牛啊”“你搞過XX項(xiàng)目,真厲害”之類的話,其實(shí)這是非常片面的,搞過XX芯片,搞過XX項(xiàng)目,只能說明你做過這一項(xiàng)目,它只是你的業(yè)績,并不是代表能力就一定高。真正的能力應(yīng)該是:“遇到?jīng)]有解決過的問題或器件,能利用自己已學(xué)的知識,迅速找到解決問題的方法?!边@個才是能力。寫程序的過程就是一個創(chuàng)造的過程,幾乎沒有完全一樣的項(xiàng)目,每次你遇上的幾乎都不相同,所以你擁有的必須是你面對新項(xiàng)目時的創(chuàng)造能力,而不是標(biāo)榜著你以往做過多少項(xiàng)目。當(dāng)然,業(yè)績也能從另一側(cè)面反映你的經(jīng)驗(yàn)和水平。
10、如果有可能,多學(xué)習(xí)計(jì)算機(jī)專業(yè)的知識,比如數(shù)據(jù)結(jié)構(gòu)等。這些是你解決問題的基礎(chǔ)知識,你把這些知識應(yīng)用得越好,就會發(fā)現(xiàn)越容易找到解決問題的方法,這就是為什么一個學(xué)計(jì)算機(jī)專業(yè)的人編的程序和一個非計(jì)算機(jī)專業(yè)的人編的程序有差異的原因。也是一個菜鳥進(jìn)軍到高手所要配備的知識。如果我們把編程分為宏觀編程和微觀編程,那么微觀編程就是寫具體的代碼,比如控制某某器件的語句;而宏觀編程就是如何對整個程序進(jìn)行布局、安排,使功能模塊以你想要的方式去運(yùn)行,得出你想要的結(jié)果。如前所說“會控制XX器件”這些只能算是微觀編程,能做到這一步還只能算是菜鳥級別,如果面對一個新的器件,你心里沒底,沒把握去寫這個控制程序,那說明你還是一個初級的菜鳥。當(dāng)你有了一定的編程經(jīng)驗(yàn),控制過相當(dāng)數(shù)量的器件之后,你就會發(fā)現(xiàn),控制器件這些工作都是相似的、重復(fù)的工作,體現(xiàn)不出編程的水平,最多也是寫得好與不好的差別,只能算是一些小技巧的應(yīng)用。而對整個程序進(jìn)行布局、安排這些才是最頭痛的事情,能達(dá)到宏觀編程和微觀編程都做好才是真正的高手。對于規(guī)模越大的程序,越能體現(xiàn)出這一點(diǎn)。
11、面對一個新項(xiàng)目時,多自己開動腦筋,不要急于找別人的程序。有不少人面對一個新項(xiàng)目時,第一步想到的就是網(wǎng)上找別人寫過的代碼,然后抄一段,自己再寫幾句,湊在一起就完成任務(wù),這雖然可能是省時間,但絕對不利你的學(xué)習(xí)。當(dāng)你接到一個新項(xiàng)目時,應(yīng)該先自己構(gòu)思一下整個程序的架構(gòu),想想如何來完成,有可能的話,畫一個流程圖,簡單的可以畫在腦子里,對程序中用到的數(shù)據(jù)、變量有一個初步的安排,然后自己動手去寫,遇到實(shí)在沒辦法解決的地方,再去請教別人,或看別人是怎么處理的,這樣首先起碼你自己動過腦想過,自己有自己的思路,如果你一開始就看別人的程序,你的思維就會受限在別人的思維里,自己想再創(chuàng)新就更難了,這樣你自己永遠(yuǎn)也沒辦法提高,因?yàn)槟闶亲咴趧e人的影子里。
12、多利用網(wǎng)絡(luò)的搜索,學(xué)會提問題。一般來說,學(xué)習(xí)過程中,你遇上的問題,前人們多數(shù)也有遇上的,所以如果有什么不懂,在自己解決不了的時候,最好先到網(wǎng)上搜索一下,看能不能找到答案,找不到再到論壇里發(fā)問,發(fā)問也要有目的性,盡量簡單明了的描述問題,讓幫助你的人可以用最少的時間就看懂你說什么,畢竟人家?guī)椭闶敲赓M(fèi)的,時間也是有限的。
以上就是我學(xué)習(xí)單片機(jī)的經(jīng)歷和心得體會,希望對大家會有幫助,說得有不好或不對的地方歡迎大家批評指正。
篇二:單片機(jī)學(xué)習(xí)心得
時光飛逝,一轉(zhuǎn)眼,一個學(xué)期又進(jìn)尾聲了,本學(xué)期的單片機(jī)綜合課程設(shè)計(jì)也在一周內(nèi)完成了。
俗話說“好的開始是成功的一半”。說起課程設(shè)計(jì),我認(rèn)為最重要的就是做好設(shè)計(jì)的預(yù)習(xí),認(rèn)真的研究老師給的題目,選一個自己有興趣的題目。其次,老師對實(shí)驗(yàn)的講解要一絲不茍的去聽去想,因?yàn)橹挥卸济靼琢?,做起設(shè)計(jì)就會事半功倍,如果沒弄明白,就迷迷糊糊的去選題目做設(shè)計(jì),到頭來一點(diǎn)收獲也沒有。最后,要重視程序的模塊化,修改的方便,也要注重程序的調(diào)試,掌握其方法。
雖然這次的課程設(shè)計(jì)算起來在實(shí)驗(yàn)室的時間只有三天,不過因?yàn)槲覀兌加凶约旱膶?shí)驗(yàn)板,所以在宿舍里做實(shí)驗(yàn)的時間一定不止三天。
硬件的設(shè)計(jì)跟焊接都要我們自己動手去焊,軟件的編程也要我們不斷的調(diào)試,最終一個能完成課程設(shè)計(jì)的勞動成果出來了,很高興它能按著設(shè)計(jì)的思想與要求運(yùn)動起來。
當(dāng)然,這其中也有很多問題,第一、不夠細(xì)心比如由于粗心大意焊錯了線,由于對課本理論的不熟悉導(dǎo)致編程出現(xiàn)錯誤。第二,是在學(xué)習(xí)態(tài)度上,這次課設(shè)是對我的學(xué)習(xí)態(tài)度的一次檢驗(yàn)。對于這次單片機(jī)綜合課程實(shí)習(xí),我的第一大心得體會就是作為一名工程技術(shù)人員,要求具備的首要素質(zhì)絕對應(yīng)該是嚴(yán)謹(jǐn)。我們這次實(shí)習(xí)所遇到的多半問題多數(shù)都是由于我們不夠嚴(yán)謹(jǐn)。第三,在做人上,我認(rèn)識到,無論做什么事情,只要你足夠堅(jiān)強(qiáng),有足夠的毅力與決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。
在這次難得的課程設(shè)計(jì)過程中我鍛煉了自己的思考能力和動手能力。通過題目選擇和設(shè)計(jì)電路的過程中,加強(qiáng)了我思考問題的完整性和實(shí)際生活聯(lián)系的可行性。在方案設(shè)計(jì)選擇和芯片的選擇上,培養(yǎng)了我們綜合應(yīng)用單片機(jī)的能力,對單片機(jī)的各個管腳的功能也有了進(jìn)一步的認(rèn)識。還鍛煉我們個人的查閱技術(shù)資料的能力,動手能力,發(fā)現(xiàn)問題,解決問題的能力。并且我們熟練掌握了有關(guān)器件的性能及測試方法。
再次感謝老師的輔導(dǎo)以及同學(xué)的幫助,是他們讓我有了一個更好的認(rèn)識,無論是學(xué)習(xí)還是生活,生活是實(shí)在的,要踏實(shí)走路。課程設(shè)計(jì)時間雖然很短,但我學(xué)習(xí)了很多的東西,使我眼界打開,感受頗深。
第四篇:單片機(jī)學(xué)習(xí)心得
單片機(jī)學(xué)習(xí)心得
計(jì)算機(jī)科學(xué)與技術(shù)
班
學(xué)號:
單片機(jī)是一門應(yīng)用性和綜合性很強(qiáng)的學(xué)科,它綜合了電子技術(shù)中的模擬電路和數(shù)字電路方面的知識,特別是數(shù)字電路,因?yàn)閿?shù)字電路在里面的應(yīng)用很多。學(xué)習(xí)單片機(jī)最好先從匯編語言入手,雖然匯編語言是低級語言,編程效率低,但它比C語言占用內(nèi)存小,執(zhí)行速度快等優(yōu)點(diǎn),在剛接觸單片機(jī)時更容易學(xué)習(xí)。由于單片機(jī)涉及的知識很多,所以我們只能循序漸進(jìn)的學(xué)習(xí),逐步的積累,沒有什么捷徑可循。
剛開始學(xué)習(xí)的時候,對單片機(jī)沒有什么認(rèn)識,不知道什么是單片機(jī),更不知道它有什么作用。通過學(xué)習(xí)才大體知道了單片機(jī)的一些知識。由中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、I/O接口、定時器/計(jì)數(shù)器以及串行通信接口等集成在一塊芯片上,構(gòu)成了一個單片微型計(jì)算機(jī),簡稱為單片機(jī)。它的應(yīng)用范圍很廣,在工業(yè)自動化中應(yīng)用有數(shù)據(jù)采集、測控技術(shù)。在智能儀器儀表中應(yīng)用有數(shù)字示波器、數(shù)字信號源、數(shù)字萬用表、感應(yīng)電流表,自動取款機(jī)等。在消費(fèi)類電子產(chǎn)品中應(yīng)用有洗衣機(jī)、電冰箱、空調(diào)機(jī)、電視機(jī)、微波爐、手機(jī)、IC卡、汽車電子設(shè)備等。在通訊方面應(yīng)用有調(diào)制解調(diào)器、程控交換技術(shù)、手機(jī)、小靈通等。在武器裝備方面應(yīng)用有飛機(jī)、軍艦、坦克、導(dǎo)彈、航天飛機(jī)、魚雷制導(dǎo)、智能武器等。學(xué)習(xí)單片機(jī)要投入大量的時間,如果只想速成,幾乎是不可能的。由于單片機(jī)涉及的知識面很廣,不可能在朝夕間就學(xué)會,只能一點(diǎn)點(diǎn)的積累。不積跬步,無以至千里。只有當(dāng)你一步步去學(xué)習(xí)、去積累之后,你的單片機(jī)水平才會提高。學(xué)習(xí)過程中還要注重理解,要逐漸養(yǎng)成自己的編程思路,在編程過程中還要注意細(xì)節(jié)問題,如果因?yàn)榇中拇笠鈱⒊绦驅(qū)戝e,將會無形間給自己帶來更大的工作量,隨著學(xué)習(xí)的深入,我們編寫的程序?qū)⒃絹碓介L,如果出現(xiàn)很多錯誤,在
改錯時將會很麻煩,出錯越多你改的時間將會越長,就會無形間給自己帶來更多麻煩。
單片機(jī)(micro control unit)是一種集CPU、RAM、ROM、I/O、中斷、定時/計(jì)數(shù)等功能為一體的完整的計(jì)算機(jī),只需外加主頻振蕩器和電源,灌入應(yīng)用程序就可以實(shí)現(xiàn)一定的功能。單片機(jī)的的應(yīng)用特點(diǎn)是“面向測控”。因此,它必須有強(qiáng)力的信息處理、檢測、控制的功能。學(xué)習(xí)使用單片機(jī)就是理解單片機(jī)硬件結(jié)構(gòu),以及內(nèi)部資源的應(yīng)用,在匯編指令系統(tǒng)或C語言中學(xué)會各種功能的初始化設(shè)置,以及實(shí)現(xiàn)各種功能的程序編制。
一、總線:我們知道,一個電路總是由元器件通過電線連接而成的,在模擬電路中,連連線并不成為一個問題,因?yàn)楦髌骷g一般是串行關(guān)系,各器件之間的連線并不很多,但計(jì)算機(jī)電路卻不一樣,它是以微處理器為核心,各器件都要與微處理器相連,各 器件之間的工作必須相互協(xié)調(diào)?所以就需要的連線就很多了,如果仍如同模擬電路一樣,在各微處理器和各器件間單獨(dú)連線線,則線的數(shù)量將多得驚人,所以在微處理機(jī)中引 入了總線的概念,各個器件共同享用連線,所有器件的8根數(shù)據(jù)線全部接到8根公用的線 上,即相當(dāng)于各個器件并聯(lián)起來,但僅這樣還不行,如果有兩?器件同時送出數(shù)據(jù),一 個為0,一個為1,那么,接收方接收到的究竟是什么呢?這種情況是是不允許的,所以 要通過控制線進(jìn)行控制,使器件分時工作,任何時候只能有一個器件發(fā)送數(shù)據(jù)(可以有 多個器件同時接收)。器件的數(shù)據(jù)線也就被稱為數(shù)據(jù)總線,器件所有的控制線被稱 控制 總線。
在單片機(jī)內(nèi)部或者外部存儲器及其它器件中有存儲單元,這些存儲單元要被分配 地址,才能 用,分配地址當(dāng)?也是以電信號的形?給出的,由于存儲單元比較多,所以,用于地址分的線也較多,這些線被稱為地址總線。
二、數(shù)據(jù)、地址、指令:之所以將這三者放在一起,是因?yàn)檫@三者的本質(zhì)都是一樣的─數(shù)字,或者說都是?串‘0’和‘1’組成的序列。換言之,地址、指令也都是數(shù)據(jù)。指令由單片機(jī)芯片的設(shè)計(jì)者規(guī)定的一種數(shù)字,它與我們常用的指令助記符有著嚴(yán)格的 一一對應(yīng)關(guān),不可以由 單片機(jī)的開發(fā)者更改。地址:是尋找單片機(jī)內(nèi)部、外部的存儲 單元、輸入輸出口的依據(jù),內(nèi) 存單元的地址值
已由芯片設(shè)計(jì)者規(guī)定好,不可更改,外部的 單元可以由單片機(jī)開發(fā)者自行決,但有一些地址單元是一定要有的(詳見程序的執(zhí)行過 程)。數(shù)據(jù):這是由微處理機(jī)處理的 象,在各種 不同的應(yīng)用電路中各不相同,一般而言,被處理的數(shù)據(jù)可能有這么幾種情況:
1地址(如MOV DPTR,#1000H),即地址1000H送入DPTR。
2方式字或控制字(如MOV TMOD,#3),3即是控制字。
3常數(shù)(如MOV TH0,#10H)10H即定時常數(shù)。
4實(shí)際輸出值(如P1口接彩燈,要燈全亮,則執(zhí)行指令:MOV P1,#0FFH,要燈全暗,則執(zhí) 兄 令:MOV P1,#00H)這里0FFH和00H都是實(shí)際輸出值。又如用于LED的字形碼,也是實(shí) 際?出的值。理解了地址、指令的本質(zhì),就不難理解程序運(yùn)行過程中為什么會跑飛,會把數(shù)據(jù)當(dāng)成指 令來 行了。
三、P0口、P2口和P3的第二功能用法 初學(xué)時往往對P0口、P2口和P3口的第二功能用法迷惑不解,認(rèn)為第二功能和原功能之間 要有個切換的過程,或者說要有一條指令,事實(shí)各端口的第二功能完全是自動,不需要指令來轉(zhuǎn)換。如P3.6、P3.7分別是WR、RD信號,當(dāng)微片理機(jī)外接RAM或有外部I/O口 時,它們揮作第二功能,不能作為通用I/O口使用,只要一微處理機(jī)一執(zhí)行到MOVX指令,就會有相應(yīng)的信號從 P3.或P3.7送出,不需要事先用指令說明。事實(shí)上‘不能作為通用I/O口使用’也并不是‘不能而是(使用者)‘不會’將其作為通用I/O口使用。你完全可以在指令中按排一條S ETB P3.7的指令,并且當(dāng)單片機(jī)執(zhí)行到這條指令時,也會使P3.7變?yōu)楦唠娖?,但使用者不?這么做,因?yàn)檫@通常這會導(dǎo)致系統(tǒng)當(dāng)潰(即死機(jī))。
四、程序的執(zhí)行過程 單片機(jī)在通電復(fù)位后8051內(nèi)的程序計(jì)數(shù)器(PC)中的值為‘0000,所以程序總是從‘0000’單元開始執(zhí)行,也就是說:在系統(tǒng)的ROM中一定要存在‘0000’個單元,并且在‘0000’單元中存放的一定是一條指令。
五、堆棧 堆棧是一個區(qū)域,是用來存放數(shù)據(jù)的,這個區(qū)域本身沒有任何特殊之處,就是內(nèi)部RAM的 一份,特殊的是它存放和取用數(shù)據(jù)的方式,即所謂的‘先進(jìn)后出,后進(jìn)先出’,并且 堆棧有特 的數(shù)據(jù)傳輸指令,即‘PUSH’和甈OP’,有一個特殊的專為其服務(wù)的單元,即堆棧指 針SP 每當(dāng)執(zhí)一次 PUSH
指令時,SP就(在原來值的基礎(chǔ)上)自動加1,每當(dāng)執(zhí)行一次POP指令,SP就(在原 來值基礎(chǔ)上)動減1。由于SP中的值可以用指令加以改變,所以只要在程序開始階段更改了SP值,就可以把堆棧設(shè)置在規(guī)定的內(nèi)存單元中,如在程序開始時?用一條MOV SP,#5FH指令,就時把堆棧設(shè)置在從內(nèi)存單元60H開始的單元中。一般程序的開頭總有這么條設(shè)置堆棧指針的指令,因?yàn)殚_機(jī)時,SP的初始值為07H,這樣就使堆棧從08H單元 開始往后8H到1FH這個區(qū)域正是8031的第二、三、四工作寄存器區(qū),經(jīng)常要被使用,這會造成數(shù)據(jù)的渾亂
六:中斷
當(dāng)單片機(jī)應(yīng)用于測控系統(tǒng)時,實(shí)時性就顯得特別重要了。而中斷技術(shù)就是處理這種實(shí)時性要求高的場合。單片機(jī)的特點(diǎn)是一段程序反復(fù)執(zhí)行,程序中的每個指令的執(zhí)行都需要一定的執(zhí)行時間,如果程序沒有執(zhí)行到某指令,則該指令的動作就不會發(fā)生,這樣就會耽誤很多快速發(fā)生的事情,例如,按鈕按下時的下降沿。要使單片機(jī)在程序正常運(yùn)行過程中,對快速動作做出反應(yīng),就必須使用單片機(jī)的中斷功能,該功能就是在快速動作發(fā)生后,單片機(jī)中斷正常運(yùn)行的程序,處理快速發(fā)生的動作,處理完成后,在返回執(zhí)行正常的程序。中斷功能是需要合理控制的,在使用中的困難是需要精確地知道什么時候不允許中斷發(fā)生(屏蔽中斷)、什么時候允許中斷發(fā)生(開中斷),需要設(shè)置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應(yīng)該干什么,中斷完成后,程序應(yīng)該干什么等等。中斷學(xué)會后,就可以編制更復(fù)雜結(jié)構(gòu)的程序,這樣的程序可以干著一件事,監(jiān)視著一件事,一旦監(jiān)視的事情發(fā)生,就中斷正在干的事情,處理監(jiān)視的事情。這就是中斷功能的強(qiáng)大之處。
七:匯編語言與C語言
匯編指令有自己的一套繁瑣的指令系統(tǒng),不容易熟練掌握,編寫程序不得不注意硬件細(xì)節(jié)。相對于C語言,匯編語言也有不可忽略的優(yōu)勢,就是在某些特殊場合需要高效的,占用存儲空間小的地方。但隨著技術(shù)的發(fā)展硬件的限制越來越小,C語言比較好理解,通用性和可移植性都很不錯。也不用記專門的指令集合來,所以我還是比較傾向于用C編寫程序的。
接觸單片機(jī)已經(jīng)有一段時間了,我感覺自己動手學(xué)習(xí)編寫程序,調(diào)試然后在開發(fā)板上做學(xué)習(xí)的很快,看到自己看到的結(jié)果通過自己親手做出來的感覺很有成功感。
有時候單片機(jī)的學(xué)習(xí)很單調(diào),有些知識學(xué)起來很抽象,不容易理解,只能慢慢適應(yīng),一邊學(xué)習(xí)理論知識,一邊編寫程序,將程序刷入單片機(jī)進(jìn)行調(diào)試,通過這種方式才能更快速的學(xué)習(xí)單片機(jī)。同事也會從學(xué)習(xí)中體會成功的喜悅。
看門狗程序
看門狗,又叫 watchdog timer,是一個定時器電路, 一般有一個輸入,叫喂狗,一個輸出到MCU的RST端,MCU正常工作的時候,每隔一端時間輸出一個信號到喂狗端,給 WDT 清零,如果超過規(guī)定的時間不喂狗,(一般在程序跑飛時),WDT 定時超過,就回給出一個復(fù)位信號到MCU,是MCU復(fù)位.防止MCU死機(jī).看門狗的作用就是防止程序發(fā)生死循環(huán),或者說程序跑飛。
工作原理:在系統(tǒng)運(yùn)行以后也就啟動了看門狗的計(jì)數(shù)器,看門狗就開始自動計(jì)數(shù),如果到了一定的時間還不去清看門狗,那么看門狗計(jì)數(shù)器就會溢出從而引起看門狗中斷,造成系統(tǒng)復(fù)位。所以在使用有看門狗的芯片時要注意清看門狗。硬件看門狗是利用了一個定時器,來監(jiān)控主程序的運(yùn)行,也就是說在主程序的運(yùn)行過程中,我們要在定時時間到之前對定時器進(jìn)行復(fù)位如果出現(xiàn)死循環(huán),或者說PC指針不能回來。那么定時時間到后就會使單片機(jī)復(fù)位。、本程序通過按鍵喂狗防止溢出復(fù)位 看門狗演示程序
在16383個機(jī)器周期內(nèi)必須至少喂狗一次
標(biāo)準(zhǔn)AT89s52單片機(jī)試驗(yàn)通過。-----------------*/ #include
sfr WDTRST = 0xA6;
sbit K1 = P3^0;sbit K2 = P3^1;sbit LED1=P1^1;sbit LED2=P1^2;
void DelayUs2x(unsigned char t);//us級延時函數(shù)聲明
void DelayMs(unsigned char t);//ms級延時
/*-----------------
主函數(shù)
-----------------*/ main(){
LED1=0;
DelayMs(100);
LED1=1;
DelayMs(100);
TMOD=0x01;
TH0=0xc6;
//定時16ms
TL0=0x66;
EA=1;
ET0=1;
WDTRST=0x1e;
//在程序初始化中激活看門狗。
WDTRST=0xe1;
//先送1E,后送E1
if(K1==0)
{
TR0=1;
}
while(1)
{
if(K2==0)
{
TR0=0;
}
LED2=1;
LED1=1;
DelayMs(100);
LED2=0;
DelayMs(100);
} } /*-----------------
定時器中斷函數(shù)
-----------------*/ void Time0(void)interrupt 1 {
TH0=0xc6;
//定時16ms
TL0=0x66;
WDTRST=0x1e;
//喂狗指令
WDTRST=0xe1;}
/*-----------------uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
-----------------*/ void DelayUs2x(unsigned char t){
while(--t);} /*-----------------mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編-----------------*/ void DelayMs(unsigned char t){
while(t--){
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);} }
第五篇:單片機(jī)學(xué)習(xí)心得
單片機(jī)學(xué)習(xí)心得
第一次聽說單片機(jī)是在今年年初的時候,是在一段視頻上,好像講的是基于單片機(jī)控制的遙控小車,真正見到單片機(jī)是在我的第一本入門教材上,在此之前我只是模擬電子電路愛好者,當(dāng)我第一次認(rèn)識單片機(jī)以后就徹底愛上她了,當(dāng)時對她很是好奇,一片小小的芯片竟然可以實(shí)現(xiàn)這么多功能,還可以編程。
從那時起就開始了我的單片機(jī)學(xué)習(xí)之路,到現(xiàn)在已有7個月了,這7個月學(xué)到了許多。下面是我學(xué)習(xí)單片機(jī)的一些心得體會,供大家參考一下:
學(xué)習(xí)單片機(jī)最重要的不是你有多深厚的基礎(chǔ)知識(當(dāng)然基礎(chǔ)也是很重要的),而是你對她是否有興趣,興趣的魅力是巨大的,興趣是最好的老師,是你堅(jiān)持下去的動力源。
要對數(shù)電和模電有一定的了解,這對你學(xué)習(xí)單片機(jī)有很大幫助。
學(xué)習(xí)單片機(jī)光看書是不行的,還得要實(shí)踐,所以還得要有經(jīng)濟(jì)投入(不會花很多錢的)。
先選一本好的入門教材,51系列單片機(jī)入門教材很多,很適合我們初學(xué)者。
大略了解一下單片機(jī)結(jié)構(gòu),一開始不要深入研究,要多增加感性認(rèn)識,有利于學(xué)習(xí)。要學(xué)習(xí)一門編程語言 匯編或者是C語言,(匯編有利于內(nèi)部結(jié)構(gòu)的了解,C語言可移植性好,建議先學(xué)匯編,再深入學(xué)習(xí)C語言。)
熟練使用一種編譯軟件,推薦Keil C。
會用一種電路圖和PCB設(shè)計(jì)工具,推薦protel。好好利用網(wǎng)絡(luò)資源,盡可能自己解決問題,這也是提高自學(xué)能力的一種方法。
要實(shí)踐理論相結(jié)合,多動手。最重要的是要保持興趣,貴在堅(jiān)持。