<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機教程之基礎編(基于C語(yǔ)言)

51單片機教程之基礎編(基于C語(yǔ)言)

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò ) 收藏
大家好,我是陳濱,本人是去年9月份開(kāi)始學(xué)單片機,到現在一年多了,現在本人基本掌握了單片機編程,開(kāi)始深入學(xué)習匯編語(yǔ)言了。很多初學(xué)者有很多的疑惑,我究竟是先學(xué)C語(yǔ)言,還是匯編語(yǔ)言?其實(shí)我告訴你,本人認為,先學(xué)C語(yǔ)言!為什么呢?C語(yǔ)言是目前使用最廣泛的中級語(yǔ)言,就連現在的windows7也是C語(yǔ)言編寫(xiě)的,C語(yǔ)言易讀性好,無(wú)需對單片機內部結構十分熟悉即會(huì )編程,可移植性高,便于維護。C語(yǔ)言只有32個(gè)關(guān)鍵字,9種控制語(yǔ)句,而且編譯器提供了很多函數庫,使用十分方便。而匯編語(yǔ)言達100多條指令,每條指令對應一個(gè)機器碼,跟單片機內部結構息息相關(guān),而且不提供庫函數,每種東西都要自己寫(xiě)。匯編語(yǔ)言最致命的地方是它不同硬件幾乎不可移植,維護麻煩。但是讀者又有疑問(wèn)了,既然C語(yǔ)言這么多優(yōu)點(diǎn),干嘛還要學(xué)匯編語(yǔ)言?雖然C語(yǔ)言易諸多優(yōu)點(diǎn),但是它也是有缺點(diǎn)的,就是代碼執行效率不高,占用CPU資源高,這個(gè)就是中高級語(yǔ)言的缺點(diǎn),目前最流行的安卓系統就是用高級語(yǔ)言編寫(xiě)的,據說(shuō)是Java,具體本人沒(méi)去研究,大家都知道安卓CPU主頻沒(méi)有800M以上想流暢運行是不太可能的就好,哈哈...匯編語(yǔ)言是在機器語(yǔ)言的基礎上發(fā)展起來(lái)的,每一條代碼對應一個(gè)機器碼,所以執行效率很高,就連windows底層的東西都是匯編寫(xiě)的,C語(yǔ)言難以達到要求。當然隨著(zhù)編譯器的改進(jìn),C語(yǔ)言執行效率已經(jīng)接近匯編,但是想真正成為單片機高手的話(huà),那么我告訴你,精通匯編是必須的!因為匯編語(yǔ)言是直接操作單片機內部硬件的,如果你精通匯編,那么意味著(zhù)你對單片機十分熟悉,就能編出十分高效的程序。所以先學(xué)C語(yǔ)言能快速入門(mén),再學(xué)匯編就能精通單片機。

OK!說(shuō)了這么多,你會(huì )問(wèn):學(xué)習單片機能有什么錢(qián)途?嗯!學(xué)東西無(wú)非就是想賺錢(qián),現在說(shuō)學(xué)東西是業(yè)余愛(ài)好的話(huà)只有有錢(qián)人在說(shuō),誰(shuí)敢說(shuō)學(xué)手藝不是為了吃飯?你?你?還是你?呵呵...目前這個(gè)世界上單片機無(wú)所不在,洗衣機,電視機,電冰箱等等...都有單片機的身影,單片機就是單片微型計算機的簡(jiǎn)稱(chēng),最早由英特爾公司發(fā)明,沒(méi)錯!就是大名鼎鼎的英特爾!哎!又一中國人的遺憾!電子技術(shù)什么東西才是我們中國的專(zhuān)利??!說(shuō)到計算機,咦?名字很熟悉?這個(gè)計算機可不是我們用的計算器啊,而是指電腦!什么?你說(shuō)單片機是一個(gè)電腦?對!沒(méi)錯,單片機就是一個(gè)微型電腦。一個(gè)電腦的基本組成是這樣的:輸入系統(鍵盤(pán))、輸出系統(顯示器)、計算系統(主機),你看你家的電腦是不是這樣?其實(shí)主機還包含了運算系統(CPU)、程序存儲器(硬盤(pán))、數據存儲器(內存),拆開(kāi)你的電腦主機,是不是也是這樣?我們用的單片機其實(shí)除了輸入輸出系統,已經(jīng)包含了其它東西,所以就微型計算機,英文叫MCU,又叫微處理器。早期的單片機是英特爾的4004單片機,是4位的,由于功能太弱了,早已經(jīng)淘汰,本人就不羅嗦了?,F在我們用的單片機就51系列單片機,是英特爾最經(jīng)典最成功的發(fā)明,由于51單片機價(jià)格便宜,功能齊全,到現在10幾年歷史,依然火爆,估計未來(lái)10年,51單片機不會(huì )淘汰,所以51單片機對初學(xué)者很合適。目前一個(gè)單片機工程師工資都在5000左右,視你的能力吧,上萬(wàn)的都有。單片機應用小到手機,大到火箭,都需要用到。只不過(guò)功能強弱不同,價(jià)格也不同,從幾塊錢(qián)到100多塊錢(qián)。你說(shuō)火箭的單片機要多少錢(qián)?我想最多100多塊!什么?是不是真的?我想是!既然單片機這么厲害,為什么這么便宜?主要是現在技術(shù)成熟,產(chǎn)量大,目前世界上很多公司都在生產(chǎn)51核心的單片機,國內的話(huà)就有STC公司。

