單片機(jī)常識(shí)
單片機(jī)的組成
本文引用地址:http://m.butianyuan.cn/article/201610/307395.htm單片機(jī)要自動(dòng)完成計(jì)算,它應(yīng)該具有哪些最重要的部分呢?
我們以打算盤(pán)為例計(jì)算一道算術(shù)題。例:36+163×156-166÷34?,F(xiàn)在要進(jìn)行運(yùn)算,首先需要一把算盤(pán),其次是紙和筆。我們把要計(jì)算的問(wèn)題記錄下來(lái),然后第一步先算163×156,把它與36相加的結(jié)果記在紙上,然后計(jì)算166÷34,再把它從上一次結(jié)果中減去,就得到最后的結(jié)果。
現(xiàn)在,我們用單片機(jī)來(lái)完成上述過(guò)程,顯然,它首先要有代替算盤(pán)進(jìn)行運(yùn)算的部件,這就是“運(yùn)算器”;其次,要有能起到紙和筆作用的器件,即能記憶原始題目、原始數(shù)據(jù)和中間結(jié)果,還要記住使單片機(jī)能自動(dòng)進(jìn)行運(yùn)算而編制的各種命令。這類(lèi)器件就稱(chēng)為“存貯器”。此外,還需要有能代替人作用的控制器,它能根據(jù)事先給定的命令發(fā)出各種控制信號(hào),使整個(gè)計(jì)算過(guò)程能一步步地進(jìn)行。但是光有這三部分還不夠,原始的數(shù)據(jù)與命令要輸入,計(jì)算的結(jié)果要輸出,都需要按先后順序進(jìn)行,有時(shí)還需等待。
如上例中,當(dāng)在計(jì)算163×156時(shí),數(shù)字36就不能同時(shí)進(jìn)入運(yùn)算器。因此就需要在單片機(jī)上設(shè)置按控制器的命令進(jìn)行動(dòng)作的“門(mén)”,當(dāng)運(yùn)算器需要時(shí),就讓新數(shù)據(jù)進(jìn)入。或者,當(dāng)運(yùn)算器得到最后結(jié)果時(shí),再將此結(jié)果輸出,而中間結(jié)果不能隨便“溜出”單片機(jī)。這種對(duì)輸入、輸出數(shù)據(jù)進(jìn)行一定管理的“門(mén)”電路在單片機(jī)中稱(chēng)為“口”(Port)。在單片機(jī)中,基本上有三類(lèi)信息在流動(dòng),一類(lèi)是數(shù)據(jù),即各種原始數(shù)據(jù)(如上例中的36、163等)、中間結(jié)果(如166÷34所得的商4、余數(shù)30等)、程序(命令的集合)等。這樣要由外部設(shè)備通過(guò)“口”進(jìn)入單片機(jī),再存放在存貯器中,在運(yùn)算處理過(guò)程中,數(shù)據(jù)從存貯器讀入運(yùn)算器進(jìn)行運(yùn)算,運(yùn)算的中間結(jié)果要存入存貯器中,或最后由運(yùn)算器經(jīng)“出入口”輸出。
用戶要單片機(jī)執(zhí)行的各種命令(程序)也以數(shù)據(jù)的形式由存貯器送入控制器,由控制器解讀(譯碼)后變?yōu)楦鞣N控制信號(hào),以便執(zhí)行如加、減、乘、除等功能的各種命令。所以,這一類(lèi)信息就稱(chēng)為控制命令,即由控制器去控制運(yùn)算器一步步地進(jìn)行運(yùn)算和處理,又控制存貯器的讀(取出數(shù)據(jù))和寫(xiě)(存入數(shù)據(jù))等。第三類(lèi)信息是地址信息,其作用是告訴運(yùn)算器和控制器在何處去取命令取數(shù)據(jù),將結(jié)果存放到什么地方,通過(guò)哪個(gè)口輸入和輸出信息等。
存貯器又分為只讀存貯器和讀寫(xiě)存貯器兩種,前者存放調(diào)試好的固定程序和常數(shù),后者存放一些隨時(shí)有可能變動(dòng)的數(shù)據(jù)。顧名思義,只讀存貯器一旦將數(shù)據(jù)存入,就只能讀出,不能更改(EPROM、E2PROM等類(lèi)型的ROM可通過(guò)一定的方法來(lái)更改、寫(xiě)入數(shù)據(jù)——編者注)。而讀寫(xiě)存貯器可隨時(shí)存入或讀出數(shù)據(jù)。
實(shí)際上,人們往往把運(yùn)算器和控制器合并稱(chēng)為中央處理單元——CPU。單片機(jī)除了進(jìn)行運(yùn)算外,還要完成控制功能。所以離不開(kāi)計(jì)數(shù)和定時(shí)。因此,在單片機(jī)中就設(shè)置有定時(shí)器兼計(jì)數(shù)器,其基本結(jié)構(gòu)與本連載之(二)中的舉例類(lèi)似。到這里為止,我們已經(jīng)知道了單片機(jī)的基本組成,即單片機(jī)是由中央處理器(即CPU中的運(yùn)算器和控制器)、只讀存貯器(通常表示為ROM)、讀寫(xiě)存貯器(又稱(chēng)隨機(jī)存貯器通常表示為RAM)、輸入/輸出口(又分為并行口和串行口,表示為I/O口)等等組成。實(shí)際上單片機(jī)里面還有一個(gè)時(shí)鐘電路,使單片機(jī)在進(jìn)行運(yùn)算和控制時(shí),都能有節(jié)奏地進(jìn)行。另外,還有所謂的“中斷系統(tǒng)”,這個(gè)系統(tǒng)有“傳達(dá)室”的作用,當(dāng)單片機(jī)控制對(duì)象的參數(shù)到達(dá)某個(gè)需要加以干預(yù)的狀態(tài)時(shí),就可經(jīng)此“傳達(dá)室”通報(bào)給CPU,使CPU根據(jù)外部事態(tài)的輕重緩急來(lái)采取適當(dāng)?shù)膽?yīng)付措施。
現(xiàn)在,我們已經(jīng)知道了單片機(jī)的組成,余下的問(wèn)題是如何將它們的各部分連接成相互關(guān)聯(lián)的整體呢?實(shí)際上,單片機(jī)內(nèi)部有一條將它們連接起來(lái)的“紐帶”,即所謂的“內(nèi)部總線”。此總線有如大城市的“干道”,而CPU、ROM、RAM、I/O口、中斷系統(tǒng)等就分布在此“總線”的兩旁,并和它連通。從而,一切指令、數(shù)據(jù)都可經(jīng)內(nèi)部總線傳送,有如大城市內(nèi)各種物品的傳送都經(jīng)過(guò)干道進(jìn)行。
單片機(jī)指令系統(tǒng)與匯編語(yǔ)言程序
前面已經(jīng)講述了單片機(jī)的幾個(gè)主要組成部分,這些部分構(gòu)成了單片機(jī)的硬件。所謂硬件(Hardware),就是看得到,摸得到的實(shí)體。但是,光有這樣的硬件,還只是有了實(shí)現(xiàn)計(jì)算和控制功能的可能性。單片機(jī)要真正地能進(jìn)行計(jì)算和控制,還必須有軟件(Software)的配合。軟件主要指的是各種程序。只有將各種正確的程序“灌入”(存入)單片機(jī),它才能有效地工作。單片機(jī)所以能自動(dòng)地進(jìn)行運(yùn)算和控制,正是由于人把實(shí)現(xiàn)計(jì)算和控制的步驟一步步地用命令的形式,即一條條指令(Instruction)預(yù)先存入到存貯器中,單片機(jī)在CPU的控制下,將指令一條條地取出來(lái),并加以翻譯和執(zhí)行。就以兩個(gè)數(shù)相加這一簡(jiǎn)單的運(yùn)算來(lái)說(shuō),當(dāng)需要運(yùn)算的數(shù)已存入存貯器后,還需要進(jìn)行以下幾步:
第一步:把第一個(gè)數(shù)從它的存貯單元(Location)中取出來(lái),送至運(yùn)算器?! ?第二步:把第二個(gè)數(shù)從它所在的存貯單元中取出來(lái),送至運(yùn)算器; 第三步:相加; 第四步:把相加完的結(jié)果,送至存貯器中指定的單元。
所有這些取數(shù)、送數(shù)、相加、存數(shù)等等都是一種操作(Operation),我們把要求計(jì)算機(jī)執(zhí)行的各種操作用命令的形式寫(xiě)下來(lái),這就是指令。但是怎樣才能辨別和執(zhí)行這些操作呢?這是在設(shè)計(jì)單片機(jī)時(shí)由設(shè)計(jì)人員賦予它的指令系統(tǒng)所決定的。一條指令,對(duì)應(yīng)著一種基本操作;單片機(jī)所能執(zhí)行的全部指令,就是該單片機(jī)的指令系統(tǒng)(Iustruction Set),不同種類(lèi)的單片機(jī),其指令系統(tǒng)亦不同。
使用單片機(jī)時(shí),事先應(yīng)當(dāng)把要解決的問(wèn)題編成一系列指令。這些指令必須是選定的單片機(jī)能識(shí)別和執(zhí)行的指令。單片機(jī)用戶為解決自己的問(wèn)題所編的指令程序,稱(chēng)為源程序(Source Program)。指令通常分為操作碼(Opcode)和操作數(shù)(Operand)兩大部分。操作碼表示計(jì)算機(jī)執(zhí)行什么操作,即指令的功能;操作數(shù)表示參加操作的數(shù)或操作數(shù)所在的地址(即操作數(shù)所存放的地方編號(hào))。因?yàn)閱纹瑱C(jī)是一種可編程器件,只“認(rèn)得”二進(jìn)碼(0、1)。要單片機(jī)運(yùn)作,單片機(jī)系統(tǒng)中的所有指令,都必須以二進(jìn)制編碼的形式來(lái)表示。例如,在Intel公司的MCS-51系列單片機(jī)中,從存貯器中取出一數(shù)到CPU中的累加器(在運(yùn)算器中,參與運(yùn)算、存放運(yùn)算結(jié)果的專(zhuān)用寄存器)的指令代碼為74H,累加器內(nèi)容加立即數(shù)的代碼為24H,再加上立即數(shù)代碼,累加器送數(shù)到內(nèi)部RAM存貯器的代碼為F6H~F7H等。這些指令是用十六進(jìn)制表示二進(jìn)制的機(jī)器碼。
MCS-51單片機(jī)的字長(zhǎng)為8位,有時(shí),要完成某些操作用一個(gè)字節(jié)尚不能充分表達(dá)。所以,在指令系統(tǒng)中有單字節(jié)指令,也有多字節(jié)指令。機(jī)器碼是由一連串的0和1組成,沒(méi)有明顯的特征,不好記憶,不易理解,易出錯(cuò)。所以,直接用它來(lái)編寫(xiě)程序十分困難。因而,人們就用一些助記符(Mue monic)——通常是指令功能的英文縮寫(xiě)來(lái)代替操作碼,如MCS-51中數(shù)的傳送常用MOV(Move的縮寫(xiě))、加法用Add(Addition的縮寫(xiě))來(lái)作為助記符。這樣,每條指令有明顯的動(dòng)作特征,易于記憶和理解,也不容易出錯(cuò)。用助記符來(lái)編寫(xiě)的程序稱(chēng)為匯編語(yǔ)言程序。但是,助記符編寫(xiě)的程序便于人理解,可單片機(jī)卻只認(rèn)識(shí)二進(jìn)制機(jī)器代碼,因此,為了讓單片機(jī)能“讀懂”匯編語(yǔ)言程序必須再轉(zhuǎn)換成由二進(jìn)制機(jī)器碼構(gòu)成的程序,這種轉(zhuǎn)換過(guò)程,就稱(chēng)為“匯編”。匯編可借助于人工查表法來(lái)實(shí)現(xiàn),也可借助PC機(jī)通過(guò)所謂“交叉匯編程序”來(lái)完成。由機(jī)器碼構(gòu)成的用戶程序一旦“進(jìn)入”了單片機(jī),再“啟動(dòng)”單片機(jī),就可讓它執(zhí)行輸入程序所規(guī)定的任務(wù)。
評(píng)論