一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)CPU結(jié)構(gòu)各部件的原理詳細(xì)分析

GReq_mcu168 ? 來(lái)源:未知 ? 作者:易水寒 ? 2018-08-18 10:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、 51單片機(jī)串行口工作原理

MCS-51系列單片機(jī)片內(nèi)有一個(gè)串行I/O端口,通過(guò)引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進(jìn)行全雙工的串行異步通信。

1.串行端口的基本特點(diǎn)

8031單片機(jī)的串行端口有4種基本工作方式,通過(guò)編程設(shè)置,可以使其工作在任一方式,以滿足不同應(yīng)用場(chǎng)合的需要。其中,方式0主要用于外接移位寄存器,以擴(kuò)展單片機(jī)的I/O電路;方式1多用于雙機(jī)之間或與外設(shè)電路的通信;方式2,3除有方式l的功能外,還可用作多機(jī)通信,以構(gòu)成分布式多微機(jī)系統(tǒng)。

串行端口有兩個(gè)控制寄存器,用來(lái)設(shè)置工作方式、發(fā)送或接收的狀態(tài)、特征位、數(shù)據(jù)傳送的波特率(每秒傳送的位數(shù))以及作為中斷標(biāo)志等。

串行端口有一個(gè)數(shù)據(jù)寄存器SBUF(在特殊功能寄存器中的字節(jié)地址為99H),該寄存器為發(fā)送和接收所共同。發(fā)送時(shí),只寫不讀;接收時(shí),只讀不寫。在一定條件下,向陽(yáng)UF寫入數(shù)據(jù)就啟動(dòng)了發(fā)送過(guò)程;讀SBUf就啟動(dòng)了接收過(guò)程。

串行通信的波特率可以程控設(shè)定。在不同工作方式中,由時(shí)鐘振蕩頻率的分頻值或由定時(shí)器Tl的定時(shí)溢出時(shí)間確定,使用十分方便靈活。

2.串行端口的工作方式

①方式0

8位移位寄存器輸入/輸出方式。多用于外接移位寄存器以擴(kuò)展I/O端口。波特率固定為fosc/12。其中,fosc為時(shí)鐘頻率。

在方式0中,串行端口作為輸出時(shí),只要向串行緩沖器SBUF寫入一字節(jié)數(shù)據(jù)后,串行端口就把此8位數(shù)據(jù)以等的波特率,從RXD引腳逐位輸出(從低位到高位);此時(shí),TXD輸出頻率為fosc/12的同步移位脈沖。數(shù)據(jù)發(fā)送前,僅管不使用中斷,中斷標(biāo)志TI還必須清零,8位數(shù)據(jù)發(fā)送完后,TI自動(dòng)置1。如要再發(fā)送,必須用軟件將TI清零。

串行端口作為輸入時(shí),RXD為數(shù)據(jù)輸入端,TXD仍為同步信號(hào)輸出端,輸出頻率為fosc/12的同步移位脈沖,使外部數(shù)據(jù)逐位移入RxD。當(dāng)接收到8位數(shù)據(jù)(一幀)后,中斷標(biāo)志RI自動(dòng)置。如果再接收,必須用軟件先將RI清零。

串行方式0發(fā)送和接收的時(shí)序過(guò)程見(jiàn)下圖。

②方式1

10位異步通信方式。其中,1個(gè)起始位(0),8個(gè)數(shù)據(jù)位(由低位到高位)和1個(gè)停止位(1)。波特率由定時(shí)器T1的溢出率和SMOD位的狀態(tài)確定。

一條寫SBUF指令就可啟動(dòng)數(shù)據(jù)發(fā)送過(guò)程。在發(fā)送移位時(shí)鐘(由波特率確定)的同步下,從TxD先送出起始位,然后是8位數(shù)據(jù)位,最后是停止位。這樣的一幀10位數(shù)據(jù)發(fā)送完后,中斷標(biāo)志TI置位。

在允許接收的條件下(REN=1),當(dāng)RXD出現(xiàn)由1到O的負(fù)跳變時(shí),即被當(dāng)成是串行發(fā)送來(lái)的一幀數(shù)據(jù)的起始位,從而啟動(dòng)一次接收過(guò)程。當(dāng)8位數(shù)據(jù)接收完,并檢測(cè)到高電乎停止位后,即把接收到的8位數(shù)據(jù)裝入SBUF,置位RI,一幀數(shù)據(jù)的接收過(guò)程就完成了。

方式1的數(shù)據(jù)傳送波特率可以編程設(shè)置,使用范圍寬,其計(jì)算式為:

波特率=2SMOD/32×(定時(shí)器T1的溢出率)

其中,SMOD是控制寄存器PCON中的一位程控位,其取值有0和l兩種狀態(tài)。顯然,當(dāng)SMOD=0時(shí),波特率=1/32(定時(shí)器Tl溢出率),而當(dāng)SMOD=1時(shí),波特率=1/16(定時(shí)器T1溢出率)。所謂定時(shí)器的溢出率,就是指定時(shí)器一秒鐘內(nèi)的溢出次數(shù)。波特率的算法,以及要求一定波特率時(shí)定時(shí)器定時(shí)初值的求法,后面將詳細(xì)討論。

串行方式1的發(fā)送和接收過(guò)程的時(shí)序見(jiàn)下圖。

③方式2,3

11位異步通信方式。其中,1個(gè)起始位(0),8個(gè)數(shù)據(jù)位(由低位到高位),1個(gè)附加的第9位和1個(gè)停止住(1)。方式2和方式3除波特率不同外,其它性能完全相同。方式2,3的發(fā)送、接收時(shí)序見(jiàn)下圖。

由圖可見(jiàn),方式2和方式3與方式l的操作過(guò)程基本相同,主要差別在于方式2,3有第9位數(shù)據(jù)。

發(fā)送時(shí),發(fā)送機(jī)的這第9位數(shù)據(jù)來(lái)自該機(jī)SCON中的TB8,而接收機(jī)將接收到的這第9位數(shù)據(jù)送入本機(jī)SCON中的RB8。這個(gè)第9位數(shù)據(jù)通常用作數(shù)據(jù)的奇偶檢驗(yàn)位,或在多機(jī)通信中作為地址/數(shù)據(jù)的特征位。

方式2和方式3的波特率計(jì)算式如下:

方式2的波特率=2SMOD/64×fosc

方式3的波特率=2SMOD/32×定時(shí)器T1的溢出率

由此可見(jiàn),在晶振時(shí)鐘頻率一定的條件下,方式2只有兩種波特率,而方式3可通過(guò)編程設(shè)置成多種波特率,這正是這兩種方式的差別所在。

3.串行端口的控制寄存器

串行端口共有2個(gè)控制寄存器SCON和PCON,用以設(shè)置串行端口的工作方式、接收/發(fā)送的運(yùn)行狀態(tài)、接收/發(fā)送數(shù)據(jù)的特征、波特率的大小,以及作為運(yùn)行的中斷標(biāo)志等。

二、51單片機(jī)I/O腳工作原理分析

一、P0端口的結(jié)構(gòu)及工作原理

P0端口8位中的一位結(jié)構(gòu)圖見(jiàn)下圖:

由上圖可見(jiàn),P0端口由鎖存器、輸入緩沖器、切換開(kāi)關(guān)、一個(gè)與非門、一個(gè)與門及場(chǎng)效應(yīng)管驅(qū)動(dòng)電路構(gòu)成。再看圖的右邊,標(biāo)號(hào)為P0.X引腳的圖標(biāo),也就是說(shuō)P0.X引腳可以是P0.0到P0.7的任何一位,即在P0口有8個(gè)與上圖相同的電路組成。

下面,我們先就組成P0口的每個(gè)單元部份跟大家介紹一下:

先看輸入緩沖器:在P0口中,有兩個(gè)三態(tài)的緩沖器,在學(xué)數(shù)字電路時(shí),我們已知道,三態(tài)門有三個(gè)狀態(tài),即在其的輸出端可以是高電平、低電平,同時(shí)還有一種就是高阻狀態(tài)(或稱為禁止?fàn)顟B(tài)),大家看上圖,上面一個(gè)是讀鎖存器的緩沖器,也就是說(shuō),要讀取D鎖存器輸出端Q的數(shù)據(jù),那就得使讀鎖存器的這個(gè)緩沖器的三態(tài)控制端(上圖中標(biāo)號(hào)為‘讀鎖存器’端)有效。下面一個(gè)是讀引腳的緩沖器,要讀取P0.X引腳上的數(shù)據(jù),也要使標(biāo)號(hào)為‘讀引腳’的這個(gè)三態(tài)緩沖器的控制端有效,引腳上的數(shù)據(jù)才會(huì)傳輸?shù)轿覀儐纹瑱C(jī)的內(nèi)部數(shù)據(jù)總線上。

