<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201612/324318.htm

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

          現(xiàn)在網(wǎng)上很多教程有一些都是誤人子弟,有不少錯誤,本人總結(jié)了很多經(jīng)驗,因為在此之前本人對單片機也是小白一個,所以很會理解初學(xué)者的心里。下載了KEIL,買了單片機開發(fā)板和單片機,下面我們就來開始單片機學(xué)習(xí)之旅吧,先來看出自單片機教程網(wǎng)www.51hei.com第4課的一個閃爍燈的小程序(他文章中主要從匯編的角度詳解了閃爍燈的工作原理,我對此進行了C語言方面的詳解算是對第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() //主函數(shù)
          {
          while(1)
          {
          LED=0; //點亮LED
          delay(); //延時
          LED=1; //熄滅LED
          delay(); //延時
          }
          }

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

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



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

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();