當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]單片機(jī)基礎(chǔ)知識四問

1.什么是單片機(jī)?

簡單地說,單片機(jī)就是一個(gè)小計(jì)算機(jī)系統(tǒng)。為了說明清楚這個(gè)問題,得要從計(jì)算機(jī)說起。提到計(jì)算機(jī),大家可能馬上會想到“顯示器、鼠標(biāo)、鍵盤”,不過,這不是一個(gè)計(jì)算機(jī)的核心和關(guān)鍵,計(jì)算機(jī)的核心部分在一邊的機(jī)箱里呢。打開機(jī)箱,可以看到,機(jī)箱里有主板、硬盤、光驅(qū)等。仔細(xì)觀察主板,這上面有CPU、內(nèi)存條、BIOS芯片,通常還有25針的打印機(jī)接口等,這些部件都是通過主板上的連線相互連接。

不論計(jì)算機(jī)復(fù)雜程度如何,它總是由運(yùn)算器,控制器,存儲器,輸入/輸出接口,總線這五個(gè)部分組成。通常運(yùn)算器和控制器被做成一塊芯片,也就是CPU(中央處理器)。在計(jì)算機(jī)主板上,內(nèi)存條和BIOS芯片就是存儲器,25針打印機(jī)接口就是輸出/輸出設(shè)備,而總線則被設(shè)計(jì)在主板上,即各部件相互連接的線路。

在一些應(yīng)用場合,人們不需要計(jì)算機(jī)完成十分復(fù)雜的運(yùn)算,但卻希望計(jì)算機(jī)小巧,可靠,價(jià)格低。于是人們就把組成計(jì)算機(jī)的這5個(gè)部分全部集成到一塊芯片上,也說是一塊芯片就能構(gòu)成一個(gè)獨(dú)立的計(jì)算機(jī),在當(dāng)時(shí)的技術(shù)條件下,這是一件了不起的事情,于是人們就用這個(gè)特征來為之命名,稱為“單片機(jī)”。

將構(gòu)成一個(gè)計(jì)算機(jī)所需要的5個(gè)部分全部都集成到一塊芯片中,這塊芯片是否要很大、價(jià)格是否很高呢?并非如此。如果要把圖1所示主板上的所有元件都集成到一塊芯片中,那當(dāng)然非常昂貴,可能技術(shù)上也無法實(shí)現(xiàn),但很多單片機(jī)中所需要用到的功能完全沒必要那么強(qiáng)大,因此很多單片機(jī)體積很小,價(jià)格也很低。如市場上常見的單片機(jī)有8,14,16,18,20,28,40,84等引腳,有些甚至只有6個(gè)引腳,如圖2所示是微芯公司(Microchip)發(fā)布的一款6引腳單片機(jī)。而價(jià)格從幾元到幾十、上百元的都有,有些品種在大批量定購時(shí)甚至可以低至1元以下。

剛接觸到單片機(jī)的人往往會有個(gè)疑惑:既然人們已經(jīng)有能力制造功能強(qiáng)大的計(jì)算機(jī),為何還要生產(chǎn)些功能不強(qiáng)的計(jì)算機(jī)?其實(shí),功能強(qiáng)弱并不是決定是否生產(chǎn)的決定因素,市場需要才是關(guān)鍵。比如,用來控制一臺電箱的計(jì)算機(jī)顯然沒必要使用“奔騰”芯片的強(qiáng)大運(yùn)算能力,只要進(jìn)行非常簡單的計(jì)算,作個(gè)比較,看一看溫度是否在所控制區(qū)間之內(nèi),然后再做出相應(yīng)的控制就行了。

單片機(jī)在人們的生活中、工農(nóng)業(yè)生產(chǎn)設(shè)備中處處有應(yīng)用,例如各定時(shí)裝置、自動控制裝置等。愛好者學(xué)習(xí)單片機(jī)應(yīng)該注意觀察事物,找到自己周圍能夠使用單片機(jī)的場合,從而將學(xué)到的知識應(yīng)用到實(shí)際中去。例如,使用單片機(jī)技術(shù)改造傳統(tǒng)的機(jī)電設(shè)備、在特定的場合使用單片機(jī)替代PLC等就有著廣闊的應(yīng)用前景;又如,使用單片機(jī)控制電扇、抽油煙機(jī)、空調(diào)等,從而制作出具有更強(qiáng)功能、能夠通用的控制器,也是可以嘗試的。

2.單片機(jī)是如何工作的?

