新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 教你學(xué)單片機(jī) 1 :簡介,關(guān)于單片機(jī)的OOXX

教你學(xué)單片機(jī) 1 :簡介,關(guān)于單片機(jī)的OOXX

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
微處理器的四十年歷史:四十年回顧 CPU處理器全面發(fā)展史
后來,微處理器的發(fā)展就越來越迅猛了,掀起了一場個人電腦時代的技術(shù)革命,微處理器越來越風(fēng)行,滲透到了人們生活的各方各面。人們見識到了微處理器的強(qiáng)大,于是他們就有一種想法,既然微處理器這么強(qiáng)大,是不是所有設(shè)備都可以由它來控制呢?如果可以的話確實是很方便,這個想法很美好,但是有一個問題:雖然相對大型計算機(jī)來講,微機(jī)的體積和功耗是少了很多,但如果要把它應(yīng)用在日常生活中的小設(shè)備上,比如把它放到洗衣機(jī)上,讓它控制洗衣機(jī)自動運行,很顯然它還是太大了,因為根據(jù)馮諾依曼架構(gòu),一臺計算機(jī)必須具有五個部分,分別是:運算器,控制器,存儲設(shè)備,輸入設(shè)備,輸出設(shè)備。運算器和控制器集成在一起變成微處理器,但還是需要內(nèi)存,還有IO設(shè)備,所有這些東西加在一起才可以正常工作。而現(xiàn)在人們想把這套東西放進(jìn)洗衣機(jī)里面工作,先不說功耗和體積,它的價格就遠(yuǎn)遠(yuǎn)要高過洗衣機(jī)本身好多倍了。人們又在想,有什么辦法可以制造出一個可以擔(dān)當(dāng)此類工作的計算機(jī)系統(tǒng)呢。其實計算機(jī)所做的工作是很廣泛的,稱之為通用計算機(jī),“通用”兩個字表示它什么都可以做,但是如果我們只要它用來執(zhí)行某一些特定的,而且不復(fù)雜的任務(wù),換句話說,我們能不能制造出這樣一種計算機(jī),它必須功耗足夠小,價格讓人可以接受,功能可以不用那么強(qiáng)大,只需要執(zhí)行一些簡單的事情就行了,這樣不就可以滿足人們?nèi)粘I钪袑π⌒陀嬎銠C(jī)系統(tǒng)的需求了?比如自動洗衣機(jī)?自動洗碗機(jī)?按照這種想法,人們就在想,可不可以把個人計算機(jī)再微型化,要變得足夠小、足夠小才行,最好小到把功能都放到一塊芯片里面,用一塊芯片就可以執(zhí)行所有功能!這時候,單片機(jī)就出現(xiàn)了,單片機(jī)全稱:單片機(jī)微型計算機(jī),它按照人們的愿景,把本來需要放在外圍的隨機(jī)存儲器RAM,程序存儲器ROM,IO設(shè)備,定時器,CPU等等這些部件全部集中在一起芯片中,只要對它進(jìn)行編程就能實現(xiàn)各種功能!這就是單片機(jī)的由來。
1976年,英特爾推出它的第一款單片機(jī):MCS-48。Zilog公司也于1976年研發(fā)出Z80微處理器。應(yīng)該算是單片機(jī)的最早版本。而1980年,英特爾在MCS-48的基礎(chǔ)上,推出了MCS-51系列8位單片機(jī),這個系列無論在性能還是容量上都較之前的單片機(jī)型號有了很大的提高,由于它是如此地好用,MCS-51架構(gòu)到現(xiàn)在還是風(fēng)靡全球,占領(lǐng)了低端單片機(jī)的大部分市場,很多芯片制造商就是購買了英特爾的MCS-51內(nèi)核然后自己推出基于該內(nèi)核的芯片,而我后面要講的內(nèi)容都是以51單片機(jī)為平臺的。
后來,隨著時代的發(fā)展,IC制造技術(shù)越來越高超,(根據(jù)IT行業(yè)的摩爾定律,每過18個月,CPU的速度就會提高一倍,內(nèi)存容量會增大一倍),單片機(jī)的性能也越來越強(qiáng)大,體積也越做越小,滲入到生活的各方各面,從以前的MCU時代(性能較弱,內(nèi)部只能運行簡單的控制程序)進(jìn)入了SOC時代(System on chip,即片上系統(tǒng),在芯片上運行操作系統(tǒng)),比如現(xiàn)在的移動終端,像手機(jī)、MP3等無不是用單片機(jī)作為控制核心,這些芯片已經(jīng)達(dá)到很高的運行速度,性能直逼90年代中期的PC,目前最高端的手機(jī)CPU主頻已經(jīng)超過了1.5G Hz。以前只能在電腦上做的事情現(xiàn)在單片機(jī)也可以很輕易地做到了,而且功耗還比電腦低得多。
這就是單片機(jī)的簡單發(fā)展史。
而現(xiàn)在,你即將進(jìn)入這一領(lǐng)域,你可以想象一下,用你的手敲出一行行代碼,經(jīng)過編譯器編譯之后變成單片機(jī)可以執(zhí)行的機(jī)器碼,然后經(jīng)過一個下載器和一個下載軟件,機(jī)器碼就變成數(shù)字流通過導(dǎo)線一條條注入單片機(jī)內(nèi)部,單片機(jī)把你的機(jī)器碼全部記錄在他的ROM里面,下載完畢之后,你按原計劃連好線路,接上電源,在你還沒反應(yīng)過來的一瞬間,單片機(jī)就按照你的交代在乖巧地運行著代碼了!這一切看起來那么神奇,讓人振奮,你可以充分發(fā)揮你的想象,讓單片機(jī)為你做任何事情,讓你感到成就感十足!
好了,如果你看到這里覺得很有趣,正在考慮想磨拳擦掌大干一場了,那我首先祝賀你,你的興趣已經(jīng)被激發(fā)起來了,這是最重要的。但我也得打擊一下你,單片機(jī)不是那么好學(xué)的,需要你具有編程基礎(chǔ),還要有一點點電子學(xué)的基礎(chǔ)。你沒學(xué)過編程?沒學(xué)過電子?沒關(guān)系,這些都可以學(xué),最重要的是你必須有一顆堅持到底的心。老實告訴你,在你寫代碼的時候通常你不可能會第一次就可以把一個完全正確地寫出來,它有時候會產(chǎn)生BUG(軟件漏洞),導(dǎo)致程序錯亂,這時就需要你奈心地進(jìn)行DEBUG(漏洞調(diào)試),直到它正常運行;有時候硬件也會出問題(不是有時候,是大多時候),這時候也需要你一點一點地檢查硬件電路,上網(wǎng)查找資料,直接到硬件調(diào)通。這個過程有時候是很漫長并且痛苦的,大多數(shù)人就是因為這樣而放棄了學(xué)習(xí)。不過你要知道,你的每次辛苦付出得到的都是超值的回報,比如你在一次軟件調(diào)試中成功地解決了某個算法的漏油,證明你在之后再次應(yīng)用到這個算法的時候就會得心應(yīng)手,不會再犯錯。高手都是從菜鳥進(jìn)化來的。慢慢地,你就會非常享受每次調(diào)試完系統(tǒng)之后那種愉悅的成就感了。
OK?沒問題?你覺得你能承受?你覺得你會堅持到底?嗯,我暫且相信你,畢竟你都看到這里來了。
那你可以開始學(xué)單片機(jī)了。
第一個問題是,你需要選擇一個什么樣的單片機(jī)來學(xué)?你上網(wǎng)搜索,搜著搜著,你發(fā)現(xiàn),有一大堆單片機(jī)型號羅列在你面前,接著你去逛技術(shù)論壇,想聽一下高手們的意見,結(jié)果發(fā)現(xiàn)每種型號的單片機(jī)都有專門的技術(shù)版塊,每種都有很多資料,每個版塊的人都在向你說:學(xué)這種吧,OOXXOOXX~~~T_T~~~。你暈了。有時候選擇的東西太多了也是個麻煩事。
這時候,你可能很想聽一下某個當(dāng)初也是這么迷茫的人的建議。
我的建議是,先學(xué)51單片機(jī)吧!好好地學(xué),先把它學(xué)熟了再說吧!不要管有些人說:51過時了,幾十年前的架構(gòu),現(xiàn)在誰還用?我很想知道,他說這話的時候有沒有認(rèn)真地學(xué)過51,是不是所有指令都會用了?
事實就是,其實學(xué)哪種單片機(jī)都一樣,因為單片機(jī)的基本原理都是相通的,沒有太多特別的區(qū)別。但如果你剛開始入門學(xué)習(xí),你必須要一個適應(yīng)期,在這個適應(yīng)期里你應(yīng)該不止是使用單片機(jī),你還得把它從里到外都搞通,你會用C語言熟練地給它編程之后,還必須要學(xué)會用匯編(關(guān)于匯編與C語言的紛爭我之后將會專門講一下),你還得了解它的內(nèi)部結(jié)構(gòu),比如它是屬于哪種指令集(復(fù)雜指令集CISC和精簡指令集RISC),比如它在函數(shù)調(diào)用的時候都發(fā)生了哪些作用??傊?,在最后,你必須要懂得以機(jī)器執(zhí)行指令的過程來理解你的代碼的含義,這時候你才算成功地學(xué)會了單片機(jī)(而不是簡單地把單片機(jī)的外設(shè)學(xué)會,然后用高級語言按照人類的思維給它編程,然后下載了事)。你懂得以機(jī)器的角度來思考高級代碼之后,一理能百理明,你會發(fā)現(xiàn)很多事情都是相通的,你會在上《微機(jī)原理》的課程里比別人學(xué)得輕松,因為你已經(jīng)懂得計算機(jī)工作的最基本原理。
既然學(xué)哪種單片機(jī)都一樣,為什么要特別選擇51呢?這是因為一般情況下51單片機(jī)比別種類型的單片機(jī)外設(shè)要少,功能相對簡單一點,雖然這樣,但這對初學(xué)者來說卻是至關(guān)重要的。想象一下你剛上學(xué)的時候,老師從教你認(rèn)識0-9的數(shù)字開始,然后教你加減法,后來再教你乘除法,當(dāng)你有一些基礎(chǔ)之后,才開始教你函數(shù)和幾何,最后才是微積分。同樣的道理,當(dāng)你開始學(xué)單片機(jī)的時候,要怎么讓你慢慢接受一個你以前從未接受過的概念?你當(dāng)前希望解釋這個概念的模型要越簡單越直白越好,由淺入深。據(jù)此,51單片機(jī)給了你一個最簡單輕松的學(xué)習(xí)環(huán)境,有道理不?另外,51架構(gòu)的存在已經(jīng)有幾十年了,應(yīng)用已經(jīng)很廣泛(暫時不要去考慮哪種單片機(jī)有前景,千萬不要去糾結(jié)這種問題,你都還沒入門,就想起飛來了),所以相對其他單片機(jī)來說資料更齊全,對你學(xué)習(xí)更有幫助。
經(jīng)過一番解釋,我試圖說服你,學(xué)51沒錯。你被我說服了嗎?好吧。假如你還在猶豫之中,接下來我就大概一下介紹目前比較多人學(xué)的幾種芯片。
先說51,51是這類芯片的內(nèi)部架構(gòu),全稱8051,制造商有很多,但內(nèi)核都是購買英特爾公司的。51跟其他芯片相比主頻比較低(主頻即是CPU每秒執(zhí)行的指令數(shù)),一條指令的執(zhí)行需要用12個時鐘周期(一個時鐘脈沖稱為一個時鐘周期),也就是說,需要給他12個時鐘脈沖才會完成一條指令;所以雖然有時候51的外部晶振頻率比別人高,但其實執(zhí)行速度沒有別人高。51一般內(nèi)存比較小,標(biāo)準(zhǔn)C51(因為使用51內(nèi)核的芯片很多,資源也不相同,下面我以標(biāo)準(zhǔn)C51來介紹)只有128字節(jié)內(nèi)存,而且頭32個字節(jié)還要被用做通用寄存器,能給用戶使用的其實只有96字節(jié)。有32個通用IO口,可作為輸入或者輸出,P3口還有第二功能,串口等等,先不說這么多,以后再慢慢介紹。有8KB的程序存儲器。51使用的是復(fù)雜指令集CISC(什么東西?先不用管,了解就行了,呵呵)。

關(guān)鍵詞: 單片機(jī)簡

評論


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

關(guān)閉