本文引用地址:http://dyxdggzs.com/article/201612/324318.htm

好了,那么學(xué)單片機該如何入手呢?俗話(huà)說(shuō),小錢(qián)不出,大錢(qián)不入,當然是要先花點(diǎn)錢(qián)買(mǎi)設備了,放心,不貴,200多塊左右,不要告訴我你連200多塊的錢(qián)都沒(méi)有?現在淘寶上有很多開(kāi)發(fā)板,而且還送教程,價(jià)格都在200塊左右。開(kāi)發(fā)板就是用來(lái)學(xué)習單片機的,雖然現在有很多仿真軟件,但是跟實(shí)際應用還是有區別的。本人就有這樣的經(jīng)歷,自己寫(xiě)了個(gè)程序,在仿真軟件始終無(wú)法正常運行,但是到了實(shí)際電路運行很正常,所以開(kāi)發(fā)板不能省。學(xué)習單片機最主要是多學(xué)習多實(shí)踐,多在論壇上逛,遇到問(wèn)題要自己研究,實(shí)在不行可以網(wǎng)上發(fā)帖問(wèn)問(wèn)。買(mǎi)了開(kāi)發(fā)板,首先你得先學(xué)習C語(yǔ)言,C語(yǔ)言最重要就是關(guān)鍵字,語(yǔ)法。目前最常用的51編譯器就是KEIL了,這個(gè)大家可以去網(wǎng)下載,現在都是破解版的了。單片機大家可以買(mǎi)ATMEL的單片機,這個(gè)是最常用的了,就買(mǎi)AT89S52這個(gè)吧,注意S的支持ISP編程,而C的不支持。什么是ISP呢?ISP就是在線(xiàn)編程的意思,就是無(wú)需拔下芯片就能寫(xiě)程序,這個(gè)對我們學(xué)習是很方便的。

現在網(wǎng)上很多教程有一些都是誤人子弟,有不少錯誤,本人總結了很多經(jīng)驗,因為在此之前本人對單片機也是小白一個(gè),所以很會(huì )理解初學(xué)者的心里。下載了KEIL,買(mǎi)了單片機開(kāi)發(fā)板和單片機,下面我們就來(lái)開(kāi)始單片機學(xué)習之旅吧,先來(lái)看出自單片機教程網(wǎng)www.51hei.com第4課的一個(gè)閃爍燈的小程序(他文章中主要從匯編的角度詳解了閃爍燈的工作原理,我對此進(jìn)行了C語(yǔ)言方面的詳解算是對第4課的補全.):
#include //頭文件
#define uchar unsigned char //宏定義
sbit LED=P1^0; //定義引腳
void delay() //延時(shí)函數
{
uchar a,b;
for(a=200;a>0;a--)
for(b=200;b>0;b--);
}
void main() //主函數
{
while(1)
{
LED=0; //點(diǎn)亮LED
delay(); //延時(shí)
LED=1; //熄滅LED
delay(); //延時(shí)
}
}

