學(xué)習(xí)單片機(jī)時(shí)遇到的常見(jiàn)問(wèn)題
要讓單片機(jī)“聽(tīng)話”,就要用單片機(jī)能夠聽(tīng)懂的語(yǔ)言發(fā)布命令,單片機(jī)能夠聽(tīng)懂的語(yǔ)言稱之為“指令”。任何一種型號(hào)單片機(jī)能夠接受的指令都是有限的,51單片機(jī)的指令條數(shù)為111條,而PIC單片機(jī)的指令僅有35條。每一條指令完成一個(gè)最基本的動(dòng)作,人們?yōu)榱艘瓿梢粋€(gè)特定的功能,就要將這些指令排列組合,成為一個(gè)指令序列,這就是程序。
指令的表示形式有兩種:機(jī)器語(yǔ)言和匯編語(yǔ)言。以51為例,如果要讓P1.0引腳變?yōu)榈碗娖?,用機(jī)器語(yǔ)言來(lái)表示就是 C2H 90H,將這兩個(gè)數(shù)放進(jìn)單片機(jī)的程序存儲(chǔ)器中,單片機(jī)執(zhí)行后,就可以讓P1.0引腳變?yōu)榈碗娖搅?而要讓P1.0引腳變?yōu)楦唠娖剑脵C(jī)器語(yǔ)言來(lái)表示就是D2H,90H。至于為什么是這兩個(gè)數(shù)字,大家沒(méi)必要追究,這是設(shè)計(jì)這塊芯片的設(shè)計(jì)工程師規(guī)定的,我們不能更改,只能學(xué)習(xí)。
C2H,90H就是一條指令,顯然這樣的指令形式是很難記憶的,編程也非常困難,于是人們使用了“助記符”來(lái)代替這些數(shù)字。例如C2H,90H的助記符是CLR P1.0,而D2H,90H的助記符是SETB P1.0,由于助記符采用了英語(yǔ)字母的縮寫,有一定含義,因此比數(shù)字形式的指令易記、易用。使用助記符形式的指令來(lái)編寫程序就稱之為“匯編語(yǔ)言源程序”。但是匯編語(yǔ)言源程序是沒(méi)有辦法直接送到單片機(jī)內(nèi)部去的,使用助記符形式的指令編寫的程序最終還是要變成為諸如:C2H,90H,D2H,90H,這種形式的指令才能被送入單片機(jī)的程序存儲(chǔ)器。將助記符形式的指令變?yōu)閿?shù)字形式的指令的過(guò)程稱之“匯編”。匯編有兩種方法,一種是“手工匯編”,即人們通過(guò)查表的形式找到所寫匯編指令的數(shù)字形式然后寫下來(lái);另一種是“機(jī)器匯編”,即編寫好匯編語(yǔ)言源程序以后,使用一個(gè)計(jì)算機(jī)軟件對(duì)這些源程序進(jìn)行處理,從而得到數(shù)字形式的指令序列,這個(gè)指令序列通常被稱為“機(jī)器碼”,即可以直接被機(jī)器所執(zhí)行的代碼。
機(jī)器匯編后得到的數(shù)字形式的指令序列以一個(gè)文件的形式保存在磁盤上,這個(gè)文件的擴(kuò)展名一般是HEX,即人們常說(shuō)的HEX文件。得到了HEX文件后,就可以將其寫入程序存儲(chǔ)器中了。要將程序?qū)懭胄酒?,通常需要一個(gè)稱之為“編程器”的專用設(shè)備,在計(jì)算機(jī)上運(yùn)行與之配套的編程軟件,然后在這個(gè)軟件中打開(kāi)HEX文件,即可將其寫入芯片中。隨著技術(shù)的發(fā)展,編程方式越來(lái)越多,但總的概念是這樣的,具體的細(xì)節(jié),將在另一個(gè)問(wèn)題“單片機(jī)編程器是什么”中回答。
4. 8位、16位、32位單片機(jī)中的“XX位”指什么?
8位、16位、32位是指單片機(jī)的“字長(zhǎng)”,也就是一次運(yùn)算中參與運(yùn)算的數(shù)據(jù)長(zhǎng)度,這個(gè)位是指二進(jìn)制位。以8位為例,8位二進(jìn)制的表達(dá)范圍是0000,0000~1111,1111即十進(jìn)制的0~255,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過(guò)255。而16位機(jī)的字長(zhǎng)是16位,其數(shù)據(jù)表達(dá)范圍是0~65535,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過(guò)65535;32位單片機(jī)的字長(zhǎng)是32位,其數(shù)據(jù)表達(dá)范圍是0~4294967295,即每次參與運(yùn)算的數(shù)據(jù)最大不能超過(guò)4294967295。
8位、16位、32位與單片機(jī)的性能密切相關(guān),通常32位機(jī)的性能要高于16位機(jī),而16位機(jī)的性能又要高于8位機(jī)。為什么會(huì)這樣呢?這要從2個(gè)方面來(lái)分析。第一,位數(shù)不同,運(yùn)算效率不同。對(duì)于8位機(jī)而言,由于在一次運(yùn)算中的每一個(gè)數(shù)都不能超過(guò)8位,因此即便如100+200=300這樣的運(yùn)算,它也不能一次完成,因?yàn)?00已超過(guò)了8位所能表達(dá)的最大范圍(255),因此,要對(duì)這樣的一個(gè)式子進(jìn)行運(yùn)算,就要編寫一段程序,將運(yùn)算分步完成,最后合成起來(lái)得到一個(gè)正確的結(jié)果。而如果采用16位單片機(jī)來(lái)運(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)商通常都會(huì)在這些芯片中提供更多的其他的功能,使得芯片的整體性能得到更大的提升。
典型的單片機(jī)中,80C51系列,PIC系列,AVR系列都是8位單片機(jī);80C196、MSP430系列是16位機(jī);而目前非常熱門的ARM系列則是32位機(jī)。
5. 單片機(jī)編程器、仿真器、燒寫器、下載線各是什么?有什么用處?
單片機(jī)編程器是用來(lái)將程序代碼寫入存儲(chǔ)器芯片或者單片機(jī)內(nèi)部的工具,如圖5-1所示是一個(gè)典型的編程的外形。圖中黑色的集成電路插座,通過(guò)拔動(dòng)手柄可以將置于其中的集成電路芯片鎖緊或松開(kāi)。編程時(shí)鎖緊以保證接觸良好,編程完畢松開(kāi),可以更換下一片芯片。
圖5-1編程器
當(dāng)芯片是雙列直插形式時(shí),直接插在座子上就可以燒寫了,但如果遇到如圖5-2所示的各種封裝形式的芯片,又如何寫燒寫呢?一種方法是使用適配器,如圖5-3所示是各種封裝芯片所使用的適配器。
圖5-2 各種封裝形式的集成電路
QFN32 適配器 SOP28適配器
圖5-3 各種封裝的編程適配器
另一種方法是使用下載線。隨著技術(shù)的進(jìn)步,越來(lái)越多的單片機(jī)芯片開(kāi)始支持“ISP”功能,即In System Programmer,在線可編程技術(shù)。利用這種技術(shù),將空白的(尚未編程的)芯片直接焊在印刷線路板上,利用預(yù)先留下的幾個(gè)引腳即可對(duì)芯片進(jìn)行編程,不必將芯片拆下來(lái)放到編程器上,因此,這給小批量制作帶來(lái)了極大的方便,也省去了購(gòu)買價(jià)格昂貴的適配器。如圖5-4所示是使用下載線對(duì)芯片進(jìn)行在線編程的示意圖。
圖5-4 下載線對(duì)芯片進(jìn)行在線編程示意圖
評(píng)論