第二章 80C51單片機(jī)基本結(jié)構(gòu)1_第1頁
第二章 80C51單片機(jī)基本結(jié)構(gòu)1_第2頁
第二章 80C51單片機(jī)基本結(jié)構(gòu)1_第3頁
第二章 80C51單片機(jī)基本結(jié)構(gòu)1_第4頁
第二章 80C51單片機(jī)基本結(jié)構(gòu)1_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第2章80C51單片機(jī)的基本結(jié)構(gòu)2.180C51的內(nèi)部結(jié)構(gòu)及內(nèi)部工作原理2.280C51的引腳及其功能2.380C51CPU的結(jié)構(gòu)和特點(diǎn)2.480C51存儲結(jié)構(gòu)和地址空間2.580C51并行輸入∕輸出端口2.680C51復(fù)位電路及工作方式2.180C51的內(nèi)部結(jié)構(gòu)80C51單片機(jī)除包含CPU外,還包含了一些程序存儲器、數(shù)據(jù)存儲器、定時器/計數(shù)器、并行I/O接口、串行I/O接口、總線控制邏輯和中斷控制邏輯,其結(jié)構(gòu)框圖如下圖所示:80C51單片機(jī)結(jié)構(gòu)框圖80C51CPU振蕩器和時序OSC64KB總線擴(kuò)展控制器數(shù)據(jù)存儲器128BRAM2×16位定時器/計數(shù)器可編程I/O程序存儲器4KBROM可編程全雙工串行口外中斷內(nèi)中斷控制并行口串行通信外部時鐘源外部事件計數(shù)CPU是單片機(jī)的最核心部分,它是整個單片機(jī)的控制和指揮中心,完成所有的計算和控制任務(wù)。振蕩器和時序邏輯,產(chǎn)生CPU工作所需要的內(nèi)部時鐘。中斷控制邏輯用來應(yīng)付一些臨時到達(dá)的突發(fā)事件。并行I/O接口和串行I/O接口都是一些數(shù)據(jù)傳輸通道,方便CPU從芯片外部取得待處理的對象和將處理的結(jié)果送到芯片內(nèi)部。程序存儲器用于存放單片機(jī)的程序。數(shù)據(jù)存儲器用于存放內(nèi)部待處理的數(shù)據(jù)和處理后的結(jié)果。定時器/計數(shù)器主要是完成對外部輸入脈沖的計數(shù)或者根據(jù)內(nèi)部的時鐘及定時設(shè)置,周期性的產(chǎn)生定時信號??偩€控制邏輯,用于產(chǎn)生外部存儲空間的有關(guān)讀寫控制信號。內(nèi)部總線內(nèi)部CPU與程序存儲器、數(shù)據(jù)存儲器、并行I/O接口、串行I/O接口和定時器/計數(shù)器之間都是通過內(nèi)部總線聯(lián)系在一起。80C51單片機(jī)的內(nèi)部結(jié)構(gòu)圖P0驅(qū)動器P2驅(qū)動器P0鎖存器P2鎖存器RAM地址寄存器128BRAM4KBROMB寄存器暫存器1暫存器2ACCSP程序地址寄存器

緩沖器PC增1PCDPTR中斷、串行口和定時器PSWP1鎖存器P1驅(qū)動器P3鎖存器P3驅(qū)動器定時控制指令寄存器指令譯碼器OSCALUP0.0-P0.7P2.0-P2.7P3.0-P3.7P1.0-P1.7XTAL1XTAL2PSENALEEARET80C51單片機(jī)內(nèi)部結(jié)構(gòu)圖2.280C51的外部引腳及其功能

80C51單片機(jī)的外部引腳有兩種封裝形式,一種是44引腳的PLCC(PlasticLeadedChipCarrier的縮寫,即帶引線的塑封芯片載體),另一種是40引腳的PDIP(PlasticDual-In-Line塑封雙列直插式封裝)。前者的優(yōu)點(diǎn)是采用表面貼SMT安裝技術(shù),體積小,抗干擾能力強(qiáng)。后者的優(yōu)點(diǎn)是拆裝方便,焊接容易,尤其是產(chǎn)品開發(fā)期便于芯片更換。引腳功能可以分為三部分:(1)電源和晶振引腳電源引腳

VCC提供整個芯片的工作電源,接+5V。GND接地。外接晶振引腳

80C51單片機(jī)的內(nèi)部時鐘振蕩電路如下圖所示:①XTAL1振蕩電路反向放大輸入端,用于連接外接晶振的一個引腳,在采用外部時鐘方式時,該引腳接地。②XTAL2振蕩電路反向放大輸出端,用于連接外接晶振的另一個引腳,在采用外部時鐘方式時,由該引腳輸入外部時鐘脈沖。內(nèi)部振蕩方式:這種方式下在XTAL1和XTAL2兩端跨接石英晶體及兩個電容,如圖(a)所示,這樣就和內(nèi)部的反向放大器構(gòu)成穩(wěn)定的自激振蕩器。電容器C1和C2通常取30pF左右,可穩(wěn)定頻率并對振蕩頻率有微調(diào)作用。振蕩頻率范圍要求在1.2MHz~12MHz之間。外部震蕩方式:這種方式下,就是把外部已有的時鐘信號引入單片機(jī)內(nèi)直接使用,如圖(b)所示。(2)I/O端口引腳

P0口、P1口、P2口、P3口四個8位并行I/O口,32根I/O線。①P0:8位、漏極開路的雙向I/O口。當(dāng)使用片外存儲器(ROM及RAM)時,作8位地址和8位數(shù)據(jù)分時復(fù)用。在程序校驗(yàn)期間,輸出指令字節(jié),驗(yàn)證時需加外部上拉電阻。