單片機(jī)的工作過程就是一個(gè)不斷“取指令-分析指令-執(zhí)行指令”的過程。單片機(jī)的程序以一條一條指令的形式存放在程序存儲器中,單片機(jī)開始工作后,就從程序存儲器的特定位置開始取指令,然后由單片機(jī)內(nèi)部的控制器對指令進(jìn)行分析,根據(jù)指令要求,進(jìn)行“取數(shù)、送數(shù)、算術(shù)運(yùn)算、邏輯運(yùn)算、跳轉(zhuǎn)”等基本操作中的一種或幾種,這些操作都在一個(gè)規(guī)定的周期中完成,執(zhí)行完了以后,到下一個(gè)存儲器單元中取指令,重復(fù)剛才的操作(當(dāng)然,這些要執(zhí)行的操作具體內(nèi)容可能跟上一次不一樣了),如此不斷重復(fù),直到斷電為止。這里所說的“存儲器特定位置”、“規(guī)定的周期”等與單片機(jī)的型號有關(guān),下面以51系列單片機(jī)為例來說明。

在51系列單片機(jī)中有一個(gè)名為PC的寄存器(就是用來存數(shù)的一個(gè)容器),在單片機(jī)復(fù)位后,這個(gè)寄存器中的內(nèi)容被置為0000H,單片機(jī)內(nèi)部的控制器總是根據(jù)PC寄存器中的值去相應(yīng)的程序存儲器單元取指令,因此,開機(jī)后,將從0000H單元取第一條指令,分析執(zhí)行,同時(shí),PC值將作相應(yīng)的調(diào)整,指向?qū)⒁獔?zhí)行的下一條指令的位置,下一條指令的位置在哪里呢?對于51單片機(jī)來說,一條指令可能占用一個(gè)字節(jié)、二個(gè)字節(jié)或三個(gè)字節(jié),如果第一條指令是單字節(jié)指令,取完第一條指令以后,PC的值就會變?yōu)?001H,因此,第一條指令執(zhí)行完畢以后,將從0001H單元中取出第二條指令來執(zhí)行,以此類推。如果程序是順序執(zhí)行的,PC的值將始終不斷增加,如果程序中有跳轉(zhuǎn)指令,該指令將影響PC中的值,使PC中的值指向?qū)⒁獔?zhí)行的下一條指令所在地址單元。這種跳轉(zhuǎn)既可能是正向的,例如由0000H跳轉(zhuǎn)到0030H,也可能是反向的,即往回跳轉(zhuǎn),如由200H跳轉(zhuǎn)到100H。正是由于指令可以影響到PC中的值,才使得程序可以實(shí)現(xiàn)“分支”、“循環(huán)”等各種功能。那么,執(zhí)行一條指令的時(shí)間又是多少呢?對于51單片機(jī)來說,指令執(zhí)行時(shí)間有三種可能,單周期、雙周期和四周期,不管一條指令需要做多少工作,都必然在規(guī)定的時(shí)間內(nèi)完成。

3.單片機(jī)程序的作用是什么?如何編寫?如何寫入單片機(jī)?

單片機(jī)程序的用途是讓單片機(jī)“聽話”,按人們所預(yù)定的設(shè)計(jì)完成一系列動作,最終實(shí)現(xiàn)一個(gè)特定的功能。

例如使用單片機(jī)控制流水燈,接通電源后,第一次燈亮,然后延時(shí)一段時(shí)間,第二次燈亮,然后延時(shí)一段時(shí)間,第三次燈亮……,延時(shí)一段時(shí)間后又回到第一次燈亮,如此循環(huán)不已。這里就有這樣的一些問題:第一次亮幾盞燈、延時(shí)多少時(shí)間、一個(gè)循環(huán)中設(shè)置多少次不同的燈亮的情況……,這些決定了流水燈的花樣,流動的速度,而這些,單片機(jī)顯然沒有自我判斷能力,必須依靠人們給它“布置”任務(wù),而它則是按人們的設(shè)計(jì)依次執(zhí)行。

要讓單片機(jī)“聽話”,就要用單片機(jī)能夠聽懂的語言發(fā)布命令,單片機(jī)能夠聽懂的語言稱之為“指令”。任何一種型號單片機(jī)能夠接受的指令都是有限的,51單片機(jī)的指令條數(shù)為111條,而PIC單片機(jī)的指令僅有35條。每一條指令完成一個(gè)最基本的動作,人們?yōu)榱艘瓿梢粋€(gè)特定的功能,就要將這些指令排列組合,成為一個(gè)指令序列,這就是程序。

指令的表示形式有兩種:機(jī)器語言和匯編語言。以51為例,如果要讓P1.0引腳變?yōu)榈碗娖?,用機(jī)器語言來表示就是 C2H 90H,將這兩個(gè)數(shù)放進(jìn)單片機(jī)的程序存儲器中,單片機(jī)執(zhí)行后,就可以讓P1.0引腳變?yōu)榈碗娖搅?而要讓P1.0引腳變?yōu)楦唠娖剑脵C(jī)器語言來表示就是D2H,90H。至于為什么是這兩個(gè)數(shù)字,大家沒必要追究,這是設(shè)計(jì)這塊芯片的設(shè)計(jì)工程師規(guī)定的,我們不能更改,只能學(xué)習(xí)。