D鎖存器:構(gòu)成一個(gè)鎖存器,通常要用一個(gè)時(shí)序電路,時(shí)序的單元電路在學(xué)數(shù)字電路時(shí)我們已知道,一個(gè)觸發(fā)器可以保存一位的二進(jìn)制數(shù)(即具有保持功能),在51單片機(jī)的32根I/O口線中都是用一個(gè)D觸發(fā)器來(lái)構(gòu)成鎖存器的。大家看上圖中的D鎖存器,D端是數(shù)據(jù)輸入端,CP是控制端(也就是時(shí)序控制信號(hào)輸入端),Q是輸出端,Q非是反向輸出端。

對(duì)于D觸發(fā)器來(lái)講,當(dāng)D輸入端有一個(gè)輸入信號(hào),如果這時(shí)控制端CP沒(méi)有信號(hào)(也就是時(shí)序脈沖沒(méi)有到來(lái)),這時(shí)輸入端D的數(shù)據(jù)是無(wú)法傳輸?shù)捷敵龆薗及反向輸出端Q非的。如果時(shí)序控制端CP的時(shí)序脈沖一旦到了,這時(shí)D端輸入的數(shù)據(jù)就會(huì)傳輸?shù)絈及Q非端。數(shù)據(jù)傳送過(guò)來(lái)后,當(dāng)CP時(shí)序控制端的時(shí)序信號(hào)消失了,這時(shí),輸出端還會(huì)保持著上次輸入端D的數(shù)據(jù)(即把上次的數(shù)據(jù)鎖存起來(lái)了)。如果下一個(gè)時(shí)序控制脈沖信號(hào)來(lái)了,這時(shí)D端的數(shù)據(jù)才再次傳送到Q端,從而改變Q端的狀態(tài)。

多路開(kāi)關(guān):在51單片機(jī)中,當(dāng)內(nèi)部的存儲(chǔ)器夠用(也就是不需要外擴(kuò)展存儲(chǔ)器時(shí),這里講的存儲(chǔ)器包括數(shù)據(jù)存儲(chǔ)器及程序存儲(chǔ)器)時(shí),P0口可以作為通用的輸入輸出端口(即I/O)使用,對(duì)于8031(內(nèi)部沒(méi)有ROM)的單片機(jī)或者編寫的程序超過(guò)了單片機(jī)內(nèi)部的存儲(chǔ)器容量,需要外擴(kuò)存儲(chǔ)器時(shí),P0口就作為‘地址/數(shù)據(jù)’總線使用。那么這個(gè)多路選擇開(kāi)關(guān)就是用于選擇是做為普通I/O口使用還是作為‘?dāng)?shù)據(jù)/地址’總線使用的選擇開(kāi)關(guān)了。大家看上圖,當(dāng)多路開(kāi)關(guān)與下面接通時(shí),P0口是作為普通的I/O口使用的,當(dāng)多路開(kāi)關(guān)是與上面接通時(shí),P0口是作為‘地址/數(shù)據(jù)’總線使用的。

輸出驅(qū)動(dòng)部份:從上圖中我們已看出,P0口的輸出是由兩個(gè)MOS管組成的推拉式結(jié)構(gòu),也就是說(shuō),這兩個(gè)MOS管一次只能導(dǎo)通一個(gè),當(dāng)V1導(dǎo)通時(shí),V2就截止,當(dāng)V2導(dǎo)通時(shí),V1截止。

與門、與非門:這兩個(gè)單元電路的邏輯原理我們?cè)诘谒恼n數(shù)字及常用邏輯電路時(shí)已做過(guò)介紹,不明白的同學(xué)請(qǐng)回到第四節(jié)去看看。

前面我們已將P0口的各單元部件進(jìn)行了一個(gè)詳細(xì)的講解,下面我們就來(lái)研究一下P0口做為I/O口及地址/數(shù)據(jù)總線使用時(shí)的具體工作過(guò)程。

1、作為I/O端口使用時(shí)的工作原理

P0口作為I/O端口使用時(shí),多路開(kāi)關(guān)的控制信號(hào)為0(低電平),看上圖中的線線部份,多路開(kāi)關(guān)的控制信號(hào)同時(shí)與與門的一個(gè)輸入端是相接的,我們知道與門的邏輯特點(diǎn)是“全1出1,有0出0”那么控制信號(hào)是0的話,這時(shí)與門輸出的也是一個(gè)0(低電平),與讓的輸出是0,V1管就截止,在多路控制開(kāi)關(guān)的控制信號(hào)是0(低電平)時(shí),多路開(kāi)關(guān)是與鎖存器的Q非端相接的(即P0口作為I/O口線使用)。

P0口用作I/O口線,其由數(shù)據(jù)總線向引腳輸出(即輸出狀態(tài)Output)的工作過(guò)程:當(dāng)寫鎖存器信號(hào)CP 有效,數(shù)據(jù)總線的信號(hào)→鎖存器的輸入端D→鎖存器的反向輸出Q非端→多路開(kāi)關(guān)→V2管的柵極→V2的漏極到輸出端P0.X。前面我們已講了,當(dāng)多路開(kāi)關(guān)的控制信號(hào)為低電平0時(shí),與門輸出為低電平,V1管是截止的,所以作為輸出口時(shí),P0是漏極開(kāi)路輸出,類似于OC門,當(dāng)驅(qū)動(dòng)上接電流負(fù)載時(shí),需要外接上拉電阻。

下圖就是由內(nèi)部數(shù)據(jù)總線向P0口輸出數(shù)據(jù)的流程圖(紅色箭頭)。

P0口用作I/O口線,其由引腳向內(nèi)部數(shù)據(jù)總線輸入(即輸入狀態(tài)Input)的工作過(guò)程:數(shù)據(jù)輸入時(shí)(讀P0口)有兩種情況

1、讀引腳

讀芯片引腳上的數(shù)據(jù),讀引腳數(shù)時(shí),讀引腳緩沖器打開(kāi)(即三態(tài)緩沖器的控制端要有效),通過(guò)內(nèi)部數(shù)據(jù)總線輸入,請(qǐng)看下圖(紅色簡(jiǎn)頭)。

2、讀鎖存器

通過(guò)打開(kāi)讀鎖存器三態(tài)緩沖器讀取鎖存器輸出端Q的狀態(tài),請(qǐng)看下圖(紅色箭頭):

在輸入狀態(tài)下,從鎖存器和從引腳上讀來(lái)的信號(hào)一般是一致的,但也有例外。例如,當(dāng)從內(nèi)部總線輸出低電平后,鎖存器Q=0,Q非=1,場(chǎng)效應(yīng)管T2開(kāi)通,端口線呈低電平狀態(tài)。此時(shí)無(wú)論端口線上外接的信號(hào)是低電乎還是高電平,從引腳讀入單片機(jī)的信號(hào)都是低電平,因而不能正確地讀入端口引腳上的信號(hào)。又如,當(dāng)從內(nèi)部總線輸出高電平后,鎖存器Q=1,Q非=0,場(chǎng)效應(yīng)管T2截止。如外接引腳信號(hào)為低電平,從引腳上讀入的信號(hào)就與從鎖存器讀入的信號(hào)不同。為此,8031單片機(jī)在對(duì)端口P0一P3的輸入操作上,有如下約定:為此,8051單片機(jī)在對(duì)端口P0一P3的輸入操作上,有如下約定:凡屬于讀-修改-寫方式的指令,從鎖存器讀入信號(hào),其它指令則從端口引腳線上讀入信號(hào)。

讀-修改-寫指令的特點(diǎn)是,從端口輸入(讀)信號(hào),在單片機(jī)內(nèi)加以運(yùn)算(修改)后,再輸出(寫)到該端口上。下面是幾條讀--修改-寫指令的例子。

這樣安排的原因在于讀-修改-寫指令需要得到端口原輸出的狀態(tài),修改后再輸出,讀鎖存器而不是讀引腳,可以避免因外部電路的原因而使原端口的狀態(tài)被讀錯(cuò)。