P0口(作為總線時)能驅(qū)動8個LSTTL負(fù)載。②P1:8位準(zhǔn)雙向I/O口。在程序校驗(yàn)期間,用作輸入低位字節(jié)地址。

P1口可以驅(qū)動4個LSTTL負(fù)載。對于80C52,P1.0(T2),是定時器2的計數(shù)輸入端;P1.1(T2EX)是定時器2的外部控制信號輸入端。讀兩個特殊引腳的輸出鎖存器應(yīng)由程序置1。③P2:8位準(zhǔn)雙向I/O口。當(dāng)使用片外存儲器(ROM及RAM)時,輸出高8位地址。在程序校驗(yàn)期間,接收高位字節(jié)地址。

P2口可以驅(qū)動4個LSTTL負(fù)載。

④P3:8位準(zhǔn)雙向I/O口,具有內(nèi)部上拉電路。

P3口可以驅(qū)動4個LSTTL負(fù)載。

P3口每位的第二功能:P3.0(RXD):串行輸入端。P3.1(TXD):串行輸出端。P3.2(INTO):外部中斷0輸入端,低電平有效。P3.3(INT1):外部中斷1輸入端,低電平有效。P3.4(T0):定時/計數(shù)器0外部事件計數(shù)輸入端。P3.5(T1):定時/計數(shù)器1外部事件計數(shù)輸入端。P3.6(WR):外部數(shù)據(jù)存儲器寫選通信號,低電平有效。P3.7(RD):外部數(shù)據(jù)存儲器讀選通信號,低電平有效。P0~P3的功能及使用時的注意事項(xiàng)1.

在無片外擴(kuò)展存儲器的系統(tǒng)中,這四個端口的每一位都可以作為準(zhǔn)雙向通用I/O端口使用。在具有片外擴(kuò)展存儲器的系統(tǒng)中,P2口作為高8位地址線,P0口作為雙向總線,分時作為低8位地址和數(shù)據(jù)的輸入/輸出線。P0口作為通用雙向I/O口用時,必須外接上拉電阻。P3口除了作通用I/O使用外,它的各位還具有第二功能。當(dāng)P3口某一位用于第二功能作輸出時,則不能再作通用I/O使用。4.當(dāng)P0~P3端口用作輸入時,為了避免誤讀,都必須先向?qū)?yīng)的輸出鎖存器寫入“l(fā)”,使FET截止。然后再讀端口引腳。如:MOVP1,#0FFHMOVA,P1(3)控制引腳

①RST/VPD引腳:復(fù)位信號(RST)和后備電源(VPD)輸入端。在此輸入24個振蕩周期以上的高電平脈沖,單片機(jī)便可復(fù)位。VPD使用后備電源,可在主電源VCC出現(xiàn)故障時,提供備份電源,保證存儲在RAM中的信息不丟失,實(shí)現(xiàn)掉電保護(hù)。RST/VPD部分的內(nèi)部結(jié)構(gòu)如圖所示:復(fù)位后片內(nèi)各專用寄存器的狀態(tài)如下表:寄存器內(nèi)容寄存器內(nèi)容PC00HTMOD00HA00HTCON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0~P30FFHSCON00HIP(XXX00000)BSBUF不變IE(0XX00000)BPCON(0XXXXXXX)B幾種實(shí)用的復(fù)位電路②ALE/PROG引腳:地址鎖存允許(ALE)、輸出/編程脈沖(PROG)輸入端信號端。當(dāng)訪問外部存儲器時,ALE以振蕩頻率的1/6的頻率輸出脈沖信號,可用于鎖存出現(xiàn)在P0口的低8位地址(由于P0口是地址/數(shù)據(jù)分時輸出的,當(dāng)輸出地址時ALE信號將出現(xiàn)一個下降沿,如圖所示)。

在不訪問外部存儲器時,ALE端仍以上述不變的頻率,周期性地出現(xiàn)正脈沖信號,利用該脈沖信號可以作為定時信號,也可以用于判斷芯片好壞。對于87C51單片機(jī)來說,在對片內(nèi)EPROM進(jìn)行編程期間,該引腳將作為編程脈沖的輸入端。引腳:片外程序存儲器讀選通信號輸出端,當(dāng)從片外程序存儲器讀取指令或數(shù)據(jù)時,每個機(jī)器周期(一個機(jī)器周期有12個振蕩周期)將有兩次有效(低電平),以使片外程序存儲器輸出使能,如圖所示:當(dāng)訪問外部數(shù)據(jù)存儲器時,該引腳將沒有有效信號出現(xiàn)。④/VPP引腳:外部程序存儲器地址允許輸入端/編程電壓輸入端。當(dāng)引腳為高電平時,MCS-51單片機(jī)程序存儲空間低4KB來由片內(nèi)EPROM/ROM(MCS-52系列為8KB)構(gòu)成,超出的部分仍由片外程序存儲器構(gòu)成。當(dāng)引腳為低電平時,MCS-51單片機(jī)整個64KB程序存儲空間都由片外程序存儲器構(gòu)成(無論片內(nèi)有無程序存儲器)。對于片內(nèi)有EPROM的單片機(jī)(如87C51系列),在EPROM編程期間,該引腳將用于接21V的編程電源VPP。中央處理器CPU是單片機(jī)的核心,主要包括運(yùn)算器、控制器和工作寄存器及時序電路。

1.運(yùn)算器包括:

可進(jìn)行8位算術(shù)和邏輯運(yùn)算的單元ALU8位的暫存器1(TMP1)、暫存器2(TMP2),8位的累加器ACC8位寄存器B