在這里我先說(shuō)明一個(gè)問(wèn)題,關(guān)于KEIL的使用網(wǎng)上有很多教程,由于時(shí)間關(guān)系這里我就不說(shuō)了。上面是一個(gè)LED閃爍的小程序,初學(xué)者往往連這個(gè)也看不懂,好像在看天書(shū),別急!本人剛開(kāi)始也是!我一個(gè)個(gè)說(shuō)明。第一個(gè),就是頭文件,什么是頭文件呢?就是編譯器里面的一個(gè)庫,里面定義了單片機的一些寄存器,寫(xiě)了這個(gè)頭文件,編譯器就知道你使用的是52單片機,以下的操作它就認識了,否則編譯會(huì )報錯!第二個(gè),宏定義,就是自己定義的新名字,上面的操作就是告訴編譯器,以后遇到uchar就是unsigned char了,便于書(shū)寫(xiě),節省時(shí)間。第三個(gè),就是定義單片機的引腳,如果我的LED接在P1.0這個(gè)引腳上,就這樣定義了,以此類(lèi)推。好了,開(kāi)始說(shuō)函數,有人說(shuō)編程要大學(xué)生才可以,NO!NO!NO!就拿我來(lái)說(shuō),我才初中畢業(yè)呢!不過(guò)話(huà)說(shuō)回來(lái),你的英語(yǔ)必須有30分以上,代數在60分以上才可以,否則吃力!呵呵....因為C語(yǔ)言運用到了計算,單詞等初中知識。這個(gè)是一個(gè)延時(shí)函數,因為單片機運行速度很快,如果不延時(shí),LED閃爍就十分快,我們是分辨不出來(lái)的。那么這個(gè)是怎么延時(shí)的呢?首先我們定義了兩個(gè)變量a、b,然后a先賦值200,for這個(gè)是32個(gè)關(guān)鍵字其中一個(gè),是一個(gè)循環(huán)語(yǔ)句,首先執行a=200,接著(zhù)判斷a是否大于0,如果不是,則執行a--,就是a-1,直到a=0,這個(gè)語(yǔ)句執行了200次,同樣下面的語(yǔ)句也是,這兩個(gè)語(yǔ)句這樣寫(xiě)起到了嵌套作用,就是上面執行完了執行下面,這樣就執行了200*200=40000次。為什么要這樣呢?就是為了延時(shí)!其實(shí)這個(gè)程序就是讓CPU在那里執行空操作浪費時(shí)間來(lái)達到延時(shí)目的。下面的函數叫主函數,C語(yǔ)言每一個(gè)程序都有且只有一個(gè)主函數main,程序都是從主函數開(kāi)始執行,上面的延時(shí)函數叫子函數,也叫子程序,主函數可以調用子函數,反過(guò)來(lái)子函數是不可以調用主函數的。前面大家都注意到有一個(gè)void ,void在英文的意思是空,意思這個(gè)函數不帶返回值,至于什么是返回值,以后再說(shuō)。在函數的后面還有一個(gè)小括號,這個(gè)里面也是有一個(gè)void的,只是省略了,那這個(gè)是什么作用呢?這個(gè)就是函數的參數,什么參數?也是以后再說(shuō)!程序從主函數開(kāi)始,進(jìn)入了while(1)這個(gè)函數體,每個(gè)函數體都要有一個(gè)大括號來(lái)包括,while的意思是如果括號里面的條件為真即為1,就執行里面的程序,否則退出,所以也是一個(gè)循環(huán)函數,把里面寫(xiě)1就是這個(gè)while永遠為真,永遠執行這個(gè)函數,這樣做的目的就 是讓程序不斷執行下去,這樣LED就不斷閃爍了。到了LED=0時(shí),意思是把單片機P1.0這個(gè)引腳置為低電平,LED正極是接電源的,負極接P1.0,這樣LED就亮了。接著(zhù),延時(shí),到這里單片機執行延時(shí)函數,緊接著(zhù)LED=1,意思P1.0置為高電平,這個(gè)時(shí)候LED就滅了,然后又是延時(shí),再點(diǎn)亮,周而復始,LED就閃爍了。閃爍的頻率由延時(shí)函數決定,當然你可以再寫(xiě)個(gè)for,這個(gè)LED閃爍就更慢了。

看了這個(gè)小程序,你有什么感覺(jué)?實(shí)際上設備上的程序比這個(gè)可是復雜多了,要學(xué)的東西太多了。好了,先到這里,我會(huì )慢慢教大家繼續深入單片機編程,大家有什么要交流可以加本人QQ.只要我有時(shí)間,絕對做出回答。



關(guān)鍵詞: 51單片機基礎編C語(yǔ)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>