P0端口是8031單片機(jī)的總線口,分時(shí)出現(xiàn)數(shù)據(jù)D7一D0、低8位地址A7一AO,以及三態(tài),用來(lái)接口存儲(chǔ)器、外部電路與外部設(shè)備。P0端口是使用最廣泛的I/O端口。

2、作為地址/數(shù)據(jù)復(fù)用口使用時(shí)的工作原理

在訪問(wèn)外部存儲(chǔ)器時(shí)P0口作為地址/數(shù)據(jù)復(fù)用口使用。

這時(shí)多路開(kāi)關(guān)‘控制’信號(hào)為‘1’,‘與門’解鎖,‘與門’輸出信號(hào)電平由“地址/數(shù)據(jù)”線信號(hào)決定;多路開(kāi)關(guān)與反相器的輸出端相連,地址信號(hào)經(jīng)“地址/數(shù)據(jù)”線→反相器→V2場(chǎng)效應(yīng)管柵極→V2漏極輸出。

例如:控制信號(hào)為1,地址信號(hào)為“0”時(shí),與門輸出低電平,V1管截止;反相器輸出高電平,V2管導(dǎo)通,輸出引腳的地址信號(hào)為低電平。請(qǐng)看下圖(蘭色字體為電平):

反之,控制信號(hào)為“1”、地址信號(hào)為“1”,“與門”輸出為高電平,V1管導(dǎo)通;反相器輸出低電平,V2管截止,輸出引腳的地址信號(hào)為高電平。請(qǐng)看下圖(蘭色字體為電平):

可見(jiàn),在輸出“地址/數(shù)據(jù)”信息時(shí),V1、V2管是交替導(dǎo)通的,負(fù)載能力很強(qiáng),可以直接與外設(shè)存儲(chǔ)器相連,無(wú)須增加總線驅(qū)動(dòng)器。

P0口又作為數(shù)據(jù)總線使用。在訪問(wèn)外部程序存儲(chǔ)器時(shí),P0口輸出低8位地址信息后,將變?yōu)閿?shù)據(jù)總線,以便讀指令碼(輸入)。

在取指令期間,“控制”信號(hào)為“0”,V1管截止,多路開(kāi)關(guān)也跟著轉(zhuǎn)向鎖存器反相輸出端Q非;CPU自動(dòng)將0FFH(11111111,即向D鎖存器寫入一個(gè)高電平‘1’)寫入P0口鎖存器,使V2管截止,在讀引腳信號(hào)控制下,通過(guò)讀引腳三態(tài)門電路將指令碼讀到內(nèi)部總線。請(qǐng)看下圖

如果該指令是輸出數(shù)據(jù),如MOVX @DPTR,A(將累加器的內(nèi)容通過(guò)P0口數(shù)據(jù)總線傳送到外部RAM中),則多路開(kāi)關(guān)“控制”信號(hào)為‘1’,“與門”解鎖,與輸出地址信號(hào)的工作流程類似,數(shù)據(jù)據(jù)由“地址/數(shù)據(jù)”線→反相器→V2場(chǎng)效應(yīng)管柵極→V2漏極輸出。

如果該指令是輸入數(shù)據(jù)(讀外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器),如MOVX A,@DPTR(將外部RAM某一存儲(chǔ)單元內(nèi)容通過(guò)P0口數(shù)據(jù)總線輸入到累加器A中),則輸入的數(shù)據(jù)仍通過(guò)讀引腳三態(tài)緩沖器到內(nèi)部總線,其過(guò)程類似于上圖中的讀取指令碼流程圖。

通過(guò)以上的分析可以看出,當(dāng)P0作為地址/數(shù)據(jù)總線使用時(shí),在讀指令碼或輸入數(shù)據(jù)前,CPU自動(dòng)向P0口鎖存器寫入0FFH,破壞了P0口原來(lái)的狀態(tài)。因此,不能再作為通用的I/O端口。大家以后在系統(tǒng)設(shè)計(jì)時(shí)務(wù)必注意,即程序中不能再含有以P0口作為操作數(shù)(包含源操作數(shù)和目的操作數(shù))的指令。

二、P1端口的結(jié)構(gòu)及工作原理

P1口的結(jié)構(gòu)最簡(jiǎn)單,用途也單一,僅作為數(shù)據(jù)輸入/輸出端口使用。輸出的信息有鎖存,輸入有讀引腳和讀鎖存器之分。P1端口的一位結(jié)構(gòu)見(jiàn)下圖.

由圖可見(jiàn),P1端口與P0端口的主要差別在于,P1端口用內(nèi)部上拉電阻R代替了P0端口的場(chǎng)效應(yīng)管T1,并且輸出的信息僅來(lái)自內(nèi)部總線。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場(chǎng)效應(yīng)管反相后,鎖存在端口線上,所以,P1端口是具有輸出鎖存的靜態(tài)口。

由上圖可見(jiàn),要正確地從引腳上讀入外部信息,必須先使場(chǎng)效應(yīng)管關(guān)斷,以便由外部輸入的信息確定引腳的狀態(tài)。為此,在作引腳讀入前,必須先對(duì)該端口寫入l。具有這種操作特點(diǎn)的輸入/輸出端口,稱為準(zhǔn)雙向I/O口。8051單片機(jī)的P1、P2、P3都是準(zhǔn)雙向口。P0端口由于輸出有三態(tài)功能,輸入前,端口線已處于高阻態(tài),無(wú)需先寫入l后再作讀操作。

P1口的結(jié)構(gòu)相對(duì)簡(jiǎn)單,前面我們已詳細(xì)的分析了P0口,只要大家認(rèn)真的分析了P0口的工作原理,P1口我想大家都有能力去分析,這里我就不多論述了。

單片機(jī)復(fù)位后,各個(gè)端口已自動(dòng)地被寫入了1,此時(shí),可直接作輸入操作。如果在應(yīng)用端口的過(guò)程中,已向P1一P3端口線輸出過(guò)0,則再要輸入時(shí),必須先寫1后再讀引腳,才能得到正確的信息。此外,隨輸入指令的不同,H端口也有讀鎖存器與讀引腳之分。

三、P2端口的結(jié)構(gòu)及工作原理:

P2端口的一位結(jié)構(gòu)見(jiàn)下圖:

由圖可見(jiàn),P2端口在片內(nèi)既有上拉電阻,又有切換開(kāi)關(guān)MUX,所以P2端口在功能上兼有P0端口和P1端口的特點(diǎn)。這主要表現(xiàn)在輸出功能上,當(dāng)切換開(kāi)關(guān)向下接通時(shí),從內(nèi)部總線輸出的一位數(shù)據(jù)經(jīng)反相器和場(chǎng)效應(yīng)管反相后,輸出在端口引腳線上;當(dāng)多路開(kāi)關(guān)向上時(shí),輸出的一位地址信號(hào)也經(jīng)反相器和場(chǎng)效應(yīng)管反相后,輸出在端口引腳線上。

對(duì)于8031單片機(jī)必須外接程序存儲(chǔ)器才能構(gòu)成應(yīng)用電路(或者我們的應(yīng)用電路擴(kuò)展了外部存儲(chǔ)器),而P2端口就是用來(lái)周期性地輸出從外存中取指令的地址(高8位地址),因此,P2端口的多路開(kāi)關(guān)總是在進(jìn)行切換,分時(shí)地輸出從內(nèi)部總線來(lái)的數(shù)據(jù)和從地址信號(hào)線上來(lái)的地址。因此P2端口是動(dòng)態(tài)的I/O端口。輸出數(shù)據(jù)雖被鎖存,但不是穩(wěn)定地出現(xiàn)在端口線上。其實(shí),這里輸出的數(shù)據(jù)往往也是一種地址,只不過(guò)是外部RAM的高8位地址。

在輸入功能方面,P2端口與P0和H端口相同,有讀引腳和讀鎖存器之分,并且P2端口也是準(zhǔn)雙向口。

可見(jiàn),P2端口的主要特點(diǎn)包括:

①不能輸出靜態(tài)的數(shù)據(jù);

②自身輸出外部程序存儲(chǔ)器的高8位地址;

②執(zhí)行MOVX指令時(shí),還輸出外部RAM的高位地址,故稱P2端口為動(dòng)態(tài)地址端口。