程序狀態(tài)寄存器PSW等。2.380C51CPU的結(jié)構(gòu)和特點(diǎn)(1)算術(shù)和邏輯單元ALU

ALU是CPU運(yùn)算器的核心,它可以完成對4位、8位和16位數(shù)據(jù)進(jìn)行操作加、減、乘、除、加1、減1、BCD數(shù)十進(jìn)制調(diào)整及比較等算術(shù)運(yùn)算和“與”、“或”、“異或”、“求補(bǔ)”及“循環(huán)移位”等邏輯運(yùn)算操作。它是整個單片機(jī)的計算中心。(2)累加器ACC

8位寄存器,ALU運(yùn)算的結(jié)果,一般都進(jìn)入累加器ACC,當(dāng)然運(yùn)算的對象也可以來自于ACC。除此之外,ACC在MCS-51內(nèi)部還經(jīng)常作為數(shù)據(jù)傳送的中轉(zhuǎn)站。同一般微處理器一樣,它是最忙碌的一個寄存器。在指令中用助記符A來表示。(3)寄存器B

8位寄存器,在乘、除運(yùn)算時,B寄存器用來存放一個操作數(shù),也用來存放運(yùn)算后的一部分結(jié)果。若不做乘、除運(yùn)算,則可作為通用寄存器使用。(4)程序狀態(tài)字寄存器PSW

8位寄存器,用于指示指令執(zhí)行后的狀態(tài)信息,相當(dāng)于一般微處理器的標(biāo)志寄存器。PSW的位結(jié)構(gòu)如下表所示。D7D6D5D4D3D2D1D0CyACF0RS1RS0OV-PCy:高位進(jìn)位標(biāo)志位當(dāng)ALU的算術(shù)運(yùn)算過程中有進(jìn)位或借位時,Cy=1;否則,Cy=0。同時,該位還可以用作位累加器,這時一般只用“C”表示。AC:輔助進(jìn)位標(biāo)志當(dāng)ALU的算術(shù)運(yùn)算過程中低4位向高4位有進(jìn)位或借位時,AC=1;否則,AC=0。該位常用于BCD碼的調(diào)整。F0:用戶標(biāo)志位

RS1、RS0:選擇工作寄存器組位用于選擇內(nèi)部數(shù)據(jù)存儲器區(qū)內(nèi)4組工作寄存器中的某一組。具體選擇情況見寄存器介紹部分。OV:溢出標(biāo)志位

運(yùn)算結(jié)果超出機(jī)器所能表示的范圍時稱溢出。溢出是指有符號數(shù)運(yùn)算時,數(shù)值超過了+127---128。

OV=Cy7⊕Cy6,補(bǔ)碼運(yùn)算產(chǎn)生溢出OV=1,否則OV=0

P:奇偶校驗(yàn)標(biāo)志位根據(jù)累加器ACC中1的個數(shù)由硬件置位或清除,當(dāng)累加器ACC中有奇數(shù)個1時P=1;否則,P=0。PSW.1:保留位無定義?!纠浚悍治鰣?zhí)行下列指令序列后,A、C、AC、OV、P的內(nèi)容是什么?

MOVA,#79H

ADDA,#58H

該指令功能是將79H+58H→A。計算過程如下:(79H)01111001

+(58H)01011000

————————————

(D1H)11010001A=D1H最高位無進(jìn)位,C=0;低半字節(jié)有進(jìn)位,AC=1;OV=1,發(fā)生溢出;A中1的個數(shù)為偶數(shù),P=0。(5)臨時寄存器TMP1和TMP2這兩個寄存器專門供ALU存放臨時數(shù)據(jù),用戶不可以直接訪問。2.程序控制邏輯

包括程序計數(shù)器PC、指令寄存器IR、指令譯碼器ID、振蕩器及定時電路等。程序計數(shù)器PC

16位字節(jié)地址計數(shù)器,PC中的內(nèi)容是將要執(zhí)行的下一條指令的地址。改變PC的內(nèi)容就可改變程序執(zhí)行的方向。指令寄存器IR及指令譯碼器ID

CPU把由PC中的內(nèi)容決定的Flash或ROM地址中的指令代碼取出后,經(jīng)指令寄存器IR送至指令譯碼器ID進(jìn)行譯碼,譯碼后產(chǎn)生一定序列的控制信號,以執(zhí)行指令所規(guī)定的操作(例如,把片內(nèi)工作寄存器中的數(shù)據(jù)傳送到外部I/0口)。1.時鐘電路時鐘電路及CPU的工作時序

計算機(jī)是按程序工作的。程序是由許多指令組成的。指令是宏觀組成程序的最小單位。指令是逐條存放在程序存儲器中的。當(dāng)執(zhí)行指令時,首先將指令取出送到指令寄存器中,然后進(jìn)行譯碼,轉(zhuǎn)換成一系列定時控制的微操作,用來控制單片機(jī)各部分工作,來完成指令所要求的操作。因?yàn)橐粭l指令分解成許多基本的微操作,而這些微操作對應(yīng)的脈沖信號在時間上有嚴(yán)格的先后次序,這種次序就是計算機(jī)的時序。CPU的工作時序