C2H,90H就是一條指令,顯然這樣的指令形式是很難記憶的,編程也非常困難,于是人們使用了“助記符”來代替這些數(shù)字。例如C2H,90H的助記符是CLR P1.0,而D2H,90H的助記符是SETB P1.0,由于助記符采用了英語字母的縮寫,有一定含義,因此比數(shù)字形式的指令易記、易用。使用助記符形式的指令來編寫程序就稱之為“匯編語言源程序”。但是匯編語言源程序是沒有辦法直接送到單片機(jī)內(nèi)部去的,使用助記符形式的指令編寫的程序最終還是要變成為諸如:C2H,90H,D2H,90H,這種形式的指令才能被送入單片機(jī)的程序存儲器。將助記符形式的指令變?yōu)閿?shù)字形式的指令的過程稱之“匯編”。匯編有兩種方法,一種是“手工匯編”,即人們通過查表的形式找到所寫匯編指令的數(shù)字形式然后寫下來;另一種是“機(jī)器匯編”,即編寫好匯編語言源程序以后,使用一個(gè)計(jì)算機(jī)軟件對這些源程序進(jìn)行處理,從而得到數(shù)字形式的指令序列,這個(gè)指令序列通常被稱為“機(jī)器碼”,即可以直接被機(jī)器所執(zhí)行的代碼。

機(jī)器匯編后得到的數(shù)字形式的指令序列以一個(gè)文件的形式保存在磁盤上,這個(gè)文件的擴(kuò)展名一般是HEX,即人們常說的HEX文件。得到了HEX文件后,就可以將其寫入程序存儲器中了。要將程序?qū)懭胄酒?,通常需要一個(gè)稱之為“編程器”的專用設(shè)備,在計(jì)算機(jī)上運(yùn)行與之配套的編程軟件,然后在這個(gè)軟件中打開HEX文件,即可將其寫入芯片中。隨著技術(shù)的發(fā)展,編程方式越來越多,但總的概念是這樣的,具體的細(xì)節(jié),將在另一個(gè)問題“單片機(jī)編程器是什么”中回答。

4. 8位、16位、32位單片機(jī)中的“XX位”指什么?

8位、16位、32位是指單片機(jī)的“字長”,也就是一次運(yùn)算中參與運(yùn)算的數(shù)據(jù)長度,這個(gè)位是指二進(jìn)制位。以8位為例,8位二進(jìn)制的表達(dá)范圍是0000,0000~1111,1111即十進(jìn)制的0~255,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過255。而16位機(jī)的字長是16位,其數(shù)據(jù)表達(dá)范圍是0~65535,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過65535;32位單片機(jī)的字長是32位,其數(shù)據(jù)表達(dá)范圍是0~4294967295,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過4294967295。

8位、16位、32位與單片機(jī)的性能密切相關(guān),通常32位機(jī)的性能要高于16位機(jī),而16位機(jī)的性能又要高于8位機(jī)。為什么會這樣呢?這要從2個(gè)方面來分析。第一,位數(shù)不同,運(yùn)算效率不同。對于8位機(jī)而言,由于在一次運(yùn)算中的每一個(gè)數(shù)都不能超過8位,因此即便如100+200=300這樣的運(yùn)算,它也不能一次完成,因?yàn)?00已超過了8位所能表達(dá)的最大范圍(255),因此,要對這樣的一個(gè)式子進(jìn)行運(yùn)算,就要編寫一段程序,將運(yùn)算分步完成,最后合成起來得到一個(gè)正確的結(jié)果。而如果采用16位單片機(jī)來運(yùn)算的話,那么一次運(yùn)算就夠了,顯然分步完成所需要的時(shí)間要遠(yuǎn)遠(yuǎn)大于單步完成所需要的時(shí)間。同樣道理,當(dāng)某個(gè)運(yùn)算的結(jié)果或者中間值大于65535時(shí),16位機(jī)也不能一次運(yùn)算,要分步實(shí)現(xiàn)它,而32位機(jī)則可以一次運(yùn)算完成。第二,商業(yè)因素。通常運(yùn)算能力越高,表示這個(gè)單片機(jī)性能越強(qiáng),當(dāng)然,價(jià)格高一些人們也可以接受,有了價(jià)格空間,生產(chǎn)商通常都會在這些芯片中提供更多的其他的功能,使得芯片的整體性能得到更大的提升。

典型的單片機(jī)中,80C51系列,PIC系列,AVR系列都是8位單片機(jī);80C196、MSP430系列是16位機(jī);而目前非常熱門的ARM系列則是32位機(jī)。

擴(kuò)展閱讀:如何突破單片機(jī)學(xué)習(xí)的瓶頸

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