即然P2口可以作為I/O口使用,也可以作為地址總線使用,下面我們就不分析下它的兩種工作狀態(tài)。

1、作為I/O端口使用時(shí)的工作過(guò)程

當(dāng)沒(méi)有外部程序存儲(chǔ)器或雖然有外部數(shù)據(jù)存儲(chǔ)器,但容易不大于256B,即不需要高8位地址時(shí)(在這種情況下,不能通過(guò)數(shù)據(jù)地址寄存器DPTR讀寫外部數(shù)據(jù)存儲(chǔ)器),P2口可以I/O口使用。這時(shí),“控制”信號(hào)為“0”,多路開(kāi)關(guān)轉(zhuǎn)向鎖存器同相輸出端Q,輸出信號(hào)經(jīng)內(nèi)部總線→鎖存器同相輸出端Q→反相器→V2管柵極→V2管9漏極輸出。

由于V2漏極帶有上拉電阻,可以提供一定的上拉電流,負(fù)載能力約為8個(gè)TTL與非門;作為輸出口前,同樣需要向鎖存器寫入“1”,使反相器輸出低電平,V2管截止,即引腳懸空時(shí)為高電平,防止引腳被鉗位在低電平。讀引腳有效后,輸入信息經(jīng)讀引腳三態(tài)門電路到內(nèi)部數(shù)據(jù)總線。

2、作為地址總線使用時(shí)的工作過(guò)程

P2口作為地址總線時(shí),“控制”信號(hào)為‘1’,多路開(kāi)關(guān)車向地址線(即向上接通),地址信息經(jīng)反相器→V2管柵極→漏極輸出。由于P2口輸出高8位地址,與P0口不同,無(wú)須分時(shí)使用,因此P2口上的地址信息(程序存儲(chǔ)器上的A15~A8)功數(shù)據(jù)地址寄存器高8位DPH保存時(shí)間長(zhǎng),無(wú)須鎖存。

四、P3端口的結(jié)構(gòu)及工作原理

P3口是一個(gè)多功能口,它除了可以作為I/O口外,還具有第二功能,P3端口的一位結(jié)構(gòu)見(jiàn)下圖。

由上圖可見(jiàn),P3端口和Pl端口的結(jié)構(gòu)相似,區(qū)別僅在于P3端口的各端口線有兩種功能選擇。當(dāng)處于第一功能時(shí),第二輸出功能線為1,此時(shí),內(nèi)部總線信號(hào)經(jīng)鎖存器和場(chǎng)效應(yīng)管輸入/輸出,其作用與P1端口作用相同,也是靜態(tài)準(zhǔn)雙向I/O端口。當(dāng)處于第二功能時(shí),鎖存器輸出1,通過(guò)第二輸出功能線輸出特定的內(nèi)含信號(hào),在輸入方面,即可以通過(guò)緩沖器讀入引腳信號(hào),還可以通過(guò)替代輸入功能讀入片內(nèi)的特定第二功能信號(hào)。由于輸出信號(hào)鎖存并且有雙重功能,故P3端口為靜態(tài)雙功能端口。

P3口的特殊功能(即第二功能):

使P3端品各線處于第二功能的條件是:

1、串行I/O處于運(yùn)行狀態(tài)(RXD,TXD);

2、打開(kāi)了處部中斷(INT0,INT1);

3、定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)(T0,T1)

4、執(zhí)行讀寫外部RAM的指令(RD,WR)

在應(yīng)用中,如不設(shè)定P3端口各位的第二功能(WR,RD信叼的產(chǎn)生不用設(shè)置),則P3端口線自動(dòng)處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài)。在更多的場(chǎng)合是根據(jù)應(yīng)用的需要,把幾條端口線設(shè)置為第二功能,而另外幾條端口線處于第一功能運(yùn)行狀態(tài)。在這種情況下,不宜對(duì)P3端口作字節(jié)操作,需采用位操作的形式。

端口的負(fù)載能力和輸入/輸出操作:

P0端口能驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。如需增加負(fù)載能力,可在P0總線上增加總線驅(qū)動(dòng)器。P1,P2,P3端口各能驅(qū)動(dòng)4個(gè)LSTTL負(fù)載。

前已述及,由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以對(duì)這些端口寄存器的讀/寫就實(shí)現(xiàn)了信息從相應(yīng)端口的輸入/輸出。例如:

MOV A, P1 ;把Pl端口線上的信息輸入到A

MoV P1, A ;把A的內(nèi)容由P1端口輸出

MOV P3, #0FFH ;使P3端口線各位置l

這里我們已將51單片機(jī)的4個(gè)8位的并行口跟大家一起來(lái)分析了一下~

三、編碼及譯碼器工作原理分析

這里主要簡(jiǎn)單介紹下,學(xué)過(guò)數(shù)字電路對(duì)編碼譯碼了解的朋友可以跳過(guò)這部分。

把所使用的每一種二進(jìn)制代碼狀態(tài)都賦于特定的含義,表示一個(gè)特定的信號(hào)或?qū)ο?,叫編碼。如用四位二進(jìn)制數(shù)的0000~1001這十種狀太,分別表示0~9這十個(gè)十進(jìn)制數(shù)碼,稱為8421編碼。反過(guò)來(lái)把代碼的特定含義翻譯出來(lái),稱為譯碼。

計(jì)算機(jī)在處理各種文字符號(hào)或數(shù)碼時(shí),必須把這些信息進(jìn)行二進(jìn)制編碼,在編碼時(shí)所使用的第一種二進(jìn)制代碼狀態(tài)都賦予了特定的含義,即表示一個(gè)確定的信號(hào)或者對(duì)象,實(shí)現(xiàn)這種功能的電路叫編碼器,如用于鍵盤的BCD碼,ASCII碼編碼器等。

單片機(jī)外圍電路用譯碼器較多,所以在這節(jié)課我們主要與大家一起來(lái)學(xué)習(xí)下譯碼器的工作原理(購(gòu)買了本站產(chǎn)品的朋友,在我們配套的多媒體教學(xué)光盤中有相關(guān)的教學(xué)內(nèi)容,建議大家觀看),把代碼的含義‘翻譯’成相應(yīng)的輸出信號(hào),以表示其原意。其功能恰恰與編碼器相反。

譯碼器可以將輸入代碼的狀態(tài)翻譯成相應(yīng)的輸出信號(hào),以高、低電平的形式在各自的輸出端口送出,以表示其意愿。譯碼器有多個(gè)輸入端和多個(gè)輸出端。假如輸入的端個(gè)數(shù)為,每個(gè)輸出端只能有兩個(gè)狀態(tài),則輸出端個(gè)數(shù)最多有2n個(gè)。常用譯碼器輸入、輸出端頭數(shù)來(lái)稱呼譯碼器,如3線-8線譯碼器,4線-10線譯碼器等。我們經(jīng)常用到的74138就是一個(gè)三線-八線譯碼器,朋友們可以到百度搜索74138的中文資料。

編碼、譯碼的概念我們了解下,下面我們就來(lái)重點(diǎn)來(lái)講一下三-八譯碼器的工作原理,這在我們51單片機(jī)的接口電路中也是經(jīng)常用到的。

74138的工作原理如下圖所示:

從上圖可看出,74138有三個(gè)輸入端:A0、A1、A2和八個(gè)輸出端Q0~Q7。當(dāng)輸入端A0、A1、A2的編碼為000時(shí),譯碼器輸出為Q0=0,而Q1~Q7=1。即Q0對(duì)應(yīng)于A0、A1、A2為000狀態(tài),低電平有效。A0、A1、A2的另外7種組合見(jiàn)后面的真值表。

圖中S1、S2、S3為使能控制端,起到控制譯碼器是否能進(jìn)行譯碼的作用。只有S1為高電平,S2、S3均為低電平時(shí),才能進(jìn)行譯碼,否則不論輸入羰輸入為何值,每個(gè)輸出端均為1。

下圖是輸入端A0、A1、A2為000,控制端S1=1、S1=0、S2=0的電平示意圖(紅色數(shù)字為端口電平),大家可按下圖進(jìn)行分析,也可以分析輸出端另外七種組合時(shí)的輸出情況。

四、51單片機(jī)CPU結(jié)構(gòu)分析