80C51的時序定時單位:(1)振蕩周期(節(jié)拍):所謂的振蕩周期就是為單片機(jī)提供定時信號的振蕩源的周期(即晶振周期或外部輸入時鐘信號的周期)。(2)狀態(tài)周期:2個振蕩周期為1個狀態(tài)周期,用S表示。構(gòu)成1個狀態(tài)周期的兩個振蕩周期作為振蕩周期的兩個節(jié)拍P1和P2。在狀態(tài)周期的前半周期(即節(jié)拍P1期間)CPU一般完成算術(shù)邏輯運(yùn)算。在狀態(tài)周期的后半周期(即節(jié)拍P2期間)CPU一般完成內(nèi)部寄存器之間的數(shù)據(jù)傳遞。(3)機(jī)器周期:一個機(jī)器周期(12個振蕩周期)是指CPU訪問存儲器一次所需要的時間,包含6個狀態(tài)周期,用S1、S2、S3、S4、S5、S6表示,這樣一個機(jī)器周期也就共有12個節(jié)拍,它們是:S1P1、S1P2、S2P1、S2P2、S3P1、S3P2、S4P1、S4P2、S5P1、S5P2、S6P1和S6P2。(4)指令周期:也就是完成1條指令所需要的時間,以機(jī)器周期為單位。80C51單片機(jī)大多數(shù)指令是單字節(jié)單周期指令,也有一些單字節(jié)雙周期指令、雙字節(jié)單周期指令、雙字節(jié)雙周期指令,甚至也有4周期的指令(乘法和除法指令),注意沒有三周期指令。假如80C51單片機(jī)的外接晶振為12MHz,那么各種周期的具體值為: 振蕩周期:1/(12×106)=1/12μs; 狀態(tài)周期:2×1/12μs=1/6μs; 機(jī)器周期:6×1/6μs=1μs; 指令周期:1~4μs;

80C51單片機(jī)的工作時序如圖所示:

80C51單片機(jī)的CPU讀取指令和執(zhí)行指令時序如圖所示:

這里列出了幾種典型指令的取指和執(zhí)行時序。由圖可知,在每個機(jī)器周期內(nèi),地址鎖存信號ALE兩次有效,第一次出現(xiàn)在S1P2和S2P1期間,第二次出現(xiàn)在S4P2和S5P1期間。單周期指令的讀取發(fā)生于S1P2期間,此時操作碼將被鎖存于指令寄存器內(nèi),若是雙字節(jié)指令,則同一機(jī)器周期的S4P2讀取第2個字節(jié),中間PC自動加1。如果是單字節(jié)指令,S4P2仍做讀操作,但讀取的內(nèi)容直接丟棄,且中間程序計數(shù)器PC不加1。單周期指令在S6P2結(jié)束時完成指令的操作。圖(a)和(b)分別給出了單字節(jié)單周期指令和雙字節(jié)單周期指令的工作時序。

圖(c)是單字節(jié)雙周期指令的時序,兩個機(jī)器周期內(nèi)進(jìn)行了4次讀操作。由于是單字節(jié)指令,后面三次讀操作都無效,PC

也不調(diào)整。圖(d)是訪問片外數(shù)據(jù)存儲器指令“MOVX”的時序,它是單字節(jié)雙周期指令,在第一機(jī)器周期S5開始送出片外數(shù)據(jù)存儲器地址后,進(jìn)行讀/寫數(shù)據(jù)。在此期間無ALE信號,所以第二周期不產(chǎn)生取指操作。這時ALE信號不再是周期性的。其它情況下,ALE就是頻率為晶振頻率1/6的周期信號,可以用來給其它設(shè)備作時鐘信號。2.4存儲器結(jié)構(gòu)和地址空間單片機(jī)的存儲器兩種基本結(jié)構(gòu):(1)程序和數(shù)據(jù)合用一個存儲空間的結(jié)構(gòu),稱為普林斯頓(Princeton)結(jié)構(gòu)(2)程序存儲器和數(shù)據(jù)存儲器截然分開,分別尋址的結(jié)構(gòu),稱為哈佛(Harvard)結(jié)構(gòu)

80C51(MCS-51系列)單片機(jī)存儲器結(jié)構(gòu)采用哈佛結(jié)構(gòu)。80C51存儲器程序存儲器ROM數(shù)據(jù)存儲器RAM片內(nèi)程序存儲器片外程序存儲器片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器圖2–9

80C51單片微機(jī)存儲器映象圖

程序存儲器空間采用片內(nèi)、片外統(tǒng)一編址的方式,共有64KB,地址范圍為0000H~FFFFH(用16位地址表示)。數(shù)據(jù)存儲器:(1)片內(nèi)有256字節(jié)數(shù)據(jù)存儲器地址空間,地址范圍為00H~FFH(用8位地址表示)。(2)64KB的片外數(shù)據(jù)存儲器空間,其地址范圍也是0000H~FFFFH(用16位地址表示)。(3)片內(nèi)、片外數(shù)據(jù)存儲器空間的訪問通過不同的數(shù)據(jù)訪問指令來區(qū)分開來。

片外數(shù)據(jù)存儲器空間和片外程序存儲器空間,采用的外部地址總線和數(shù)據(jù)總線是相同的,不同的是控制總線不一樣。

MCS-51系列單片機(jī)的存儲器分配如下圖所示:

(1)程序存儲器空間配置程序存儲器空間的片內(nèi)、片外選擇通過單片機(jī)的引腳EA來實(shí)現(xiàn):當(dāng)EA接低電平時(EA=0),程序存儲器空間的前4KB(MCS-52是8KB)由片外實(shí)現(xiàn)當(dāng)EA接高電平時(EA=1),程序存儲器空間的前4KB(MCS-52是8KB)由片內(nèi)實(shí)現(xiàn)。對于8031/80C31/8032/80C32這些片內(nèi)沒有ROM的單片機(jī),EA引腳必須接低電平。對于具有片內(nèi)FLASH或者ROM的這些單片機(jī),如果使用片內(nèi)存儲器,引腳必須接高電平。程序存儲器的幾個特殊單元

