MCS-51系列單片機片內(nèi)有一個串行I/O端口,通過引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進行全雙工的串行異步通信。
1.串行端口的基本特點
8031單片機的串行端口有4種基本工作方式,通過編程設(shè)置,可以使其工作在任一方式,以滿足不同應(yīng)用場合的需要。其中,方式0主要用于外接移位寄存器,以擴展單片機的I/O電路;方式1多用于雙機之間或與外設(shè)電路的通信;方式2,3除有方式l的功能外,還可用作多機通信,以構(gòu)成分布式多微機系統(tǒng)。
串行端口有兩個控制寄存器,用來設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送的波特率(每秒傳送的位數(shù))以及作為中斷標(biāo)志等。
串行端口有一個數(shù)據(jù)寄存器SBUF(在特殊功能寄存器中的字節(jié)地址為99H),該寄存器為發(fā)送和接收所共同。發(fā)送時,只寫不讀;接收時,只讀不寫。在一定條件下,向陽UF寫入數(shù)據(jù)就啟動了發(fā)送過程;讀SBUf就啟動了接收過程。
串行通信的波特率可以程控設(shè)定。在不同工作方式中,由時鐘振蕩頻率的分頻值或由定時器Tl的定時溢出時間確定,使用十分方便靈活。
2.串行端口的工作方式
①方式0
8位移位寄存器輸入/輸出方式。多用于外接移位寄存器以擴展I/O端口。波特率固定為fosc/12。其中,fosc為時鐘頻率。
在方式0中,串行端口作為輸出時,只要向串行緩沖器SBUF寫入一字節(jié)數(shù)據(jù)后,串行端口就把此8位數(shù)據(jù)以等的波特率,從RXD引腳逐位輸出(從低位到高位);此時,TXD輸出頻率為fosc/12的同步移位脈沖。數(shù)據(jù)發(fā)送前,僅管不使用中斷,中斷標(biāo)志TI還必須清零,8位數(shù)據(jù)發(fā)送完后,TI自動置1。如要再發(fā)送,必須用軟件將TI清零。
串行端口作為輸入時,RXD為數(shù)據(jù)輸入端,TXD仍為同步信號輸出端,輸出頻率為fosc/12的同步移位脈沖,使外部數(shù)據(jù)逐位移入RxD。當(dāng)接收到8位數(shù)據(jù)(一幀)后,中斷標(biāo)志RI自動置。如果再接收,必須用軟件先將RI清零。
串行方式0發(fā)送和接收的時序過程見下圖。
②方式1
10位異步通信方式。其中,1個起始位(0),8個數(shù)據(jù)位(由低位到高位)和1個停止位(1)。波特率由定時器T1的溢出率和SMOD位的狀態(tài)確定。
一條寫SBUF指令就可啟動數(shù)據(jù)發(fā)送過程。在發(fā)送移位時鐘(由波特率確定)的同步下,從TxD先送出起始位,然后是8位數(shù)據(jù)位,最后是停止位。這樣的一幀10位數(shù)據(jù)發(fā)送完后,中斷標(biāo)志TI置位。
在允許接收的條件下(REN=1),當(dāng)RXD出現(xiàn)由1到O的負跳變時,即被當(dāng)成是串行發(fā)送來的一幀數(shù)據(jù)的起始位,從而啟動一次接收過程。當(dāng)8位數(shù)據(jù)接收完,并檢測到高電乎停止位后,即把接收到的8位數(shù)據(jù)裝入SBUF,置位RI,一幀數(shù)據(jù)的接收過程就完成了。
方式1的數(shù)據(jù)傳送波特率可以編程設(shè)置,使用范圍寬,其計算式為:
波特率=2SMOD/32×(定時器T1的溢出率)
其中,SMOD是控制寄存器PCON中的一位程控位,其取值有0和l兩種狀態(tài)。顯然,當(dāng)SMOD=0時,波特率=1/32(定時器Tl溢出率),而當(dāng)SMOD=1時,波特率=1/16(定時器T1溢出率)。所謂定時器的溢出率,就是指定時器一秒鐘內(nèi)的溢出次數(shù)。波特率的算法,以及要求一定波特率時定時器定時初值的求法,后面將詳細討論。
串行方式1的發(fā)送和接收過程的時序見下圖。
③方式2,3
11位異步通信方式。其中,1個起始位(0),8個數(shù)據(jù)位(由低位到高位),1個附加的第9位和1個停止住(1)。方式2和方式3除波特率不同外,其它性能完全相同。方式2,3的發(fā)送、接收時序見下圖。
由圖可見,方式2和方式3與方式l的操作過程基本相同,主要差別在于方式2,3有第9位數(shù)據(jù)。
發(fā)送時,發(fā)送機的這第9位數(shù)據(jù)來自該機SCON中的TB8,而接收機將接收到的這第9位數(shù)據(jù)送入本機SCON中的RB8。這個第9位數(shù)據(jù)通常用作數(shù)據(jù)的奇偶檢驗位,或在多機通信中作為地址/數(shù)據(jù)的特征位。
方式2和方式3的波特率計算式如下:
方式2的波特率=2SMOD/64×fosc
方式3的波特率=2SMOD/32×定時器T1的溢出率
由此可見,在晶振時鐘頻率一定的條件下,方式2只有兩種波特率,而方式3可通過編程設(shè)置成多種波特率,這正是這兩種方式的差別所在。
3.串行端口的控制寄存器
串行端口共有2個控制寄存器SCON和PCON,用以設(shè)置串行端口的工作方式、接收/發(fā)送的運行狀態(tài)、接收/發(fā)送數(shù)據(jù)的特征、波特率的大小,以及作為運行的中斷標(biāo)志等。
二、51單片機I/O腳工作原理分析
一、P0端口的結(jié)構(gòu)及工作原理
P0端口8位中的一位結(jié)構(gòu)圖見下圖:
由上圖可見,P0端口由鎖存器、輸入緩沖器、切換開關(guān)、一個與非門、一個與門及場效應(yīng)管驅(qū)動電路構(gòu)成。再看圖的右邊,標(biāo)號為P0.X引腳的圖標(biāo),也就是說P0.X引腳可以是P0.0到P0.7的任何一位,即在P0口有8個與上圖相同的電路組成。
下面,我們先就組成P0口的每個單元部份跟大家介紹一下:
先看輸入緩沖器:在P0口中,有兩個三態(tài)的緩沖器,在學(xué)數(shù)字電路時,我們已知道,三態(tài)門有三個狀態(tài),即在其的輸出端可以是高電平、低電平,同時還有一種就是高阻狀態(tài)(或稱為禁止?fàn)顟B(tài)),大家看上圖,上面一個是讀鎖存器的緩沖器,也就是說,要讀取D鎖存器輸出端Q的數(shù)據(jù),那就得使讀鎖存器的這個緩沖器的三態(tài)控制端(上圖中標(biāo)號為‘讀鎖存器’端)有效。下面一個是讀引腳的緩沖器,要讀取P0.X引腳上的數(shù)據(jù),也要使標(biāo)號為‘讀引腳’的這個三態(tài)緩沖器的控制端有效,引腳上的數(shù)據(jù)才會傳輸?shù)轿覀儐纹瑱C的內(nèi)部數(shù)據(jù)總線上。
D鎖存器:構(gòu)成一個鎖存器,通常要用一個時序電路,時序的單元電路在學(xué)數(shù)字電路時我們已知道,一個觸發(fā)器可以保存一位的二進制數(shù)(即具有保持功能),在51單片機的32根I/O口線中都是用一個D觸發(fā)器來構(gòu)成鎖存器的。大家看上圖中的D鎖存器,D端是數(shù)據(jù)輸入端,CP是控制端(也就是時序控制信號輸入端),Q是輸出端,Q非是反向輸出端。
對于D觸發(fā)器來講,當(dāng)D輸入端有一個輸入信號,如果這時控制端CP沒有信號(也就是時序脈沖沒有到來),這時輸入端D的數(shù)據(jù)是無法傳輸?shù)捷敵龆薗及反向輸出端Q非的。如果時序控制端CP的時序脈沖一旦到了,這時D端輸入的數(shù)據(jù)就會傳輸?shù)絈及Q非端。數(shù)據(jù)傳送過來后,當(dāng)CP時序控制端的時序信號消失了,這時,輸出端還會保持著上次輸入端D的數(shù)據(jù)(即把上次的數(shù)據(jù)鎖存起來了)。如果下一個時序控制脈沖信號來了,這時D端的數(shù)據(jù)才再次傳送到Q端,從而改變Q端的狀態(tài)。
多路開關(guān):在51單片機中,當(dāng)內(nèi)部的存儲器夠用(也就是不需要外擴展存儲器時,這里講的存儲器包括數(shù)據(jù)存儲器及程序存儲器)時,P0口可以作為通用的輸入輸出端口(即I/O)使用,對于8031(內(nèi)部沒有ROM)的單片機或者編寫的程序超過了單片機內(nèi)部的存儲器容量,需要外擴存儲器時,P0口就作為‘地址/數(shù)據(jù)’總線使用。那么這個多路選擇開關(guān)就是用于選擇是做為普通I/O口使用還是作為‘?dāng)?shù)據(jù)/地址’總線使用的選擇開關(guān)了。大家看上圖,當(dāng)多路開關(guān)與下面接通時,P0口是作為普通的I/O口使用的,當(dāng)多路開關(guān)是與上面接通時,P0口是作為‘地址/數(shù)據(jù)’總線使用的。
輸出驅(qū)動部份:從上圖中我們已看出,P0口的輸出是由兩個MOS管組成的推拉式結(jié)構(gòu),也就是說,這兩個MOS管一次只能導(dǎo)通一個,當(dāng)V1導(dǎo)通時,V2就截止,當(dāng)V2導(dǎo)通時,V1截止。
與門、與非門:這兩個單元電路的邏輯原理我們在第四課數(shù)字及常用邏輯電路時已做過介紹,不明白的同學(xué)請回到第四節(jié)去看看。
前面我們已將P0口的各單元部件進行了一個詳細的講解,下面我們就來研究一下P0口做為I/O口及地址/數(shù)據(jù)總線使用時的具體工作過程。
1、作為I/O端口使用時的工作原理
P0口作為I/O端口使用時,多路開關(guān)的控制信號為0(低電平),看上圖中的線線部份,多路開關(guān)的控制信號同時與與門的一個輸入端是相接的,我們知道與門的邏輯特點是“全1出1,有0出0”那么控制信號是0的話,這時與門輸出的也是一個0(低電平),與讓的輸出是0,V1管就截止,在多路控制開關(guān)的控制信號是0(低電平)時,多路開關(guān)是與鎖存器的Q非端相接的(即P0口作為I/O口線使用)。
P0口用作I/O口線,其由數(shù)據(jù)總線向引腳輸出(即輸出狀態(tài)Output)的工作過程:當(dāng)寫鎖存器信號CP 有效,數(shù)據(jù)總線的信號→鎖存器的輸入端D→鎖存器的反向輸出Q非端→多路開關(guān)→V2管的柵極→V2的漏極到輸出端P0.X。前面我們已講了,當(dāng)多路開關(guān)的控制信號為低電平0時,與門輸出為低電平,V1管是截止的,所以作為輸出口時,P0是漏極開路輸出,類似于OC門,當(dāng)驅(qū)動上接電流負載時,需要外接上拉電阻。
下圖就是由內(nèi)部數(shù)據(jù)總線向P0口輸出數(shù)據(jù)的流程圖(紅色箭頭)。
P0口用作I/O口線,其由引腳向內(nèi)部數(shù)據(jù)總線輸入(即輸入狀態(tài)Input)的工作過程:數(shù)據(jù)輸入時(讀P0口)有兩種情況
1、讀引腳
讀芯片引腳上的數(shù)據(jù),讀引腳數(shù)時,讀引腳緩沖器打開(即三態(tài)緩沖器的控制端要有效),通過內(nèi)部數(shù)據(jù)總線輸入,請看下圖(紅色簡頭)。
2、讀鎖存器
通過打開讀鎖存器三態(tài)緩沖器讀取鎖存器輸出端Q的狀態(tài),請看下圖(紅色箭頭):
在輸入狀態(tài)下,從鎖存器和從引腳上讀來的信號一般是一致的,但也有例外。例如,當(dāng)從內(nèi)部總線輸出低電平后,鎖存器Q=0,Q非=1,場效應(yīng)管T2開通,端口線呈低電平狀態(tài)。此時無論端口線上外接的信號是低電乎還是高電平,從引腳讀入單片機的信號都是低電平,因而不能正確地讀入端口引腳上的信號。又如,當(dāng)從內(nèi)部總線輸出高電平后,鎖存器Q=1,Q非=0,場效應(yīng)管T2截止。如外接引腳信號為低電平,從引腳上讀入的信號就與從鎖存器讀入的信號不同。為此,8031單片機在對端口P0一P3的輸入操作上,有如下約定:為此,8051單片機在對端口P0一P3的輸入操作上,有如下約定:凡屬于讀-修改-寫方式的指令,從鎖存器讀入信號,其它指令則從端口引腳線上讀入信號。
讀-修改-寫指令的特點是,從端口輸入(讀)信號,在單片機內(nèi)加以運算(修改)后,再輸出(寫)到該端口上。下面是幾條讀--修改-寫指令的例子。
這樣安排的原因在于讀-修改-寫指令需要得到端口原輸出的狀態(tài),修改后再輸出,讀鎖存器而不是讀引腳,可以避免因外部電路的原因而使原端口的狀態(tài)被讀錯。
P0端口是8031單片機的總線口,分時出現(xiàn)數(shù)據(jù)D7一D0、低8位地址A7一AO,以及三態(tài),用來接口存儲器、外部電路與外部設(shè)備。P0端口是使用最廣泛的I/O端口。
2、作為地址/數(shù)據(jù)復(fù)用口使用時的工作原理
在訪問外部存儲器時P0口作為地址/數(shù)據(jù)復(fù)用口使用。
這時多路開關(guān)‘控制’信號為‘1’,‘與門’解鎖,‘與門’輸出信號電平由“地址/數(shù)據(jù)”線信號決定;多路開關(guān)與反相器的輸出端相連,地址信號經(jīng)“地址/數(shù)據(jù)”線→反相器→V2場效應(yīng)管柵極→V2漏極輸出。
例如:控制信號為1,地址信號為“0”時,與門輸出低電平,V1管截止;反相器輸出高電平,V2管導(dǎo)通,輸出引腳的地址信號為低電平。請看下圖(蘭色字體為電平):
反之,控制信號為“1”、地址信號為“1”,“與門”輸出為高電平,V1管導(dǎo)通;反相器輸出低電平,V2管截止,輸出引腳的地址信號為高電平。請看下圖(蘭色字體為電平):
可見,在輸出“地址/數(shù)據(jù)”信息時,V1、V2管是交替導(dǎo)通的,負載能力很強,可以直接與外設(shè)存儲器相連,無須增加總線驅(qū)動器。
P0口又作為數(shù)據(jù)總線使用。在訪問外部程序存儲器時,P0口輸出低8位地址信息后,將變?yōu)閿?shù)據(jù)總線,以便讀指令碼(輸入)。
在取指令期間,“控制”信號為“0”,V1管截止,多路開關(guān)也跟著轉(zhuǎn)向鎖存器反相輸出端Q非;CPU自動將0FFH(11111111,即向D鎖存器寫入一個高電平‘1’)寫入P0口鎖存器,使V2管截止,在讀引腳信號控制下,通過讀引腳三態(tài)門電路將指令碼讀到內(nèi)部總線。請看下圖
如果該指令是輸出數(shù)據(jù),如MOVX @DPTR,A(將累加器的內(nèi)容通過P0口數(shù)據(jù)總線傳送到外部RAM中),則多路開關(guān)“控制”信號為‘1’,“與門”解鎖,與輸出地址信號的工作流程類似,數(shù)據(jù)據(jù)由“地址/數(shù)據(jù)”線→反相器→V2場效應(yīng)管柵極→V2漏極輸出。
如果該指令是輸入數(shù)據(jù)(讀外部數(shù)據(jù)存儲器或程序存儲器),如MOVX A,@DPTR(將外部RAM某一存儲單元內(nèi)容通過P0口數(shù)據(jù)總線輸入到累加器A中),則輸入的數(shù)據(jù)仍通過讀引腳三態(tài)緩沖器到內(nèi)部總線,其過程類似于上圖中的讀取指令碼流程圖。
通過以上的分析可以看出,當(dāng)P0作為地址/數(shù)據(jù)總線使用時,在讀指令碼或輸入數(shù)據(jù)前,CPU自動向P0口鎖存器寫入0FFH,破壞了P0口原來的狀態(tài)。因此,不能再作為通用的I/O端口。大家以后在系統(tǒng)設(shè)計時務(wù)必注意,即程序中不能再含有以P0口作為操作數(shù)(包含源操作數(shù)和目的操作數(shù))的指令。
二、P1端口的結(jié)構(gòu)及工作原理
P1口的結(jié)構(gòu)最簡單,用途也單一,僅作為數(shù)據(jù)輸入/輸出端口使用。輸出的信息有鎖存,輸入有讀引腳和讀鎖存器之分。P1端口的一位結(jié)構(gòu)見下圖.
由圖可見,P1端口與P0端口的主要差別在于,P1端口用內(nèi)部上拉電阻R代替了P0端口的場效應(yīng)管T1,并且輸出的信息僅來自內(nèi)部總線。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場效應(yīng)管反相后,鎖存在端口線上,所以,P1端口是具有輸出鎖存的靜態(tài)口。
由上圖可見,要正確地從引腳上讀入外部信息,必須先使場效應(yīng)管關(guān)斷,以便由外部輸入的信息確定引腳的狀態(tài)。為此,在作引腳讀入前,必須先對該端口寫入l。具有這種操作特點的輸入/輸出端口,稱為準(zhǔn)雙向I/O口。8051單片機的P1、P2、P3都是準(zhǔn)雙向口。P0端口由于輸出有三態(tài)功能,輸入前,端口線已處于高阻態(tài),無需先寫入l后再作讀操作。
P1口的結(jié)構(gòu)相對簡單,前面我們已詳細的分析了P0口,只要大家認真的分析了P0口的工作原理,P1口我想大家都有能力去分析,這里我就不多論述了。
單片機復(fù)位后,各個端口已自動地被寫入了1,此時,可直接作輸入操作。如果在應(yīng)用端口的過程中,已向P1一P3端口線輸出過0,則再要輸入時,必須先寫1后再讀引腳,才能得到正確的信息。此外,隨輸入指令的不同,H端口也有讀鎖存器與讀引腳之分。
三、P2端口的結(jié)構(gòu)及工作原理:
P2端口的一位結(jié)構(gòu)見下圖:
由圖可見,P2端口在片內(nèi)既有上拉電阻,又有切換開關(guān)MUX,所以P2端口在功能上兼有P0端口和P1端口的特點。這主要表現(xiàn)在輸出功能上,當(dāng)切換開關(guān)向下接通時,從內(nèi)部總線輸出的一位數(shù)據(jù)經(jīng)反相器和場效應(yīng)管反相后,輸出在端口引腳線上;當(dāng)多路開關(guān)向上時,輸出的一位地址信號也經(jīng)反相器和場效應(yīng)管反相后,輸出在端口引腳線上。
對于8031單片機必須外接程序存儲器才能構(gòu)成應(yīng)用電路(或者我們的應(yīng)用電路擴展了外部存儲器),而P2端口就是用來周期性地輸出從外存中取指令的地址(高8位地址),因此,P2端口的多路開關(guān)總是在進行切換,分時地輸出從內(nèi)部總線來的數(shù)據(jù)和從地址信號線上來的地址。因此P2端口是動態(tài)的I/O端口。輸出數(shù)據(jù)雖被鎖存,但不是穩(wěn)定地出現(xiàn)在端口線上。其實,這里輸出的數(shù)據(jù)往往也是一種地址,只不過是外部RAM的高8位地址。
在輸入功能方面,P2端口與P0和H端口相同,有讀引腳和讀鎖存器之分,并且P2端口也是準(zhǔn)雙向口。
可見,P2端口的主要特點包括:
①不能輸出靜態(tài)的數(shù)據(jù);
②自身輸出外部程序存儲器的高8位地址;
②執(zhí)行MOVX指令時,還輸出外部RAM的高位地址,故稱P2端口為動態(tài)地址端口。
即然P2口可以作為I/O口使用,也可以作為地址總線使用,下面我們就不分析下它的兩種工作狀態(tài)。
1、作為I/O端口使用時的工作過程
當(dāng)沒有外部程序存儲器或雖然有外部數(shù)據(jù)存儲器,但容易不大于256B,即不需要高8位地址時(在這種情況下,不能通過數(shù)據(jù)地址寄存器DPTR讀寫外部數(shù)據(jù)存儲器),P2口可以I/O口使用。這時,“控制”信號為“0”,多路開關(guān)轉(zhuǎn)向鎖存器同相輸出端Q,輸出信號經(jīng)內(nèi)部總線→鎖存器同相輸出端Q→反相器→V2管柵極→V2管9漏極輸出。
由于V2漏極帶有上拉電阻,可以提供一定的上拉電流,負載能力約為8個TTL與非門;作為輸出口前,同樣需要向鎖存器寫入“1”,使反相器輸出低電平,V2管截止,即引腳懸空時為高電平,防止引腳被鉗位在低電平。讀引腳有效后,輸入信息經(jīng)讀引腳三態(tài)門電路到內(nèi)部數(shù)據(jù)總線。
2、作為地址總線使用時的工作過程
P2口作為地址總線時,“控制”信號為‘1’,多路開關(guān)車向地址線(即向上接通),地址信息經(jīng)反相器→V2管柵極→漏極輸出。由于P2口輸出高8位地址,與P0口不同,無須分時使用,因此P2口上的地址信息(程序存儲器上的A15~A8)功數(shù)據(jù)地址寄存器高8位DPH保存時間長,無須鎖存。
四、P3端口的結(jié)構(gòu)及工作原理
P3口是一個多功能口,它除了可以作為I/O口外,還具有第二功能,P3端口的一位結(jié)構(gòu)見下圖。
由上圖可見,P3端口和Pl端口的結(jié)構(gòu)相似,區(qū)別僅在于P3端口的各端口線有兩種功能選擇。當(dāng)處于第一功能時,第二輸出功能線為1,此時,內(nèi)部總線信號經(jīng)鎖存器和場效應(yīng)管輸入/輸出,其作用與P1端口作用相同,也是靜態(tài)準(zhǔn)雙向I/O端口。當(dāng)處于第二功能時,鎖存器輸出1,通過第二輸出功能線輸出特定的內(nèi)含信號,在輸入方面,即可以通過緩沖器讀入引腳信號,還可以通過替代輸入功能讀入片內(nèi)的特定第二功能信號。由于輸出信號鎖存并且有雙重功能,故P3端口為靜態(tài)雙功能端口。
P3口的特殊功能(即第二功能):
使P3端品各線處于第二功能的條件是:
1、串行I/O處于運行狀態(tài)(RXD,TXD);
2、打開了處部中斷(INT0,INT1);
3、定時器/計數(shù)器處于外部計數(shù)狀態(tài)(T0,T1)
4、執(zhí)行讀寫外部RAM的指令(RD,WR)
在應(yīng)用中,如不設(shè)定P3端口各位的第二功能(WR,RD信叼的產(chǎn)生不用設(shè)置),則P3端口線自動處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài)。在更多的場合是根據(jù)應(yīng)用的需要,把幾條端口線設(shè)置為第二功能,而另外幾條端口線處于第一功能運行狀態(tài)。在這種情況下,不宜對P3端口作字節(jié)操作,需采用位操作的形式。
端口的負載能力和輸入/輸出操作:
P0端口能驅(qū)動8個LSTTL負載。如需增加負載能力,可在P0總線上增加總線驅(qū)動器。P1,P2,P3端口各能驅(qū)動4個LSTTL負載。
前已述及,由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以對這些端口寄存器的讀/寫就實現(xiàn)了信息從相應(yīng)端口的輸入/輸出。例如:
MOV A, P1 ;把Pl端口線上的信息輸入到A
MoV P1, A ;把A的內(nèi)容由P1端口輸出
MOV P3, #0FFH ;使P3端口線各位置l
這里我們已將51單片機的4個8位的并行口跟大家一起來分析了一下~
三、編碼及譯碼器工作原理分析
這里主要簡單介紹下,學(xué)過數(shù)字電路對編碼譯碼了解的朋友可以跳過這部分。
把所使用的每一種二進制代碼狀態(tài)都賦于特定的含義,表示一個特定的信號或?qū)ο螅芯幋a。如用四位二進制數(shù)的0000~1001這十種狀太,分別表示0~9這十個十進制數(shù)碼,稱為8421編碼。反過來把代碼的特定含義翻譯出來,稱為譯碼。
計算機在處理各種文字符號或數(shù)碼時,必須把這些信息進行二進制編碼,在編碼時所使用的第一種二進制代碼狀態(tài)都賦予了特定的含義,即表示一個確定的信號或者對象,實現(xiàn)這種功能的電路叫編碼器,如用于鍵盤的BCD碼,ASCII碼編碼器等。
單片機外圍電路用譯碼器較多,所以在這節(jié)課我們主要與大家一起來學(xué)習(xí)下譯碼器的工作原理(購買了本站產(chǎn)品的朋友,在我們配套的多媒體教學(xué)光盤中有相關(guān)的教學(xué)內(nèi)容,建議大家觀看),把代碼的含義‘翻譯’成相應(yīng)的輸出信號,以表示其原意。其功能恰恰與編碼器相反。
譯碼器可以將輸入代碼的狀態(tài)翻譯成相應(yīng)的輸出信號,以高、低電平的形式在各自的輸出端口送出,以表示其意愿。譯碼器有多個輸入端和多個輸出端。假如輸入的端個數(shù)為,每個輸出端只能有兩個狀態(tài),則輸出端個數(shù)最多有2n個。常用譯碼器輸入、輸出端頭數(shù)來稱呼譯碼器,如3線-8線譯碼器,4線-10線譯碼器等。我們經(jīng)常用到的74138就是一個三線-八線譯碼器,朋友們可以到百度搜索74138的中文資料。
編碼、譯碼的概念我們了解下,下面我們就來重點來講一下三-八譯碼器的工作原理,這在我們51單片機的接口電路中也是經(jīng)常用到的。
74138的工作原理如下圖所示:
從上圖可看出,74138有三個輸入端:A0、A1、A2和八個輸出端Q0~Q7。當(dāng)輸入端A0、A1、A2的編碼為000時,譯碼器輸出為Q0=0,而Q1~Q7=1。即Q0對應(yīng)于A0、A1、A2為000狀態(tài),低電平有效。A0、A1、A2的另外7種組合見后面的真值表。
圖中S1、S2、S3為使能控制端,起到控制譯碼器是否能進行譯碼的作用。只有S1為高電平,S2、S3均為低電平時,才能進行譯碼,否則不論輸入羰輸入為何值,每個輸出端均為1。
下圖是輸入端A0、A1、A2為000,控制端S1=1、S1=0、S2=0的電平示意圖(紅色數(shù)字為端口電平),大家可按下圖進行分析,也可以分析輸出端另外七種組合時的輸出情況。
四、51單片機CPU結(jié)構(gòu)分析
在前面的文章里我們已知道了單片機內(nèi)部有一個8位的CPU,同時知道了CPU內(nèi)部包含了運算器,控制器及若干寄存器。在這節(jié)課,我們就與大家一起來討論一下51單片機CPU的內(nèi)部結(jié)構(gòu)及工作原理。
從上圖中我們可以看到,在虛線框內(nèi)的就是CPU的內(nèi)部結(jié)構(gòu)了,8位的MCS-51單片機的CPU內(nèi)部有數(shù)術(shù)邏輯單元ALU(Arithmetic Logic Unit)、累加器A(8位)、寄存器B(8位)、程序狀態(tài)字PSW(8位)、程序計數(shù)器PC(有時也稱為指令指針,即IP,16位)、地址寄存器AR(16位)、數(shù)據(jù)寄存器DR(8位)、指令寄存器IR(8位)、指令譯碼器ID、控制器等部件組成。
1、運算器(ALU)的主要功能
A)算術(shù)和邏輯運算,可對半字節(jié)(一個字節(jié)是8位,半個字節(jié)就是4位)和單字節(jié)數(shù)據(jù)進行操作。
B)加、減、乘、除、加1、減1、比較等算術(shù)運算。
C)與、或、異或、求補、循環(huán)等邏輯運算。
D)位處理功能(即布爾處理器)。
由于ALU內(nèi)部沒有寄存器,參加運算的操作數(shù),必須放在累加器A中。累加器A也用于存放運算結(jié)果。
例如:執(zhí)行指令 ADD A,B
執(zhí)行這條指令時,累加器A中的內(nèi)容通過輸入口In_1輸入ALU,寄存器B通過內(nèi)部數(shù)據(jù)總線經(jīng)輸入口In_2輸入ALU,A+B的結(jié)果通過ALU的輸出口Out、內(nèi)部數(shù)據(jù)總線,送回到累加器A。
2、程序計數(shù)器PC
PC的作用是用來存放將要執(zhí)行的指令地址,共16位,可對64K ROM直接尋址,PC低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。也就是說,程序執(zhí)行到什么地方,程序計數(shù)器PC就指到哪里,它始終是跟躥著程序的執(zhí)行。我們知道,用戶程序是存放在內(nèi)部的ROM中的,我們要執(zhí)行程序就要從ROM中一個個字節(jié)的讀出來,然后到CPU中去執(zhí)行,那么ROM具體執(zhí)行到哪一條呢?這就需要我們的程序計數(shù)器PC來指示。
程序計數(shù)器PC具有自動加1的功能,即從存儲器中讀出一個字節(jié)的指令碼后,PC自動加1(指向下一個存儲單元)。
3、指令寄存器IR
指令寄存器的作用就是用來存放即將執(zhí)行的指令代碼。
在這里我們先簡單的了解下CPU執(zhí)行指令的過程,首先由程序存儲器(ROM)中讀取指令代碼送入到指令寄存器,經(jīng)譯碼器譯碼后再由定時與控制電路發(fā)出相應(yīng)的控制信號,從而完成指令的功能。關(guān)于指令在單片機內(nèi)部的執(zhí)行過程,我們在后面將會在后面的文章里進行詳細的講解。
4、指令譯碼器ID
用于對送入指令寄存器中的指令進行譯碼,所謂譯碼就是把指令轉(zhuǎn)變成執(zhí)行此指令所需要的電信號。當(dāng)指令送入譯碼器后,由譯碼器對該指令進行譯碼,根據(jù)譯碼器輸出的信號,CPU控制電路定時地產(chǎn)生執(zhí)行該指令所需的各種控制信號,使單片機正確的執(zhí)行程序所需要的各種操作。
5、地址寄存器AR(16位)
AR的作用是用來存放將要尋址的外部存儲器單元的地址信息,指令碼所在存儲單元的地址編碼,由程序計數(shù)器PC產(chǎn)生,而指令中操作數(shù)所在的存儲單元地址碼,由指令的操作數(shù)給定。從上圖中我們可以看到,地址寄存器AR通過地址總線AB與外部存儲器相連。
6、數(shù)據(jù)寄存器DR
用于存放寫入外部存儲器或I/O端口的數(shù)據(jù)信息。可見,數(shù)據(jù)寄存器對輸出數(shù)據(jù)具有鎖存功能。數(shù)據(jù)寄存器與外部數(shù)據(jù)總線DB直接相連。
7、程序狀態(tài)字PSW
用于記錄運算過程中的狀態(tài),如是否溢出、進位等。
例如,累加器A的內(nèi)容83H,執(zhí)行:
ADD A,#8AH ;累加器A與立即數(shù)8AH相加,并把結(jié)果存放在A中。
指令后,將產(chǎn)生和的結(jié)果為[1]0DH,而累加器A只有8位,只能存放低8位,即0DH,元法存放結(jié)果中的最高位B8。為些,在CPU內(nèi)設(shè)置一個進位標(biāo)志位C,當(dāng)執(zhí)行加法運算出現(xiàn)進位時,進位標(biāo)志位C為1。
8、時序部件
由時鐘電路和脈沖分配器組成,用于產(chǎn)生微操作控制部件所需的定時脈沖信號
五、存儲器的存儲原理
存儲器:用來存放計算機中的所有信息:包括程序、原始數(shù)據(jù)、運算的中間結(jié)果及最終結(jié)果等。
只讀存儲器(ROM):只讀存儲器在使用時,只能讀出而不能寫入,斷電后ROM中的信息不會丟失。因此一般用來存放一些固定程序,如監(jiān)控程序、子程序、字庫及數(shù)據(jù)表等。ROM按存儲信息的方法又可分為以下幾種:
1、掩膜ROM:
掩膜ROM也稱固定ROM,它是由廠家編好程序?qū)懭隦OM(稱固化)供用戶使用,用戶不能更改內(nèi)部程序,其特點是價格便宜。
2、可編程的只讀存儲器(PROM):
它的內(nèi)容可由用戶根據(jù)自已所編程序一次性寫入,一旦寫入,只能讀出,而不能再進行更改,這類存儲器現(xiàn)在也稱為OTP(Only Time Programmable)。
3、可改寫的只讀存儲器EPROM:
前兩種ROM只能進行一次性寫入,因而用戶較少使用,目前較為流行的ROM芯片為EPROM。因為它的內(nèi)容可以通過紫外線照射而徹底擦除,擦除后又可重新寫入新的程序。
4、可電改寫只讀存儲器(EEPROM):
EEPROM可用電的方法寫入和清除其內(nèi)容,其編程電壓和清除電壓均與微機CPU的5V工作電壓相同,不需另加電壓。它既有與RAM一樣讀寫操作簡便,又有數(shù)據(jù)不會因掉電而丟失的優(yōu)點,因而使用極為方便。現(xiàn)在這種存儲器的使用最為廣泛。
隨機存儲器(RAM):
這種存儲器又叫讀寫存儲器。它不僅能讀取存放在存儲單元中的數(shù)據(jù),還能隨時寫入新的數(shù)據(jù),寫入后原來的數(shù)據(jù)就丟失了。斷電后RAM中的信息全部丟失。因些,RAM常用于存放經(jīng)常要改變的程序或中間計算結(jié)果等信息。
RAM按照存儲信息的方式,又可分為靜態(tài)和動態(tài)兩種:
1、靜態(tài)SRAM:其特點是只要有電源加于存儲器,數(shù)據(jù)就能長期保存。
2、動態(tài)DRAM:寫入的信息只能保存若干ms時間,因此,每隔一定時間必須重新寫入一次,以保持原來的信息不變。
可現(xiàn)場改寫的非易失性存儲器:
這種存儲器的特點是:從原理上看,它們屬于ROM型存儲器,從功能上看,它們又可以隨時改寫信息,作用又相當(dāng)于RAM。所以,ROM、RAM的定義和劃分已逐漸的失去意義。
1、快擦寫存儲器(FLASH)
這種存儲器是在EPROM和EEPROM的制造基礎(chǔ)上產(chǎn)生的一種非易失性存儲器。其集成度高,制造成本低于DRAM,既具有SRAM讀寫的靈活性和較快的訪問速度,又具有ROM在斷電后可不丟失信息的特點,所以發(fā)展迅速。
2、鐵電存儲器FRAM
它是利用鐵電材料極化方向來存儲數(shù)據(jù)的。它的特點是集成度高,讀寫速度快,成本低,讀寫周期短。
通過前面的學(xué)習(xí),我們已知道存儲器是計算機的重組成部份。存儲器是由大量緩沖寄存器組成的,其用途是存放程序和數(shù)據(jù),使計算機具有記憶功能。這些程序和數(shù)據(jù)在存儲器中是以二進制代碼表示的。根據(jù)計算機的命令,按照指定地址,可以把代碼取出來或存入新代碼。
在這,我們的學(xué)習(xí)重點就是來研究一下存儲器的內(nèi)部結(jié)構(gòu)、工作原理及其存儲器的主要的技術(shù)指標(biāo)。
第一個要學(xué)習(xí)的問題:存儲器單元和存儲單元地址:
存儲器是由大量寄存器組成的,其中每一個寄存器就稱為一個存儲單元。它可存放一個有獨立意義的二進制代碼。一個代碼由若干位(bit)組成,代碼的位數(shù)稱為位長,習(xí)慣上也稱為字長。
每個存儲單元存放幾位二進制數(shù)呢?一般情況下,計算機中一個代碼的位數(shù)和它的算術(shù)運算單元的位數(shù)是相同的。例如,8051單片機中算術(shù)單元是8位,則字長就是8位。在計算機中把一個8位的二進制代碼稱為一個字節(jié)(Byte),常寫為B。對于一個8位二進制代碼的最低位稱為第0位(位0),最高位稱為第7位(位7)。
在計算機中的存儲器往往有成千上萬個存儲單元,為了使存入和取出不發(fā)生混淆,必須給每個存儲單元一個唯一的固定編號,這個編號就稱為存儲單元的地址。因為存儲單元的數(shù)量很大,我們不可能每個存儲單元都把線引到外部,如果每個存儲單元都引根線到外部,那一個8位的單片機就需外向外部引出65536根線了,這在現(xiàn)實中是不可能的。為了減少存儲器向外引出的地址線,在存儲器內(nèi)部都帶有譯碼器。根據(jù)二進制編碼、譯碼的原理,除地線公用之外,n根導(dǎo)線可以譯成2n個地址號。例如,當(dāng)?shù)刂肪€為3根時,可以譯成23=8個地址號;地址線為3根時,可以譯成28=256個地址號。依此類推,在8051單片機中有16根地址線,也就是說在8051單片機中有216=65 536個地址號,地址號的多少就是我們尋址范圍的大小,也就是前面我們提到過的8051單片機的尋址范圍是64K。
從上面的介紹可以看出,存儲單元地址和這個存儲單元的內(nèi)容含義是不同的。存儲單元如同一個旅館的每個房間;存儲單元地址則相當(dāng)于每個房間的房間號;存儲單元內(nèi)容(二進制代碼)就相當(dāng)于這個房間的房客。
前面我們已講過,8051的單片機有16根地址線,它的存儲地址有216=65 536個,這么多的存儲地址,而地址線卻只有16根,我們怎么用16根地址線來控制這6萬多個存儲地址呢?接下來我們就這個問題與大家一起做個探討:在上節(jié)課《第九課:51單片機CPU的結(jié)構(gòu)》時我們已知道,在51單片機的內(nèi)部有一個叫做譯碼器的部件。用16根地址線來控制65536個存儲地址,就是用譯碼來實現(xiàn)的。
我們知道,計算機可以進行數(shù)學(xué)運算,這可令我們非常的難以理解,計算機嗎,里面只不過是一些電子元件組成的,怎能么可以進行數(shù)學(xué)運算呢?我們做數(shù)學(xué)題時如25+36是這樣做的,先在紙上寫25,然后在下面寫36,然后大腦運算,最后寫出結(jié)果,運算的原材料:25、36和結(jié)果61都是寫在紙上的。計算機中又是怎樣存放的呢?為了解決定個問題,我們先做一個實驗:
下面有一盞燈,我們知道燈要么亮,要么不亮,就有兩種狀態(tài),我們可以用“0”和“1”來代替這兩種狀態(tài),規(guī)定亮為“1”,不亮為“0”。南以上兩盞燈,一共有幾種狀態(tài)呢?
上面已例出,兩盞燈可以表達成00 01 10 11四種狀態(tài),那么三盞燈呢?
三盞燈應(yīng)該就是可以表達成000 001 010 011 100 101 110 111八種狀態(tài),
如果是八盞燈呢?那么其狀就表達就是00000000 00000001 00000010。。。。。11111111 共256種狀態(tài)。
我們來看,上面這些000 001 010。。。。等等這些數(shù)不就是我們學(xué)過的二進制數(shù)嗎?本來燈的亮滅是一種物理現(xiàn)象,可當(dāng)我們把它們按一定的順序排列好后,燈的亮和滅就代表數(shù)字了。讓我們再抽象一步,燈為什么會亮呢?是因為輸出電路輸出高電平,給燈通了電。因此,燈亮和滅就可以用電路的輸出是高電平還是低電平來代替了。這樣,數(shù)字就和電平的高、低聯(lián)系上了。
位的含義:通過上面的實驗我們已知道:一盞燈亮或者說一根線的電平的高低,可以代表兩種狀態(tài):0和1。實際上這就是一個二進制位,困此我們把一根線(或者一盞燈)稱為一“位”,用BIT表示。
字節(jié)的含義:一根線可以表示0和1,兩根線可以表達00,01,10,11四種狀態(tài),也就是可以表示0到3,而三根給可以表達0至7,計算機中通常用8根線放在一起,同時計數(shù),就可以表達到0~255共256種狀態(tài)。這8根線或者8位就稱之為一個字節(jié)(BYTE)。不要問我為什么是8根而不是其它數(shù),因為我也不知道。(計算機是一個人造的世界,不是自然界,很多事情無法問為什么,只能說:字是一種規(guī)定,大家在以后的學(xué)習(xí)過程中也要注意這個問題)。
存儲器是用來存放數(shù)據(jù)的地方。它是利用電平的高低來存放數(shù)據(jù)的。也就是說,它存放的實際上是電平的高、低,而不是我們習(xí)慣認為的1234這樣的數(shù)字。下面我們就來看看,單片機內(nèi)的存儲器是怎樣來尋址的,也就是怎么來找到我們存放在存儲器內(nèi)的數(shù)據(jù)。
MCS-51單片機在物理結(jié)構(gòu)上有四個存儲空間:
1、片內(nèi)程序存儲器
2、片外程序存儲器
3、片內(nèi)數(shù)據(jù)存儲器
4、片外數(shù)據(jù)存儲器
但在邏輯上,即從用戶的角度上,8051單片機有三個存儲空間:
1、片內(nèi)外統(tǒng)一編址的64K的程序存儲器地址空間
2、256B的片內(nèi)數(shù)據(jù)存儲器的地址空間
3、以及64K片外數(shù)據(jù)存儲器的地址空間
在訪問三個不同的邏輯空間時,應(yīng)采用不同形式的指令(具體我們在后面的指令系統(tǒng)學(xué)習(xí)時將會講解),以產(chǎn)生不同的存儲器空間的選通信號。
程序存儲器
一個微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強大的硬件外,還需要它們運行的軟件,其實微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計人員編寫的程序就存放在微處理器的程序存儲器中,俗稱只讀程序存儲器(ROM)。程序相當(dāng)于給微處理器處理問題的一系列命令。其實程序和數(shù)據(jù)一樣,都是由機器碼組成的代碼串。只是程序代碼則存放于程序存儲器中。
MCS-51具有64kB程序存儲器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對于內(nèi)部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為64kB,此時單片機的 端必須接地。強制CPU從外部程序存儲器讀取程序。對于內(nèi)部有ROM的8051等單片機,正常運行時, 則需接高電平,使CPU先從內(nèi)部的程序存儲中讀取程序,當(dāng)PC值超過內(nèi)部ROM的容量時,才會轉(zhuǎn)向外部的程序存儲器讀取程序。
當(dāng) =1時,程序從片內(nèi)ROM開始執(zhí)行,當(dāng)PC值超過片內(nèi)ROM容量時會自動轉(zhuǎn)向外部ROM空間。
當(dāng) =0時,程序從外部存儲器開始執(zhí)行,例如前面提到的片內(nèi)無ROM的8031單片機,在實際應(yīng)用中就要把8031的 引腳接為低電平。
8051片內(nèi)有4kB的程序存儲單元,其地址為0000H—0FFFH,單片機啟動復(fù)位后,程序計數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開始執(zhí)行程序。但在程序存儲中有些特殊的單元,這在使用中應(yīng)加以注意:
其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機從0000H單元開始執(zhí)行程序,如果程序不是從0000H單元開始,則應(yīng)在這三個單元中存放一條無條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。
另一組特殊單元是0003H—002AH,這40個單元各有用途,它們被均勻地分為五段,它們的定義如下:
0003H—000AH 外部中斷0中斷地址區(qū)。
000BH—0012H 定時/計數(shù)器0中斷地址區(qū)。
0013H—001AH 外部中斷1中斷地址區(qū)。
001BH—0022H 定時/計數(shù)器1中斷地址區(qū)。
0023H—002AH 串行中斷地址區(qū)。
可見以上的40個單元是專門用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。從上面可以看出,每個中斷服務(wù)程序只有8個字節(jié)單元,用8個字節(jié)來存放一個中斷服務(wù)程序顯然是不可能的。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,我們是在中斷響應(yīng)的地址區(qū)安放一條無條件轉(zhuǎn)移指令,指向程序存儲器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。
下圖是ROM的地址分配圖:
從上圖中大家可以看到,0000H-0002H,只有三個存儲單元,3個存儲單元在我們的程序存放時是存放不了實際意義的程序的,通常我們在實際編寫程序時是在這里安排一條ORG指令,通過ORG指令跳轉(zhuǎn)到從0033H開始的用戶ROM區(qū)域,再來安排我們的程序語言。從0033開始的用戶ROM區(qū)域用戶可以通過ORG指令任意安排,但在應(yīng)用中應(yīng)注意,不要超過了實際的存儲空間,不然程序就會找不到。
數(shù)據(jù)存儲器
數(shù)據(jù)存儲器也稱為隨機存取數(shù)據(jù)存儲器。數(shù)據(jù)存儲器分為內(nèi)部數(shù)據(jù)存儲和外部數(shù)據(jù)存儲。MCS-51內(nèi)部RAM有128或256個字節(jié)的用戶數(shù)據(jù)存儲(不同的型號有分別),片外最多可擴展64KB的RAM,構(gòu)成兩個地址空間,訪問片內(nèi)RAM用“MOV”指令,訪問片外RAM用“MOVX”指令。它們是用于存放執(zhí)行的中間結(jié)果和過程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲器均可讀寫,部分單元還可以位尋址。
MCS-51單片機的內(nèi)部數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間,即:
數(shù)據(jù)存儲器空間(低128單元);
特殊功能寄存器空間(高128單元);
這兩個空間是相連的,從用戶角度而言,低128單元才是真正的數(shù)據(jù)存儲器。下面我們就來詳細的與大家講解一下:
低128單元:
片內(nèi)數(shù)據(jù)存儲器為8位地址,所以最大可尋址的范圍為256個單元地址,對片外數(shù)據(jù)存儲器采用間接尋址方式,R0、R1和DPTR都可以做為間接尋址寄存器,R0、R1是8位的寄存器,即R0、R1的尋址范圍最大為256個單元,而DPTR是16位地址指針,尋址范圍就可達到64KB。也就是說在尋址片外數(shù)據(jù)存儲器時,尋址范圍超過了256B,就不能用R0、R1做為間接尋址寄存器,而必須用DPTR寄存器做為間接尋址寄存器。
從上圖中我們可以看到,8051單片機片內(nèi)RAM共有256個單元(00H-FFH),這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。
1、通用寄存器區(qū)(00H-1FH)
在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程序狀態(tài)字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的D3和D4位(RS0和RS1),即可選中這四組通用寄存器。對應(yīng)的編碼關(guān)系如下表所示。惹程序中并不需要用4組,那么其余的可用做一般的數(shù)據(jù)緩沖器,CPU在復(fù)位后,選中第0組工作寄存器。
2、位尋址區(qū)(20H-2FH)
片內(nèi)RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對它們的位進行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為00H—7FH。位地址分配如下表所示:
CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(qū)。
3、用戶RAM區(qū)(30H-7FH)
在片內(nèi)RAM低128單元中,通用寄存器占去32個單元,位尋址區(qū)占去16個單元,剩下的80個單元就是供用戶使用的一般RAM區(qū)了,地址單元為30H-7FH。對這部份區(qū)域的使用不作任何規(guī)定和限制,但應(yīng)說明的是,堆棧一般開辟在這個區(qū)域。
高128單元:(80H-FFH)
前面提到,在片內(nèi)的RAM中,高128位是專用寄存器區(qū),因這節(jié)比較重要,所以我們單獨的安排一節(jié)課跟大家介紹。下節(jié)課我們就重點介紹51單片機片內(nèi)RAM的高128位,即專用寄存器區(qū)。
-
存儲器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163764 -
cpu
+關(guān)注
關(guān)注
68文章
10854瀏覽量
211585 -
51單片機
+關(guān)注
關(guān)注
274文章
5702瀏覽量
123493
原文標(biāo)題:51單片機CPU結(jié)構(gòu)、串行口、I/O腳、編碼及譯碼器&存儲器的存儲工作原理分析
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論