在前面的文章里我們已知道了單片機(jī)內(nèi)部有一個(gè)8位的CPU,同時(shí)知道了CPU內(nèi)部包含了運(yùn)算器,控制器及若干寄存器。在這節(jié)課,我們就與大家一起來(lái)討論一下51單片機(jī)CPU的內(nèi)部結(jié)構(gòu)及工作原理。

從上圖中我們可以看到,在虛線框內(nèi)的就是CPU的內(nèi)部結(jié)構(gòu)了,8位的MCS-51單片機(jī)的CPU內(nèi)部有數(shù)術(shù)邏輯單元ALU(Arithmetic Logic Unit)、累加器A(8位)、寄存器B(8位)、程序狀態(tài)字PSW(8位)、程序計(jì)數(shù)器PC(有時(shí)也稱為指令指針,即IP,16位)、地址寄存器AR(16位)、數(shù)據(jù)寄存器DR(8位)、指令寄存器IR(8位)、指令譯碼器ID、控制器等部件組成。

1、運(yùn)算器(ALU)的主要功能

A)算術(shù)和邏輯運(yùn)算,可對(duì)半字節(jié)(一個(gè)字節(jié)是8位,半個(gè)字節(jié)就是4位)和單字節(jié)數(shù)據(jù)進(jìn)行操作。

B)加、減、乘、除、加1、減1、比較等算術(shù)運(yùn)算。

C)與、或、異或、求補(bǔ)、循環(huán)等邏輯運(yùn)算。

D)位處理功能(即布爾處理器)。

由于ALU內(nèi)部沒(méi)有寄存器,參加運(yùn)算的操作數(shù),必須放在累加器A中。累加器A也用于存放運(yùn)算結(jié)果。

例如:執(zhí)行指令 ADD A,B

執(zhí)行這條指令時(shí),累加器A中的內(nèi)容通過(guò)輸入口In_1輸入ALU,寄存器B通過(guò)內(nèi)部數(shù)據(jù)總線經(jīng)輸入口In_2輸入ALU,A+B的結(jié)果通過(guò)ALU的輸出口Out、內(nèi)部數(shù)據(jù)總線,送回到累加器A。

2、程序計(jì)數(shù)器PC

PC的作用是用來(lái)存放將要執(zhí)行的指令地址,共16位,可對(duì)64K ROM直接尋址,PC低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。也就是說(shuō),程序執(zhí)行到什么地方,程序計(jì)數(shù)器PC就指到哪里,它始終是跟躥著程序的執(zhí)行。我們知道,用戶程序是存放在內(nèi)部的ROM中的,我們要執(zhí)行程序就要從ROM中一個(gè)個(gè)字節(jié)的讀出來(lái),然后到CPU中去執(zhí)行,那么ROM具體執(zhí)行到哪一條呢?這就需要我們的程序計(jì)數(shù)器PC來(lái)指示。

程序計(jì)數(shù)器PC具有自動(dòng)加1的功能,即從存儲(chǔ)器中讀出一個(gè)字節(jié)的指令碼后,PC自動(dòng)加1(指向下一個(gè)存儲(chǔ)單元)。

3、指令寄存器IR

指令寄存器的作用就是用來(lái)存放即將執(zhí)行的指令代碼。

在這里我們先簡(jiǎn)單的了解下CPU執(zhí)行指令的過(guò)程,首先由程序存儲(chǔ)器(ROM)中讀取指令代碼送入到指令寄存器,經(jīng)譯碼器譯碼后再由定時(shí)與控制電路發(fā)出相應(yīng)的控制信號(hào),從而完成指令的功能。關(guān)于指令在單片機(jī)內(nèi)部的執(zhí)行過(guò)程,我們?cè)诤竺鎸?huì)在后面的文章里進(jìn)行詳細(xì)的講解。

4、指令譯碼器ID

用于對(duì)送入指令寄存器中的指令進(jìn)行譯碼,所謂譯碼就是把指令轉(zhuǎn)變成執(zhí)行此指令所需要的電信號(hào)。當(dāng)指令送入譯碼器后,由譯碼器對(duì)該指令進(jìn)行譯碼,根據(jù)譯碼器輸出的信號(hào),CPU控制電路定時(shí)地產(chǎn)生執(zhí)行該指令所需的各種控制信號(hào),使單片機(jī)正確的執(zhí)行程序所需要的各種操作。

5、地址寄存器AR(16位)

AR的作用是用來(lái)存放將要尋址的外部存儲(chǔ)器單元的地址信息,指令碼所在存儲(chǔ)單元的地址編碼,由程序計(jì)數(shù)器PC產(chǎn)生,而指令中操作數(shù)所在的存儲(chǔ)單元地址碼,由指令的操作數(shù)給定。從上圖中我們可以看到,地址寄存器AR通過(guò)地址總線AB與外部存儲(chǔ)器相連。

6、數(shù)據(jù)寄存器DR

用于存放寫入外部存儲(chǔ)器或I/O端口的數(shù)據(jù)信息??梢?jiàn),數(shù)據(jù)寄存器對(duì)輸出數(shù)據(jù)具有鎖存功能。數(shù)據(jù)寄存器與外部數(shù)據(jù)總線DB直接相連。

7、程序狀態(tài)字PSW

用于記錄運(yùn)算過(guò)程中的狀態(tài),如是否溢出、進(jìn)位等。

例如,累加器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è)置一個(gè)進(jìn)位標(biāo)志位C,當(dāng)執(zhí)行加法運(yùn)算出現(xiàn)進(jìn)位時(shí),進(jìn)位標(biāo)志位C為1。

8、時(shí)序部件

由時(shí)鐘電路和脈沖分配器組成,用于產(chǎn)生微操作控制部件所需的定時(shí)脈沖信號(hào)

五、存儲(chǔ)器的存儲(chǔ)原理

存儲(chǔ)器:用來(lái)存放計(jì)算機(jī)中的所有信息:包括程序、原始數(shù)據(jù)、運(yùn)算的中間結(jié)果及最終結(jié)果等。

只讀存儲(chǔ)器(ROM):只讀存儲(chǔ)器在使用時(shí),只能讀出而不能寫入,斷電后ROM中的信息不會(huì)丟失。因此一般用來(lái)存放一些固定程序,如監(jiān)控程序、子程序、字庫(kù)及數(shù)據(jù)表等。ROM按存儲(chǔ)信息的方法又可分為以下幾種:

1、掩膜ROM:

掩膜ROM也稱固定ROM,它是由廠家編好程序?qū)懭隦OM(稱固化)供用戶使用,用戶不能更改內(nèi)部程序,其特點(diǎn)是價(jià)格便宜。

2、可編程的只讀存儲(chǔ)器(PROM):

它的內(nèi)容可由用戶根據(jù)自已所編程序一次性寫入,一旦寫入,只能讀出,而不能再進(jìn)行更改,這類存儲(chǔ)器現(xiàn)在也稱為OTP(Only Time Programmable)。

3、可改寫的只讀存儲(chǔ)器EPROM:

前兩種ROM只能進(jìn)行一次性寫入,因而用戶較少使用,目前較為流行的ROM芯片為EPROM。因?yàn)樗膬?nèi)容可以通過(guò)紫外線照射而徹底擦除,擦除后又可重新寫入新的程序。

4、可電改寫只讀存儲(chǔ)器(EEPROM):

EEPROM可用電的方法寫入和清除其內(nèi)容,其編程電壓和清除電壓均與微機(jī)CPU的5V工作電壓相同,不需另加電壓。它既有與RAM一樣讀寫操作簡(jiǎn)便,又有數(shù)據(jù)不會(huì)因掉電而丟失的優(yōu)點(diǎn),因而使用極為方便?,F(xiàn)在這種存儲(chǔ)器的使用最為廣泛。

隨機(jī)存儲(chǔ)器(RAM):

這種存儲(chǔ)器又叫讀寫存儲(chǔ)器。它不僅能讀取存放在存儲(chǔ)單元中的數(shù)據(jù),還能隨時(shí)寫入新的數(shù)據(jù),寫入后原來(lái)的數(shù)據(jù)就丟失了。斷電后RAM中的信息全部丟失。因些,RAM常用于存放經(jīng)常要改變的程序或中間計(jì)算結(jié)果等信息。

RAM按照存儲(chǔ)信息的方式,又可分為靜態(tài)和動(dòng)態(tài)兩種:

1、靜態(tài)SRAM:其特點(diǎn)是只要有電源加于存儲(chǔ)器,數(shù)據(jù)就能長(zhǎng)期保存。