系統(tǒng)復(fù)位后的PC地址為0000H,系統(tǒng)從0000H單元開始取指,執(zhí)行程序。從0003H~0023H單元被保留用于5個中斷源的中斷服務(wù)程序的入口地址。以下5個特殊的單元被保留

外部中斷0 0003H

計時器T0溢出 000BH

外部中斷1 0013H

計時器T1溢出 001BH

串行口中斷 0023H

在程序設(shè)計時,通常在這些中斷入口處設(shè)置無條件轉(zhuǎn)移指令,使之轉(zhuǎn)向?qū)?yīng)的中斷服務(wù)程序段處執(zhí)行。(2)片內(nèi)數(shù)據(jù)存儲器空間配置

MCS-51系列單片機(jī)片內(nèi)最多可以配置256字節(jié)的數(shù)據(jù)存儲器空間,地址從00H~FFH。片內(nèi)數(shù)據(jù)存儲器分為兩部分:低128字節(jié)(00H~7FH)是真正的RAM區(qū)高128字節(jié)(80H~FFH)為特殊功能寄存器(SFR)區(qū)(MCS-52也有高128字節(jié)的數(shù)據(jù)存儲單元,它們和特殊功能寄存器重疊的,區(qū)分這些重疊的高128字節(jié)存儲單元的方法是使用不同的尋址方式,SFR使用直接尋址而數(shù)據(jù)存儲單元使用間接尋址)。

MCS-51系列單片機(jī)的SFR都是采用直接尋址方式進(jìn)行訪問的。圖2–10片內(nèi)數(shù)據(jù)存儲器各部分地址空間分布圖

①特殊功能寄存器(SFR)在MCS-51系列單片機(jī)片內(nèi)高128字節(jié)RAM中,有21個特殊功能寄存器(SFR),它們離散地分布在80H~FFH的RAM空間中。這些特殊功能寄存器提供了CPU以及其它功能部件(如定時器計數(shù)器、串行口、并行口等)所需要的控制、狀態(tài)和緩沖寄存器。由于這些寄存器一般都具有特殊的功能,因此稱為特殊功能寄存器。這些寄存器的分布如圖所示?!魲V羔楽P(81H)

堆棧:在MCS-51系列單片機(jī)片內(nèi)RAM中,常常要指定一個專門的區(qū)域來存放某些特別的數(shù)據(jù),它遵循順序存取和后進(jìn)先出的原則,這個RAM區(qū)叫做堆棧。堆棧中的數(shù)據(jù)一般是某些事件發(fā)生時的CPU狀態(tài)或者寄存器的值。如當(dāng)中斷到來時,為了防止中斷服務(wù)程序中的操作對某些寄存器(如PSW、ACC等)形成破壞,需要將這個寄存器保護(hù)起來,把這些需要保護(hù)的寄存器的值壓入堆棧,等服務(wù)程序執(zhí)行完畢后,再把這些寄存器的值恢復(fù)出來,這個過程叫做現(xiàn)場的保護(hù)與恢復(fù)。

特殊功能寄存器堆棧指針SP地址為81H,SP的功能就是用來指向堆棧的棧頂?shù)?

壓棧(執(zhí)行PUSH指令)時:SP自動加1,然后把被壓的數(shù)據(jù)放到SP指向的單元。SP仍然指向棧頂,如左圖所示。

彈棧(執(zhí)行POP指令)時:先把SP指向的單元彈出,然后把SP減1,如右圖所示?!魯?shù)據(jù)指針DPTR(83H,82H)

DPTR是一個16位的特殊功能寄存器.

高位字節(jié)寄存器用DPH表示(地址83H),低位字節(jié)寄存器用DPL表示(地址82H)。

DPTR既可以作為一個16位寄存器來處理,也可以作為兩個獨(dú)立的8位寄存器DPH和DPL使用。DPTR主要用于存放16位地址,以便對64KB片外RAM作間接尋址,這在第三章有關(guān)尋址方式的章節(jié)中將再詳細(xì)介紹?!簦?O端口P0~P3(80H,90H,A0H,B0H)

P0~P3為4個8位特殊功能寄存器,分別是4個并行I/O端口的鎖存器。它們都有字節(jié)地址,每一個口鎖存器還有位地址,每一條I/O線均可獨(dú)立用作輸入或輸出。用作輸出時,可以鎖存數(shù)據(jù);用作輸入時,數(shù)據(jù)可以緩沖.

詳細(xì)情況在并行輸入∕輸出口中介紹?!糁袛嘣试S寄存器IE(A8H)、中斷優(yōu)先級寄存器IP(B8H)

IE和IP都是8位特殊功能寄存器。

IE用來對中斷系統(tǒng)所有中斷以及某個中斷源進(jìn)行開放或屏蔽;

80C51單片機(jī)有兩個中斷優(yōu)先級(即高優(yōu)先級和低優(yōu)先級),可實(shí)現(xiàn)兩級中斷服務(wù)嵌套。每個中斷源的中斷優(yōu)先級是由中斷優(yōu)先級寄存器IP中的相應(yīng)位的狀態(tài)來決定的。關(guān)于這兩個特殊功能寄存器的位結(jié)構(gòu)和詳細(xì)工作原理將在第五章有關(guān)章節(jié)中介紹?!舳〞r/計數(shù)器工作方式寄存器TMOD(89H)定時/計數(shù)器控制寄存器TCON(88H)

8位特殊功能寄存器TMOD和TCON都是與定時/計數(shù)器有關(guān)的。

TMOD用來為定時/計數(shù)器T0、T1選定工作方式,

TCON用來控制定時/計數(shù)器T0、T1的運(yùn)行,并反映T0、T1的運(yùn)行狀態(tài)?!舳〞r/計數(shù)器寄存器TH1(8DH)、TH0(8CH)、TL1(8BH)、TH0(8AH)