2、動(dòng)態(tài)DRAM:寫入的信息只能保存若干ms時(shí)間,因此,每隔一定時(shí)間必須重新寫入一次,以保持原來(lái)的信息不變。

可現(xiàn)場(chǎng)改寫的非易失性存儲(chǔ)器:

這種存儲(chǔ)器的特點(diǎn)是:從原理上看,它們屬于ROM型存儲(chǔ)器,從功能上看,它們又可以隨時(shí)改寫信息,作用又相當(dāng)于RAM。所以,ROM、RAM的定義和劃分已逐漸的失去意義。

1、快擦寫存儲(chǔ)器(FLASH)

這種存儲(chǔ)器是在EPROM和EEPROM的制造基礎(chǔ)上產(chǎn)生的一種非易失性存儲(chǔ)器。其集成度高,制造成本低于DRAM,既具有SRAM讀寫的靈活性和較快的訪問(wèn)速度,又具有ROM在斷電后可不丟失信息的特點(diǎn),所以發(fā)展迅速。

2、鐵電存儲(chǔ)器FRAM

它是利用鐵電材料極化方向來(lái)存儲(chǔ)數(shù)據(jù)的。它的特點(diǎn)是集成度高,讀寫速度快,成本低,讀寫周期短。

通過(guò)前面的學(xué)習(xí),我們已知道存儲(chǔ)器是計(jì)算機(jī)的重組成部份。存儲(chǔ)器是由大量緩沖寄存器組成的,其用途是存放程序和數(shù)據(jù),使計(jì)算機(jī)具有記憶功能。這些程序和數(shù)據(jù)在存儲(chǔ)器中是以二進(jìn)制代碼表示的。根據(jù)計(jì)算機(jī)的命令,按照指定地址,可以把代碼取出來(lái)或存入新代碼。

在這,我們的學(xué)習(xí)重點(diǎn)就是來(lái)研究一下存儲(chǔ)器的內(nèi)部結(jié)構(gòu)、工作原理及其存儲(chǔ)器的主要的技術(shù)指標(biāo)。

第一個(gè)要學(xué)習(xí)的問(wèn)題:存儲(chǔ)器單元和存儲(chǔ)單元地址:

存儲(chǔ)器是由大量寄存器組成的,其中每一個(gè)寄存器就稱為一個(gè)存儲(chǔ)單元。它可存放一個(gè)有獨(dú)立意義的二進(jìn)制代碼。一個(gè)代碼由若干位(bit)組成,代碼的位數(shù)稱為位長(zhǎng),習(xí)慣上也稱為字長(zhǎng)。

每個(gè)存儲(chǔ)單元存放幾位二進(jìn)制數(shù)呢?一般情況下,計(jì)算機(jī)中一個(gè)代碼的位數(shù)和它的算術(shù)運(yùn)算單元的位數(shù)是相同的。例如,8051單片機(jī)中算術(shù)單元是8位,則字長(zhǎng)就是8位。在計(jì)算機(jī)中把一個(gè)8位的二進(jìn)制代碼稱為一個(gè)字節(jié)(Byte),常寫為B。對(duì)于一個(gè)8位二進(jìn)制代碼的最低位稱為第0位(位0),最高位稱為第7位(位7)。

在計(jì)算機(jī)中的存儲(chǔ)器往往有成千上萬(wàn)個(gè)存儲(chǔ)單元,為了使存入和取出不發(fā)生混淆,必須給每個(gè)存儲(chǔ)單元一個(gè)唯一的固定編號(hào),這個(gè)編號(hào)就稱為存儲(chǔ)單元的地址。因?yàn)榇鎯?chǔ)單元的數(shù)量很大,我們不可能每個(gè)存儲(chǔ)單元都把線引到外部,如果每個(gè)存儲(chǔ)單元都引根線到外部,那一個(gè)8位的單片機(jī)就需外向外部引出65536根線了,這在現(xiàn)實(shí)中是不可能的。為了減少存儲(chǔ)器向外引出的地址線,在存儲(chǔ)器內(nèi)部都帶有譯碼器。根據(jù)二進(jìn)制編碼、譯碼的原理,除地線公用之外,n根導(dǎo)線可以譯成2n個(gè)地址號(hào)。例如,當(dāng)?shù)刂肪€為3根時(shí),可以譯成23=8個(gè)地址號(hào);地址線為3根時(shí),可以譯成28=256個(gè)地址號(hào)。依此類推,在8051單片機(jī)中有16根地址線,也就是說(shuō)在8051單片機(jī)中有216=65 536個(gè)地址號(hào),地址號(hào)的多少就是我們尋址范圍的大小,也就是前面我們提到過(guò)的8051單片機(jī)的尋址范圍是64K。

從上面的介紹可以看出,存儲(chǔ)單元地址和這個(gè)存儲(chǔ)單元的內(nèi)容含義是不同的。存儲(chǔ)單元如同一個(gè)旅館的每個(gè)房間;存儲(chǔ)單元地址則相當(dāng)于每個(gè)房間的房間號(hào);存儲(chǔ)單元內(nèi)容(二進(jìn)制代碼)就相當(dāng)于這個(gè)房間的房客。

前面我們已講過(guò),8051的單片機(jī)有16根地址線,它的存儲(chǔ)地址有216=65 536個(gè),這么多的存儲(chǔ)地址,而地址線卻只有16根,我們?cè)趺从?6根地址線來(lái)控制這6萬(wàn)多個(gè)存儲(chǔ)地址呢?接下來(lái)我們就這個(gè)問(wèn)題與大家一起做個(gè)探討:在上節(jié)課《第九課:51單片機(jī)CPU的結(jié)構(gòu)》時(shí)我們已知道,在51單片機(jī)的內(nèi)部有一個(gè)叫做譯碼器的部件。用16根地址線來(lái)控制65536個(gè)存儲(chǔ)地址,就是用譯碼來(lái)實(shí)現(xiàn)的。

我們知道,計(jì)算機(jī)可以進(jìn)行數(shù)學(xué)運(yùn)算,這可令我們非常的難以理解,計(jì)算機(jī)嗎,里面只不過(guò)是一些電子元件組成的,怎能么可以進(jìn)行數(shù)學(xué)運(yùn)算呢?我們做數(shù)學(xué)題時(shí)如25+36是這樣做的,先在紙上寫25,然后在下面寫36,然后大腦運(yùn)算,最后寫出結(jié)果,運(yùn)算的原材料:25、36和結(jié)果61都是寫在紙上的。計(jì)算機(jī)中又是怎樣存放的呢?為了解決定個(gè)問(wèn)題,我們先做一個(gè)實(shí)驗(yàn):

下面有一盞燈,我們知道燈要么亮,要么不亮,就有兩種狀態(tài),我們可以用“0”和“1”來(lái)代替這兩種狀態(tài),規(guī)定亮為“1”,不亮為“0”。南以上兩盞燈,一共有幾種狀態(tài)呢?

上面已例出,兩盞燈可以表達(dá)成00 01 10 11四種狀態(tài),那么三盞燈呢?

三盞燈應(yīng)該就是可以表達(dá)成000 001 010 011 100 101 110 111八種狀態(tài),

如果是八盞燈呢?那么其狀就表達(dá)就是00000000 00000001 00000010。。。。。11111111 共256種狀態(tài)。

我們來(lái)看,上面這些000 001 010。。。。等等這些數(shù)不就是我們學(xué)過(guò)的二進(jìn)制數(shù)嗎?本來(lái)燈的亮滅是一種物理現(xiàn)象,可當(dāng)我們把它們按一定的順序排列好后,燈的亮和滅就代表數(shù)字了。讓我們?cè)俪橄笠徊?,燈為什么?huì)亮呢?是因?yàn)檩敵鲭娐份敵龈唠娖剑o燈通了電。因此,燈亮和滅就可以用電路的輸出是高電平還是低電平來(lái)代替了。這樣,數(shù)字就和電平的高、低聯(lián)系上了。

位的含義:通過(guò)上面的實(shí)驗(yàn)我們已知道:一盞燈亮或者說(shuō)一根線的電平的高低,可以代表兩種狀態(tài):0和1。實(shí)際上這就是一個(gè)二進(jìn)制位,困此我們把一根線(或者一盞燈)稱為一“位”,用BIT表示。