8位特殊功能寄存器TH1和TL1構(gòu)成定時/計數(shù)器T1的16位計數(shù)器,

TH0和TL0構(gòu)成定時/計數(shù)器T0的16位計數(shù)器。每來一個定時或計數(shù)脈沖,這個16位計數(shù)器將加1,直至計滿產(chǎn)生溢出。與定時/計數(shù)器有關(guān)的TMOD、TCON、TH1、TH0、TL1、TH0等特殊功能寄存器的位結(jié)構(gòu)和詳細(xì)工作原理將在第六章有關(guān)章節(jié)中介紹?!舸锌诳刂萍拇嫫鱏CON(98H)、串行口發(fā)送、接收緩沖寄存器SBUF(99H)

8位特殊功能寄存器SCON用以實(shí)現(xiàn)設(shè)定串行口的工作方式、控制接收/發(fā)送以及設(shè)置串行口的工作狀態(tài)標(biāo)志等功能。

MCS-51系列單片機(jī)片內(nèi)有兩個物理上獨(dú)立的發(fā)送、接收串行口緩沖器SBUF,它們占用同一地址99H,對它們的操作可以實(shí)現(xiàn)通過串行口接收或發(fā)送一定的數(shù)據(jù)。由于讀寫方向是不一樣的,所以讀操作對應(yīng)的是接收緩沖器,寫操作對應(yīng)的是發(fā)送緩沖器,因此,雖然物理上是兩個緩沖寄存器,但占用相同的地址,操作時并不會產(chǎn)生混淆。SCON和SBUF有關(guān)的詳細(xì)情況將在第七章有關(guān)章節(jié)中介紹?!綦娫纯刂萍拇嫫鱌CON(87H)

8位特殊功能寄存器PCON的主要作用是用于控制MCS-51單片機(jī)使其進(jìn)入低功耗模式,但其最高位(D7:SMOD)位是用于控制串行口波特率是否進(jìn)行倍頻的。關(guān)于PCON的詳細(xì)情況將在第七章有關(guān)章節(jié)中介紹?!艄ぷ骷拇嫫鲄^(qū)(00H:1FH)

80C51的片內(nèi)RAM00H~1FH地址空間安排了4組工作寄存器,每組有8個工作寄存器(R0~R7),共占32個單元。80C51在每個時刻只能選定一組工作寄存器作為當(dāng)前的工作寄存器組。選定當(dāng)前工作寄存器組的方法是對程序狀態(tài)字PSW中RS1、RS0的進(jìn)行適當(dāng)?shù)脑O(shè)置,如下表所示:RS1RS0寄存器地址工作寄存器組R0R1R2R3R4R5R6R70000H01H02H03H04H05H06H07H第0組0108H09H0AH0BH0CH0DH0EH0FH第1組1010H11H12H13H14H15H16H17H第2組1118H19H1AH1BH1CH1DH1EH1FH第3組◆位尋址區(qū)(20H~2FH)

80C51的片內(nèi)RAM工作寄存器區(qū)后的16字節(jié)單元(20H~2FH),可用位尋址方式訪問其各位,這16個單元(共128個位)稱為位尋址區(qū),每個位都有自己的位地址(00H~7FH)。在MCS-51系列單片內(nèi)有一個布爾處理機(jī),還有許多位操作指令,通過這些位操作指令可直接對這128位尋址,往這些位空間里寫入1位數(shù)據(jù),或者從這些位空間里讀取1位數(shù)據(jù)。

除了這128個位尋址單元以外,還有11個特殊功能寄存器(SFR)也是可以位尋址的。這些特殊功能寄存器的字節(jié)地址是:80H(P0)、88H(TCON)、90H(P1)、98H(SCON)、A0H(P2)、A8H(IE)、B0H(P3)、B8H(IP)、D0H(PSW)、E0H(ACC)、F0H(B)。這11個特殊功能寄存器的位也都分配了相應(yīng)的位地址(80H~F7H)。對這些空間的訪問也可以以位為單位。需要注意的是這部分的位地址空間可能不連續(xù),不能對不存在的位地址進(jìn)行訪問,否則訪問的結(jié)果是未知的?!敉ㄓ肦AM區(qū)(30H~

7FH)

80C51的片內(nèi)RAM30H~7FH地址空間的存儲單元為通用RAM區(qū)。這段空間可以存放程序運(yùn)行的中間結(jié)果。同時,堆棧也是放置在這一區(qū)間的。需要注意的是由于堆棧區(qū)域是向上生長的,所以,初始的堆棧指針SP設(shè)置就特別重要。一般情況下,需要將堆棧設(shè)置在通用RAM區(qū)的高端(如:60H~

7FH),這樣隨著壓入數(shù)據(jù)的增加一般不會導(dǎo)致對其他普通RAM區(qū)所存放數(shù)據(jù)的破壞。堆棧區(qū)的大小取決于整個系統(tǒng)同時需要保護(hù)的數(shù)據(jù)單元量。(3)片外數(shù)據(jù)存儲器空間配置

片外數(shù)據(jù)存儲器與片內(nèi)數(shù)據(jù)存儲器空間的低地址部分(0000H~00FFH)是重疊的,80C51有MOV和MOVX兩種指令,用以區(qū)分片內(nèi)、片外RAM空間,當(dāng)使用MOV指令時,訪問的是片內(nèi)區(qū)域,當(dāng)使用MOVX指令時,訪問的是片外區(qū)域。