字節(jié)的含義:一根線可以表示0和1,兩根線可以表達(dá)00,01,10,11四種狀態(tài),也就是可以表示0到3,而三根給可以表達(dá)0至7,計(jì)算機(jī)中通常用8根線放在一起,同時(shí)計(jì)數(shù),就可以表達(dá)到0~255共256種狀態(tài)。這8根線或者8位就稱之為一個(gè)字節(jié)(BYTE)。不要問(wèn)我為什么是8根而不是其它數(shù),因?yàn)槲乙膊恢?。(?jì)算機(jī)是一個(gè)人造的世界,不是自然界,很多事情無(wú)法問(wèn)為什么,只能說(shuō):字是一種規(guī)定,大家在以后的學(xué)習(xí)過(guò)程中也要注意這個(gè)問(wèn)題)。

存儲(chǔ)器是用來(lái)存放數(shù)據(jù)的地方。它是利用電平的高低來(lái)存放數(shù)據(jù)的。也就是說(shuō),它存放的實(shí)際上是電平的高、低,而不是我們習(xí)慣認(rèn)為的1234這樣的數(shù)字。下面我們就來(lái)看看,單片機(jī)內(nèi)的存儲(chǔ)器是怎樣來(lái)尋址的,也就是怎么來(lái)找到我們存放在存儲(chǔ)器內(nèi)的數(shù)據(jù)。

MCS-51單片機(jī)在物理結(jié)構(gòu)上有四個(gè)存儲(chǔ)空間:

1、片內(nèi)程序存儲(chǔ)器

2、片外程序存儲(chǔ)器

3、片內(nèi)數(shù)據(jù)存儲(chǔ)器

4、片外數(shù)據(jù)存儲(chǔ)器

但在邏輯上,即從用戶的角度上,8051單片機(jī)有三個(gè)存儲(chǔ)空間:

1、片內(nèi)外統(tǒng)一編址的64K的程序存儲(chǔ)器地址空間

2、256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器的地址空間

3、以及64K片外數(shù)據(jù)存儲(chǔ)器的地址空間

在訪問(wèn)三個(gè)不同的邏輯空間時(shí),應(yīng)采用不同形式的指令(具體我們?cè)诤竺娴闹噶钕到y(tǒng)學(xué)習(xí)時(shí)將會(huì)講解),以產(chǎn)生不同的存儲(chǔ)器空間的選通信號(hào)。

程序存儲(chǔ)器

一個(gè)微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強(qiáng)大的硬件外,還需要它們運(yùn)行的軟件,其實(shí)微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計(jì)人員編寫的程序就存放在微處理器的程序存儲(chǔ)器中,俗稱只讀程序存儲(chǔ)器(ROM)。程序相當(dāng)于給微處理器處理問(wèn)題的一系列命令。其實(shí)程序和數(shù)據(jù)一樣,都是由機(jī)器碼組成的代碼串。只是程序代碼則存放于程序存儲(chǔ)器中。

MCS-51具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對(duì)于內(nèi)部無(wú)ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的 端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。對(duì)于內(nèi)部有ROM的8051等單片機(jī),正常運(yùn)行時(shí), 則需接高電平,使CPU先從內(nèi)部的程序存儲(chǔ)中讀取程序,當(dāng)PC值超過(guò)內(nèi)部ROM的容量時(shí),才會(huì)轉(zhuǎn)向外部的程序存儲(chǔ)器讀取程序。

當(dāng) =1時(shí),程序從片內(nèi)ROM開(kāi)始執(zhí)行,當(dāng)PC值超過(guò)片內(nèi)ROM容量時(shí)會(huì)自動(dòng)轉(zhuǎn)向外部ROM空間。

當(dāng) =0時(shí),程序從外部存儲(chǔ)器開(kāi)始執(zhí)行,例如前面提到的片內(nèi)無(wú)ROM的8031單片機(jī),在實(shí)際應(yīng)用中就要把8031的 引腳接為低電平。

8051片內(nèi)有4kB的程序存儲(chǔ)單元,其地址為0000H—0FFFH,單片機(jī)啟動(dòng)復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開(kāi)始執(zhí)行程序。但在程序存儲(chǔ)中有些特殊的單元,這在使用中應(yīng)加以注意:

其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從0000H單元開(kāi)始執(zhí)行程序,如果程序不是從0000H單元開(kāi)始,則應(yīng)在這三個(gè)單元中存放一條無(wú)條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。

另一組特殊單元是0003H—002AH,這40個(gè)單元各有用途,它們被均勻地分為五段,它們的定義如下:

0003H—000AH 外部中斷0中斷地址區(qū)。

000BH—0012H 定時(shí)/計(jì)數(shù)器0中斷地址區(qū)。

0013H—001AH 外部中斷1中斷地址區(qū)。

001BH—0022H 定時(shí)/計(jì)數(shù)器1中斷地址區(qū)。

0023H—002AH 串行中斷地址區(qū)。

可見(jiàn)以上的40個(gè)單元是專門用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動(dòng)轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。從上面可以看出,每個(gè)中斷服務(wù)程序只有8個(gè)字節(jié)單元,用8個(gè)字節(jié)來(lái)存放一個(gè)中斷服務(wù)程序顯然是不可能的。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,我們是在中斷響應(yīng)的地址區(qū)安放一條無(wú)條件轉(zhuǎn)移指令,指向程序存儲(chǔ)器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。

下圖是ROM的地址分配圖:

從上圖中大家可以看到,0000H-0002H,只有三個(gè)存儲(chǔ)單元,3個(gè)存儲(chǔ)單元在我們的程序存放時(shí)是存放不了實(shí)際意義的程序的,通常我們?cè)趯?shí)際編寫程序時(shí)是在這里安排一條ORG指令,通過(guò)ORG指令跳轉(zhuǎn)到從0033H開(kāi)始的用戶ROM區(qū)域,再來(lái)安排我們的程序語(yǔ)言。從0033開(kāi)始的用戶ROM區(qū)域用戶可以通過(guò)ORG指令任意安排,但在應(yīng)用中應(yīng)注意,不要超過(guò)了實(shí)際的存儲(chǔ)空間,不然程序就會(huì)找不到。

數(shù)據(jù)存儲(chǔ)器

數(shù)據(jù)存儲(chǔ)器也稱為隨機(jī)存取數(shù)據(jù)存儲(chǔ)器。數(shù)據(jù)存儲(chǔ)器分為內(nèi)部數(shù)據(jù)存儲(chǔ)和外部數(shù)據(jù)存儲(chǔ)。MCS-51內(nèi)部RAM有128或256個(gè)字節(jié)的用戶數(shù)據(jù)存儲(chǔ)(不同的型號(hào)有分別),片外最多可擴(kuò)展64KB的RAM,構(gòu)成兩個(gè)地址空間,訪問(wèn)片內(nèi)RAM用“MOV”指令,訪問(wèn)片外RAM用“MOVX”指令。它們是用于存放執(zhí)行的中間結(jié)果和過(guò)程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲(chǔ)器均可讀寫,部分單元還可以位尋址。

MCS-51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,即:

數(shù)據(jù)存儲(chǔ)器空間(低128單元);

特殊功能寄存器空間(高128單元);

這兩個(gè)空間是相連的,從用戶角度而言,低128單元才是真正的數(shù)據(jù)存儲(chǔ)器。下面我們就來(lái)詳細(xì)的與大家講解一下:

低128單元:

片內(nèi)數(shù)據(jù)存儲(chǔ)器為8位地址,所以最大可尋址的范圍為256個(gè)單元地址,對(duì)片外數(shù)據(jù)存儲(chǔ)器采用間接尋址方式,R0、R1和DPTR都可以做為間接尋址寄存器,R0、R1是8位的寄存器,即R0、R1的尋址范圍最大為256個(gè)單元,而DPTR是16位地址指針,尋址范圍就可達(dá)到64KB。也就是說(shuō)在尋址片外數(shù)據(jù)存儲(chǔ)器時(shí),尋址范圍超過(guò)了256B,就不能用R0、R1做為間接尋址寄存器,而必須用DPTR寄存器做為間接尋址寄存器。