80C51單片機(jī)的64KB的數(shù)據(jù)存儲器空間除了片內(nèi)有128字節(jié),剩余所有的數(shù)據(jù)存儲單元都需要擴(kuò)展片外RAM實(shí)現(xiàn)。片外數(shù)據(jù)存儲器的地址可以是8位或16位。使用8位地址時,則由P0口將這8位地址與數(shù)據(jù)信號分時提供,利用地址鎖存信號ALE的下降沿可以將這些地址鎖存住。若采用16位地址,則由P2端口傳送高8位地址。

下圖是片外擴(kuò)展2KBRAM時的連接圖。P0口用作RAM的數(shù)據(jù)總線(D0-D7),通過74LS373鎖存后作為地址總線的低8位(A0-A7),P2口中的3位(P2.0、P2.1和P2.2)作為RAM的3位地址(A8-A10)。訪問片外RAM期間,CPU根據(jù)需要發(fā)送讀或?qū)懶盘枴?.580C51的并行輸入/輸出

端口

在控制系統(tǒng)領(lǐng)域,有很多信號(例如電機(jī)的開與停,溫度是否超越了上界,電梯的上行和下行、小車的前進(jìn)與倒退等)都可以利用簡單的高低電平來表示。為了便于實(shí)現(xiàn)對這些控制信號的輸入與輸出,MCS-51單片機(jī)設(shè)置了4個8位并行I/O口,它們分別是P0口、P1口、P2口和P3口。這4個并行I/O口有個統(tǒng)一的功能就是實(shí)現(xiàn)開關(guān)信號的輸入輸出功能,可以利用程序?qū)⑦@些口設(shè)置為高電平或者低電平(輸出功能),也可以利用這些口將某些利用高低電平所表示的開關(guān)信號(1和0)讀入單片機(jī)內(nèi)部(輸入功能)。除此之外,它們還有各自不同的第二甚至第三功能,這是由它們的內(nèi)部結(jié)構(gòu)所決定的。

P0口P0口某位的結(jié)構(gòu)如圖所示:讀引腳讀鎖存器內(nèi)部總線寫入DCPQQ地址/數(shù)據(jù)控制CMUXVCCT1T2P0.X4312鎖存器組成:一個輸出鎖存器二個三態(tài)輸入緩沖器輸出驅(qū)動電路控制電路當(dāng)控制位C=0時,開關(guān)MUX被控為如圖示位置,P0口為通用I/O口;當(dāng)控制位C=1時,開關(guān)撥向反相器3的輸出端,這時,P0口分時作為地址/數(shù)據(jù)總線使用。也就是說,P0口的第二功能是作為地址/數(shù)據(jù)總線使用,其實(shí),這是P0口最常用的用法。需要注意的是,當(dāng)P0口作為地址/數(shù)據(jù)總線使用時,就無法再作I/O口使用。P0口作地址/數(shù)據(jù)時,是真正的雙向口,三態(tài),負(fù)載能力為8個LSTTL電路。

(1)P0口作為地址/數(shù)據(jù)總線

當(dāng)控制位C=1時,開關(guān)撥向反相器3的輸出端,P0口引腳輸出低8位地址或數(shù)據(jù)信息,MUX開關(guān)把CPU內(nèi)部地址/數(shù)據(jù)線經(jīng)反向器3與驅(qū)動場效應(yīng)管FET(T2)柵極接通。上下兩個FET處于反相,構(gòu)成推挽式輸出電路,提高了負(fù)載能力。(2)P0口作為通用I/O當(dāng)控制位C=0時,P0口為通用I/O口。

①P0口作為輸出口

當(dāng)CPU執(zhí)行輸出指令時,寫脈沖加在D鎖存器的CP上,這樣,與內(nèi)部總線相連的D端的數(shù)據(jù)取反后就出現(xiàn)在了輸出級FET(T2)的基極上,經(jīng)輸出級FET(T2)反相,在P0端口上出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線的數(shù)據(jù)。需要注意的是,由于CPU使控制線C為0,上拉FET處于截止?fàn)顟B(tài),因此輸出級是漏極開路的,外部應(yīng)加上拉電阻。②P0口作為輸入口

當(dāng)CPU執(zhí)行一條由端口讀入數(shù)據(jù)的指令時,“讀引腳”脈沖把三態(tài)緩沖器2打開,這樣,端口上的數(shù)據(jù)經(jīng)過緩沖器2讀入到內(nèi)部總線。需要注意的是,在進(jìn)行從端口輸入前,應(yīng)先向端口鎖存器寫入1,也就是使鎖存器,使T2截止,又因?yàn)榭刂凭€C=0,因此T1截止,這樣引腳便處于懸浮狀態(tài),可作高阻抗輸入。否則,T2便處于導(dǎo)通狀態(tài),端口上一直處于低電平狀態(tài),無法獲得真正的引腳電平狀態(tài)。因此,“要輸入,先輸出1”。③“讀-修改-寫”

MCS-51有幾條對I/O口操作的指令,屬于“讀-修改-寫”指令,如:ANLP0,A該指令的功能是將P0口的內(nèi)容與A寄存器內(nèi)容相與,結(jié)果從P0口輸出。

CPU不直接讀引腳上的數(shù)據(jù),而是使“讀鎖存器”信號有效,修改輸出鎖存器的內(nèi)容。鎖存器中的數(shù)據(jù)通過上三態(tài)門1進(jìn)入內(nèi)部總線,修改后再寫入到鎖存器中。

P1口P1口某位的結(jié)構(gòu)如圖所示:讀引腳讀鎖存器內(nèi)部總線寫入DCPQQVCCP1.X12鎖存器

P1口的內(nèi)部結(jié)構(gòu)和P0口有相同的地方,也有不同的地方。相同的地方是:它們的輸出鎖存電路一樣。不同的地方是:由于P1口只做I/O口,沒有第二功能,因此,P1口沒有像P0口那樣的功能選擇電路。P1口的輸出驅(qū)動部分也與P0口不同,P1口的輸出驅(qū)動上半部分把一個FET換成了一個上拉負(fù)載電阻,下半部分仍然保留一個可工作在導(dǎo)通或截止兩種狀態(tài)的FET。當(dāng)FET導(dǎo)通時,其管腳P1.X輸出為低電平。當(dāng)FET截止時,其管腳P1.X輸出由上拉電阻上拉為高電平,能向外提供拉電流負(fù)載,所以外部接口電路不必再接上拉電阻。

P1口也是一個準(zhǔn)雙向口。當(dāng)將該端口用作輸入端口時,也必須先向?qū)?yīng)的鎖存器寫入1,使FET截止。P1~P3都是準(zhǔn)雙向口,負(fù)載能力為4個LSTTL電路。

P2口

P2口某位的結(jié)構(gòu)如圖所示。P2口的內(nèi)部結(jié)構(gòu)與P0口類似的地方,它們的鎖存電路相同,也都有MUX開關(guān)。驅(qū)動部分與P1口類似,都有一個上拉電阻和一個FET組成。讀引腳讀鎖存器內(nèi)部總線寫入DCPQQ地址/數(shù)據(jù)控制CMUXVCCP2.X鎖存器(1)P2口作為一般的I/O口

P2口是一多功能接口,即可以作為通用I/O口使用,也可以作為輸出高8位地址線使用。在以下情況下,P2口將作為通用I/O口使用:

當(dāng)CPU對片內(nèi)存儲器進(jìn)行讀/寫(執(zhí)行MOV

指令或在EA=1的情況下執(zhí)行MOVC指令)時,內(nèi)部硬件電路會自動使開關(guān)MUX倒向鎖存器的端,這時,P2口將作為一般I/O口使用。

②當(dāng)系統(tǒng)只需擴(kuò)展256B片外RAM,使用“MOVXA,@Ri”類指令訪問片外RAM時,尋址范圍是256B,只需低8位地址線就可以實(shí)現(xiàn)。這時,P2口將不受該指令影響,仍可作通用I/O口使用。(2)P2口作為高8位地址線

若擴(kuò)展的RAM容量超過256B,使用“MOVXA,@DPTR”類指令的尋址范圍是64KB,此時,高8位地址總線用P2口輸出。在片外RAM讀/寫周期內(nèi),P2口鎖存器仍保持原來端口的數(shù)據(jù)。此時P2口無法再用作通用I/O口。

P3口

P3口某位的結(jié)構(gòu)如圖所示:讀引腳讀鎖存器內(nèi)部總線寫入DCPQ第二輸出功能VCCP3.X312鎖存器4第二輸入功能W

P3口是一個雙功能口,第一功能與P1一樣用作通用I/O口,也是一個準(zhǔn)雙向I/O口。除了第一功能,P3口還具有第二功能。P3口的第二功能如下表所示:

引腳第二功能P3.0RXD(串行口輸入)P3.1TXD(串行口輸出)P3.2INT0(外部中斷0輸入)P3.3INT1(外部中斷1輸入)P3.4T0(定時器0的外部輸入)P3.5T1(定時器1的外部輸入)P3.6WR(片外數(shù)據(jù)存儲器寫控制信號)P3.7RD(片外數(shù)據(jù)存儲器讀控制信號)

與P0、P2口不同的是,P3口的第二功能和第一功能之間不再通過多路選擇開關(guān)(MUX)進(jìn)行切換,而是增加了一個與非門3和緩沖器4。這樣,當(dāng)作為通用輸出口時,內(nèi)部第二輸出功能線應(yīng)為高電平1,以保證與非門的暢通,維持從鎖存器到輸出口的數(shù)據(jù)輸出通路;當(dāng)作為第二功能輸出口時,鎖存器應(yīng)置高電平1,使與非門對第二功能的輸出是暢通的。當(dāng)P3口作為第二功能輸入口時,在I/O口的輸入通路增設(shè)了一個緩沖器4,輸入的第二功能信號即從這個緩沖器輸出端取得。當(dāng)P3口作為通用I/O口輸入端時,數(shù)據(jù)取自三態(tài)緩沖器2的輸出端。這兩種輸入,鎖存器的輸出端和內(nèi)部第二輸出功能線均應(yīng)置為高電平,這樣輸出驅(qū)動電路便不會影響引腳上外部數(shù)據(jù)的正常輸入。

P3口的輸出驅(qū)動部分和P1口、P2口一樣,內(nèi)部具有上拉電阻,只有4個LSTTL電路的驅(qū)動能力。

I/O端口的簡單應(yīng)用

如圖所示,單片機(jī)的P1.0口設(shè)置成輸入口,通過一個按鈕開關(guān)連接到地。P1.1口設(shè)置成輸出口,通過電阻R1連接到Q1的基極,Q1的發(fā)射極連接到地,集電極通過發(fā)光二極管D1和電阻R2連接到+5V電源。

要實(shí)現(xiàn)的功能是每當(dāng)按鈕開關(guān)S1按下時,發(fā)光二極管就亮,松開時發(fā)光二極管就滅。具體的程序如下:

SETBP1.0 ;為了P1.0做輸入,先要輸出高電平LOOP1:CLRP1.1 ;熄滅LOOP2:JBP1.0,LOOP1 ;查看開關(guān)是否按下,高電平說明沒有

;按下,低電平說明已按下。

LCALLDELAY10ms;軟件延時10ms,去開關(guān)抖動

JBP1.0,LOOP1 ;再查看一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論