從上圖中我們可以看到,8051單片機(jī)片內(nèi)RAM共有256個(gè)單元(00H-FFH),這256個(gè)單元共分為兩部分。其一是地址從00H—7FH單元(共128個(gè)字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個(gè)字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。

1、通用寄存器區(qū)(00H-1FH)

在00H—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以R0—R7來(lái)命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個(gè)寄存器——程序狀態(tài)字寄存器(PSW)來(lái)管理它們,CPU只要定義這個(gè)寄存的PSW的D3和D4位(RS0和RS1),即可選中這四組通用寄存器。對(duì)應(yīng)的編碼關(guān)系如下表所示。惹程序中并不需要用4組,那么其余的可用做一般的數(shù)據(jù)緩沖器,CPU在復(fù)位后,選中第0組工作寄存器。

2、位尋址區(qū)(20H-2FH)

片內(nèi)RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對(duì)它們的位進(jìn)行尋址。位尋址區(qū)共有16個(gè)字節(jié),128個(gè)位,位地址為00H—7FH。位地址分配如下表所示:

CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲(chǔ)空間指的就是這些為尋址區(qū)。

3、用戶RAM區(qū)(30H-7FH)

在片內(nèi)RAM低128單元中,通用寄存器占去32個(gè)單元,位尋址區(qū)占去16個(gè)單元,剩下的80個(gè)單元就是供用戶使用的一般RAM區(qū)了,地址單元為30H-7FH。對(duì)這部份區(qū)域的使用不作任何規(guī)定和限制,但應(yīng)說(shuō)明的是,堆棧一般開(kāi)辟在這個(gè)區(qū)域。

高128單元:(80H-FFH)

前面提到,在片內(nèi)的RAM中,高128位是專用寄存器區(qū),因這節(jié)比較重要,所以我們單獨(dú)的安排一節(jié)課跟大家介紹。下節(jié)課我們就重點(diǎn)介紹51單片機(jī)片內(nèi)RAM的高128位,即專用寄存器區(qū)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7653

    瀏覽量

    167424
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217114
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    277

    文章

    5711

    瀏覽量

    127403

原文標(biāo)題:51單片機(jī)CPU結(jié)構(gòu)、串行口、I/O腳、編碼及譯碼器&存儲(chǔ)器的存儲(chǔ)工作原理分析

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    uboot代碼詳細(xì)分析

    [url=]uboot代碼詳細(xì)分析[/url]
    發(fā)表于 01-29 13:51

    詳細(xì)分析一下USB協(xié)議

    本文跟大家一起詳細(xì)分析一下USB協(xié)議。
    發(fā)表于 05-24 06:16

    學(xué)習(xí)目錄-STC-51單片機(jī)(15系列,51的升級(jí)版)精選資料分享

    上拉電阻與下拉電阻用途單片機(jī)特殊功能寄存器表(AT89C51)C51單片機(jī)定時(shí)器/計(jì)數(shù)器中斷功能詳細(xì)分析(一)C
    發(fā)表于 07-16 06:31

    詳細(xì)分析stm32f10x.h

    每日開(kāi)講---學(xué)習(xí)STM32不得不看的剖析(詳細(xì)分析stm32f10x.h)摘要: 學(xué)習(xí)STM32不得不看的剖析(詳細(xì)分析stm32f10x.h)。/**這里是STM32比較重要的頭文件*******************************************
    發(fā)表于 08-05 07:44

    近期的幾個(gè)單片機(jī)例程及詳細(xì)分析

    近期的幾個(gè)單片機(jī)例程及詳細(xì)分析,感興趣的可以看看。
    發(fā)表于 06-21 17:02 ?3次下載

    MCS-51單片機(jī)硬件結(jié)構(gòu)各部件詳細(xì)介紹和功能資料免費(fèi)下載

    MCS-51系列單片機(jī)是美國(guó)Intel公司1980年推出的高性能8位單片微型計(jì)算機(jī),較原來(lái)的MCS-48系列結(jié)構(gòu)更為先進(jìn),功能增強(qiáng),它包括51
    發(fā)表于 09-20 11:42 ?18次下載
    MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>硬件<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>各部件</b>的<b class='flag-5'>詳細(xì)</b>介紹和功能資料免費(fèi)下載

    51單片機(jī)教程之單片機(jī)硬件結(jié)構(gòu)詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)教程之單片機(jī)硬件結(jié)構(gòu)詳細(xì)說(shuō)明內(nèi)容包括了:一內(nèi)部
    發(fā)表于 10-23 11:04 ?40次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>教程之<b class='flag-5'>單片機(jī)</b>硬件<b class='flag-5'>結(jié)構(gòu)</b>的<b class='flag-5'>詳細(xì)</b>說(shuō)明

    MCS-51單片機(jī)的硬件結(jié)構(gòu)詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是MCS-51單片機(jī)的硬件結(jié)構(gòu)詳細(xì)資料概述內(nèi)容包括了:1.MCS-51
    發(fā)表于 10-23 16:11 ?18次下載
    MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的硬件<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>詳細(xì)</b>資料概述

    MCS-51單片機(jī)的硬件結(jié)構(gòu)詳細(xì)資料分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是MCS-51單片機(jī)的硬件結(jié)構(gòu)詳細(xì)資料分析主要內(nèi)容包括了:1 MCS-
    發(fā)表于 03-05 08:00 ?2次下載
    MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的硬件<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>詳細(xì)</b>資料<b class='flag-5'>分析</b>

    使用51單片機(jī)實(shí)現(xiàn)平衡智能小車的個(gè)各部件的程序合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)實(shí)現(xiàn)平衡智能小車的個(gè)各部件的程序合集免費(fèi)下載包括了:定時(shí)器使用,獨(dú)立鍵盤,矩陣鍵盤,動(dòng)態(tài)顯示,ADC0804 模數(shù)轉(zhuǎn)換,DAC0832數(shù)模轉(zhuǎn)換
    發(fā)表于 09-23 17:18 ?4次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>實(shí)現(xiàn)平衡智能小車的個(gè)<b class='flag-5'>各部件</b>的程序合集免費(fèi)下載

    MCS51單片機(jī)結(jié)構(gòu)與原理的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是MCS51單片機(jī)結(jié)構(gòu)與原理的詳細(xì)資料說(shuō)明包括了:1. MCS-51
    發(fā)表于 05-20 08:00 ?3次下載
    MCS<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>結(jié)構(gòu)</b>與原理的<b class='flag-5'>詳細(xì)</b>資料說(shuō)明

    基于Boonton功率表的脈沖射頻部件及系統(tǒng)的詳細(xì)分析

    Boonton的功率表非常詳細(xì)的波形跟蹤可實(shí)現(xiàn)精確的測(cè)量,有效的校準(zhǔn),以及對(duì)線性和脈沖射頻部件及系統(tǒng)的詳細(xì)分析。
    發(fā)表于 01-10 09:56 ?1187次閱讀
    基于Boonton功率表的脈沖射頻<b class='flag-5'>部件</b>及系統(tǒng)的<b class='flag-5'>詳細(xì)分析</b>

    詳解51單片機(jī)基本硬件結(jié)構(gòu)

    硬件結(jié)構(gòu)單片機(jī)的內(nèi)部結(jié)構(gòu)是由CPU、ROM、RAM等組成,現(xiàn)在介紹外部引腳。如圖1-3所示為單片機(jī)的引腳圖,這就是實(shí)驗(yàn)中要用的89C
    發(fā)表于 11-11 13:06 ?14次下載
    詳解<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>基本硬件<b class='flag-5'>結(jié)構(gòu)</b>

    單片機(jī)定時(shí)器一1ms12MHz_51單片機(jī)CPU結(jié)構(gòu)各部件的原理詳細(xì)分析

    一、 51單片機(jī)串行口工作原理MCS-51系列單片機(jī)片內(nèi)有一個(gè)串行I/O端口,通過(guò)引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進(jìn)行全雙工的串行異步通信。1.串行端口的基本特點(diǎn)
    發(fā)表于 11-23 16:21 ?0次下載
    <b class='flag-5'>單片機(jī)</b>定時(shí)器一1ms12MHz_<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>CPU</b><b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>各部件</b>的原理<b class='flag-5'>詳細(xì)分析</b>

    機(jī)房托管費(fèi)詳細(xì)分析

    機(jī)房托管費(fèi)是一個(gè)復(fù)雜而多變的話題,它受到多種因素的影響,以下是對(duì)機(jī)房托管費(fèi)用的詳細(xì)分析,主機(jī)推薦小編為您整理發(fā)布機(jī)房托管費(fèi)詳細(xì)分析。
    的頭像 發(fā)表于 02-28 09:48 ?462次閱讀