計(jì)算機(jī)硬件及網(wǎng)絡(luò)第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)_第1頁(yè)
計(jì)算機(jī)硬件及網(wǎng)絡(luò)第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)_第2頁(yè)
計(jì)算機(jī)硬件及網(wǎng)絡(luò)第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)_第3頁(yè)
計(jì)算機(jī)硬件及網(wǎng)絡(luò)第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)_第4頁(yè)
計(jì)算機(jī)硬件及網(wǎng)絡(luò)第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

[計(jì)算機(jī)硬件及網(wǎng)絡(luò)]第3章-80C51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)第一頁(yè),共56頁(yè)。3.1存儲(chǔ)器的分類存儲(chǔ)器的的作用是用來(lái)存放程序和數(shù)據(jù),存儲(chǔ)器可分為磁存儲(chǔ)和半導(dǎo)體存儲(chǔ)器,半導(dǎo)體存儲(chǔ)器按功能又可分為只讀存儲(chǔ)器ROM和隨機(jī)存儲(chǔ)器RAM,如圖3-1所示。單片機(jī)存儲(chǔ)器結(jié)構(gòu)中都采用半導(dǎo)體存儲(chǔ)器。第二頁(yè),共56頁(yè)。1.只讀存儲(chǔ)器ROM只讀存儲(chǔ)器在正常工作狀態(tài)下只能從中讀出數(shù)據(jù),用戶不能快速地隨時(shí)修改或者重新寫入數(shù)據(jù),數(shù)據(jù)可長(zhǎng)時(shí)間的保存。(1)可編程ROM,可通過(guò)專用設(shè)備(編程器)將數(shù)據(jù)寫入ROM。PROM:用戶可一次編程;EPROM:紫外線擦除,電改寫(多次);EEPROM:電擦除,電改寫(多次);FLASHROM:閃存(多次)。(2)掩膜ROM用戶不能將數(shù)據(jù)寫入,由廠家寫入數(shù)據(jù)。

由于上述特點(diǎn),所以在單片機(jī)中一般做為程序存儲(chǔ)器。第三頁(yè),共56頁(yè)。2.隨機(jī)存取存儲(chǔ)器RAM在加電期間,可以隨時(shí)向存儲(chǔ)器里寫入數(shù)據(jù)或從中讀出數(shù)據(jù),但掉電后,數(shù)據(jù)丟失。SRAM:靜態(tài)存儲(chǔ)器,加電期間數(shù)據(jù)可以長(zhǎng)久保存,掉電信息丟失。DRAM:動(dòng)態(tài)存儲(chǔ)器,即使在加電期間數(shù)據(jù)也會(huì)丟失(數(shù)據(jù)要刷新)。

由于上述特點(diǎn),所以在單片機(jī)中一般作為數(shù)據(jù)儲(chǔ)存器。第四頁(yè),共56頁(yè)。3.2計(jì)算機(jī)中儲(chǔ)存器的兩種結(jié)構(gòu)在計(jì)算機(jī)中存儲(chǔ)器的用途是存放程序和數(shù)據(jù),它有兩種結(jié)構(gòu):馮?諾伊曼結(jié)構(gòu)和哈佛結(jié)構(gòu)。馮?諾伊曼結(jié)構(gòu):程序和數(shù)據(jù)共用一個(gè)存儲(chǔ)器邏輯空間,統(tǒng)一編址。哈佛結(jié)構(gòu):程序與數(shù)據(jù)分為兩個(gè)獨(dú)立存儲(chǔ)器邏輯空間,分開編址。注:★個(gè)人電腦(PC機(jī))采用的是馮?諾伊曼結(jié)構(gòu);★單片機(jī)一般采用哈佛結(jié)構(gòu)(8051);★8051(80C51)單片機(jī),數(shù)據(jù)存儲(chǔ)器用的是SRAM程序存儲(chǔ)器用的是ROM。第五頁(yè),共56頁(yè)。3.380C51單片機(jī)的儲(chǔ)存器3.3.18051(80C51)系列存儲(chǔ)器結(jié)構(gòu)1.物理空間有四個(gè)部分(1)內(nèi)部數(shù)據(jù)存儲(chǔ)器(128BSRAM)。(2)外部擴(kuò)展數(shù)據(jù)存儲(chǔ)器(最大64KRAM)。(3)內(nèi)部程序存儲(chǔ)器(4KFlashROMAT89S51)。(4)外部擴(kuò)展程序存儲(chǔ)器(最大64KRAM)。第六頁(yè),共56頁(yè)。2.邏輯空間有三個(gè)部分(1)程序存儲(chǔ)器ROM:包括內(nèi)部和外部,共用一個(gè)64K的尋址空間。(2)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM(128B),獨(dú)立的一個(gè)128B的尋址空間。(3)外部數(shù)據(jù)存儲(chǔ)器RAM(64K),獨(dú)立的一個(gè)64K的尋址空間。第七頁(yè),共56頁(yè)。如圖3-2所示?!飪?nèi)部數(shù)據(jù)存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器相互之間獨(dú)立編址,★內(nèi)部程序存儲(chǔ)器和外部程序存儲(chǔ)器統(tǒng)一編址,共用一個(gè)64K的尋址空間。第八頁(yè),共56頁(yè)。3.3.2數(shù)據(jù)儲(chǔ)存器數(shù)據(jù)存儲(chǔ)器是采用了靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)的結(jié)構(gòu),掉電信息丟失,故用于暫存數(shù)據(jù)及運(yùn)算的中間結(jié)果。1.內(nèi)部數(shù)據(jù)存儲(chǔ)器的結(jié)構(gòu)內(nèi)部數(shù)據(jù)儲(chǔ)存器它由工作寄存器區(qū)、位尋址區(qū)、用戶區(qū)三個(gè)部分組成,地址范圍00H~7FH,共128個(gè)單元。用戶對(duì)這些單元的訪問(wèn),可以用“直接尋址”的方法,即在指令中用“direct”表示,指的就是00H~7FH這128個(gè)地址單元,指令中直接給出操作數(shù)所在單元地址的這種尋址方式稱之為“直接尋址”。何為尋址方式,即尋找操作數(shù)的方法。第九頁(yè),共56頁(yè)。圖3-3內(nèi)部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)第十頁(yè),共56頁(yè)。(1)工作寄存器區(qū)(00H~1FH)共32個(gè)單元,又分為4組,每組8個(gè)單元,都用R0~R7表示,如圖3-4所示,第十一頁(yè),共56頁(yè)。個(gè)寄存器對(duì)應(yīng)的地址見(jiàn)表3-1所示在內(nèi)部工作寄存器中的地址是唯一,但寄存器名重名,一個(gè)寄存器名對(duì)應(yīng)有4個(gè)單元,為了解決重名問(wèn)題,單片機(jī)用特殊功能寄存器PSW中的RS1、RS0來(lái)選擇,也就是說(shuō),單片機(jī)在工作時(shí)不會(huì)同時(shí)使用這4組寄存器,在某一時(shí)刻,只能選擇其中的一組。工作寄存器組地址寄存器名RS1RS00組00H~07HR0~R7001組08H~0FHR0~R7012組10H~17HR0~R7103組18H~1FHR0~R711第十二頁(yè),共56頁(yè)。在指令系統(tǒng)中對(duì)于這些空間的訪問(wèn)有以下方法:●直接使用地址,在指令系統(tǒng)中用“direct”表示,這種方式稱之為直接尋址。如:指令MOVA,direct;指令中的“direct”就是指內(nèi)部數(shù)據(jù)存儲(chǔ)器中的地址(00H~7FH)該指令就是把direct這個(gè)單元中的操作數(shù)傳送到A中。操作數(shù)是指指令中參與操作的數(shù)據(jù)。指令系統(tǒng)中出現(xiàn)的“direct”,在實(shí)際編程的過(guò)程中不能出現(xiàn),必須寫對(duì)應(yīng)的實(shí)際地址“00H~7FH”,這一點(diǎn)非常重要。如:MOVA,30H;就是將30H中的數(shù)送給A。第十三頁(yè),共56頁(yè)?!裰苯邮褂眉拇嫫髅鸕0~R7,指令系統(tǒng)中用“Rn”表示這8個(gè)寄存器,這種方式的尋址稱之為“寄存器尋址”,就是操作數(shù)放在寄存器中。如:指令MOVA,Rn;指令中的“Rn”就是指工作寄存器R0~R7。該指令就是把Rn中的操作數(shù)傳送到A中。指令系統(tǒng)中出現(xiàn)的“Rn”,在實(shí)際編程的過(guò)程中不能出現(xiàn),必須寫對(duì)應(yīng)的寄存器“R0~R7”。如:MOVA,R3;就是將工作寄存器R3中的數(shù)傳送到A中。第十四頁(yè),共56頁(yè)?!馬0和R1這兩個(gè)寄存器還有一種用法,稱之為“寄存器間接尋址”,用“@Ri”表示,i=0、1。R0和R1存放的是操作數(shù)所在單元的地址。如:MOVA,@Ri;指令中的“@Ri”就是指工作寄存器R0和R1。該指令就是把Ri中的數(shù)取出作為所取數(shù)據(jù)的單元地址。指令系統(tǒng)中出現(xiàn)“@Ri”,在實(shí)際編程的過(guò)程中不能出現(xiàn),必須寫“@R0或@R1”。如:MOVA,@R0;就是將R0中的數(shù)取出,作為所取數(shù)據(jù)的地址,將該地址單元的數(shù)取出送到A中。如圖3-5所示,@R0所指的操作數(shù)就是10101010B(AAH)。第十五頁(yè),共56頁(yè)。3-5所示,指令MOVA,@R0操作示意。可以用((R0))=(40H)=AAH表示。第十六頁(yè),共56頁(yè)。注:★在寄存器尋址中(Rn),這4組寄存器,由用戶使用中通過(guò)PSW中的RS1和RS0的設(shè)定,來(lái)確定用戶使用的組?!镞@32個(gè)單元可以使用“直接尋址”方式,也可使用“寄存器尋址”方式來(lái)進(jìn)行訪問(wèn)。★4組中的R0和R1除了“直接尋址”和“寄存器尋址”外,還可采用“寄存器間接尋址”方式來(lái)訪問(wèn)。第十七頁(yè),共56頁(yè)。(2)位尋址區(qū)(20H~2FH)這16個(gè)RAM單元具有雙重功能。它們既可以像普通RAM單元一樣按字節(jié)存取,即“直接尋址(direct)”也可以對(duì)每個(gè)RAM單元中的任何一個(gè)二進(jìn)制位單獨(dú)存取,這就是位尋址(bit),80C51單片機(jī)為這些區(qū)域?qū)iT設(shè)置了位處理器(一個(gè)1位的CPU),用于這些空間的訪問(wèn),如圖3-6所示。第十八頁(yè),共56頁(yè)。圖3-6,位地址表。第十九頁(yè),共56頁(yè)。在指令系統(tǒng)中對(duì)于這些空間的訪問(wèn)有以下方法:●可以采用“直接尋址”的方式去訪問(wèn)這16個(gè)單元;如:MOVA,20H(MOVA,direct)●也可以采用“位尋址(bit)”的方式去訪問(wèn)這128個(gè)二進(jìn)制位。如:MOVC,00H(MOVC,bit)該指令就是把00H中的一個(gè)二進(jìn)制數(shù)送到C中。指令中“bit”,指的就是位地址“00H~7FH”。注:★字節(jié)地址:20H~2FH,位地址:00H~7FH?!餅榱藚^(qū)分位地址“00H~7FH”和內(nèi)部數(shù)據(jù)存儲(chǔ)器的地址“00H~7FH”,提到位尋址區(qū)中的位地址時(shí),必須注明位地址。單元地址,稱之為字節(jié)地址,也可簡(jiǎn)稱地址。第二十頁(yè),共56頁(yè)。(3)數(shù)據(jù)緩沖區(qū)(用戶區(qū))(30H~7FH)數(shù)據(jù)緩沖區(qū)共有80個(gè)RAM單元,用于存放用戶數(shù)據(jù)或作堆棧區(qū)使用,也稱用戶RAM區(qū)。80C51對(duì)用戶RAM區(qū)中每個(gè)RAM單元只能按字節(jié)存取的(不可位尋址)。在指令系統(tǒng)中對(duì)于這些空間的訪問(wèn)只有一種方法,即直接尋址(direct)。如:MOVA,40H(MOVA,direct)第二十一頁(yè),共56頁(yè)。內(nèi)部數(shù)據(jù)存儲(chǔ)器小結(jié):★內(nèi)部數(shù)據(jù)存儲(chǔ)器中所有的單元(128B)都可以用直接尋址的方法來(lái)進(jìn)行訪問(wèn)(direct)?!锕ぷ骷拇嫫鲄^(qū)也可以用寄存器尋址(Rn)的方法來(lái)訪問(wèn),指令系統(tǒng)中一般都用寄存器尋址(Rn)的方法來(lái)訪問(wèn)該空間。除了寄存器尋址的方式,R0和R1也可采用寄存器間接尋址@Ri的方式,在使用中R0和R1必須先滿足間接尋址方式,有多余的可用于寄存器尋址方式?!镂粚ぶ穮^(qū),對(duì)這16個(gè)單元可以使用直接尋址方式,這16個(gè)單元中的128個(gè)位(都有位地址),還可以用位尋址的方式來(lái)訪問(wèn)。★用戶區(qū)只能用直接尋址的方式來(lái)訪問(wèn)。★指令系統(tǒng)中所有的數(shù)據(jù)處理、運(yùn)算都是在內(nèi)部數(shù)據(jù)存儲(chǔ)器中完成,所以指令系統(tǒng)也是非常豐富的(大部分指令都是針對(duì)該空間)。第二十二頁(yè),共56頁(yè)。2.外部數(shù)據(jù)存儲(chǔ)器當(dāng)內(nèi)部數(shù)據(jù)存儲(chǔ)器不夠用時(shí),在單片機(jī)的外總線上可以最大擴(kuò)展64K的RAM,可獨(dú)立尋址,有專用指令系統(tǒng)(MOVX傳送指令),不能用于數(shù)據(jù)的運(yùn)算及處理,所以僅有4條指令,兩條讀,兩條寫,用于一般數(shù)據(jù)的存放,地址為0000H-FFFFH。尋址方式采用寄存器間接尋址的方式,如MOVXA,@DPTR.,指令中DPTR,開辟在特殊功能寄存器(SFR)中,是一個(gè)16位的數(shù)據(jù)存儲(chǔ)器(數(shù)據(jù)指針),用于訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器,一般用于存放的是外部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器的地址(外部數(shù)據(jù)存儲(chǔ)器的地址也是16位)。存儲(chǔ)器結(jié)構(gòu)見(jiàn)圖3-7所示。第二十三頁(yè),共56頁(yè)。圖3-7外部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)第二十四頁(yè),共56頁(yè)。3.3.3特殊功能寄存器(SFR)80C51系列單片機(jī)內(nèi)的鎖存器、定時(shí)器、串行口、數(shù)據(jù)緩沖器及各種控制寄存器、狀態(tài)寄存器都以特殊功能寄存器(SFR)的形式出現(xiàn),它們離散地分布在高128位片內(nèi)RAM80H~FFH中。51子系列共有18個(gè)特殊功能寄存器,占用21個(gè)單元,其余107個(gè)單元用戶不好使用(AT89C51)。第二十五頁(yè),共56頁(yè)。表3-2SFR地址映像表第二十六頁(yè),共56頁(yè)。第二十七頁(yè),共56頁(yè)。這18個(gè)特殊功能寄存器,其中有15個(gè)特殊功能寄存器占用1個(gè)單元,另外3個(gè)特殊功能寄存器占用2個(gè)單元,這就是為什么18個(gè)特殊功能寄存器占用21個(gè)單元的原因。這18個(gè)特功能寄存器我們先學(xué)5個(gè),其余的放在以后學(xué)習(xí)。第二十八頁(yè),共56頁(yè)。

1.累加器ACC(E0H)

累加器ACC是80C51型單片機(jī)中最常用的寄存器。許多指令的操作數(shù)取自ACC,許多運(yùn)算的結(jié)果存放在ACC中。乘除法指令必須通過(guò)ACC進(jìn)行。累加器ACC的指令助記符為A。簡(jiǎn)單的講就是一個(gè)8位的存儲(chǔ)器,使用非常頻繁,很多指令中必須用到ACC。第二十九頁(yè),共56頁(yè)。

在指令系統(tǒng)中,可直接使用寄存器名ACC(A)和字節(jié)地址E0H對(duì)這八個(gè)二進(jìn)制位進(jìn)行操作,前者稱之為寄存器尋址,后者稱之為直接尋址(direct),用戶一般使用寄存器尋址,即寄存器尋址,在特殊條件下才會(huì)使用直接尋址。累加器ACC也是一個(gè)可以對(duì)8個(gè)二進(jìn)制位進(jìn)行位尋址的寄存器,8個(gè)二進(jìn)制位都有唯一的位地址,指令中只能使用位地址(bit),也稱之為位尋址,若使用位編號(hào),編譯軟件會(huì)將位編號(hào)轉(zhuǎn)換成位地址,再進(jìn)行編譯,最后形成目標(biāo)文件。

第三十頁(yè),共56頁(yè)。2.寄存器B(F0H)80C51單片機(jī)乘除法指令中要用到寄存器B,用于存放操作數(shù)和操作結(jié)果。B也可作為通用存儲(chǔ)器器使用。在乘除指令中,直接使用寄存器名B,稱之為寄存器尋址。用作通用存儲(chǔ)器時(shí)只能使用地址F0H稱之為直接尋址,若用寄存器名B,編譯軟件會(huì)將其轉(zhuǎn)換成地址F0H來(lái)使用。寄存器B是可以進(jìn)行位尋址的單元,8個(gè)二進(jìn)制位都有唯一的位地址,在對(duì)二進(jìn)制位尋址時(shí),指令中只能使用位地址(bit),稱之為位尋址,若使用位編號(hào),編譯軟件會(huì)將位編號(hào)轉(zhuǎn)換成位地址,再進(jìn)行編譯,最后形成目標(biāo)文件,見(jiàn)圖3-9所示。第三十一頁(yè),共56頁(yè)。3.程序狀態(tài)字寄存器PSW(D0H)程序狀態(tài)字寄存器PSW也稱為標(biāo)志寄存器,存放各有關(guān)標(biāo)志和對(duì)工作寄存器的選擇設(shè)置。其結(jié)構(gòu)和定義如圖3-10所示。在指令系統(tǒng)中該單元只能使用字節(jié)地址D0H來(lái)訪問(wèn),稱之為直接尋址(direct),若用寄存器名PSW,編譯軟件會(huì)將其轉(zhuǎn)換成地址D0H來(lái)使用。程序狀態(tài)字寄存器PSW是可以進(jìn)行位尋址的單元,8個(gè)二進(jìn)制位都有唯一的位地址,在對(duì)二進(jìn)制位尋址時(shí),指令中只能使用位地址(bit),稱之為位尋址,若使用位定義或位編號(hào),編譯軟件會(huì)將位定義和位編號(hào)轉(zhuǎn)換成位地址,再進(jìn)行編譯,最后形成目標(biāo)文件。第三十二頁(yè),共56頁(yè)。該單元各位的定義如下:CY:進(jìn)(借)位標(biāo)志位,有進(jìn)(借)位(CY)=1,否則(CY)=0,主要用于加減運(yùn)算中。AC:輔助進(jìn)(借)位標(biāo)志位,低四位向高四位的進(jìn)(借)位,有進(jìn)(借)(AC)=1,否則(AC)=0,主要用于加減運(yùn)算中。RS1、RS0:工作寄存器組的選擇位,見(jiàn)表3-3所示。

字節(jié)地址寄存器名RS1RS00組00H-07HR0-R7001組08H-0FHR0-R7012組10H-17HR0-R7103組18H-1FHR0-R711第三十三頁(yè),共56頁(yè)。OV:溢出標(biāo)志位,80C51單片機(jī)CPU的位數(shù)是8位,則表示帶符號(hào)數(shù)的位數(shù)只能是8位,最高位是符號(hào)位,數(shù)據(jù)位只有7位,數(shù)的范圍在-128~+127之間,若運(yùn)算的結(jié)果超出這個(gè)范圍,溢出(結(jié)果出錯(cuò))。計(jì)算機(jī)中判斷結(jié)果溢出的算法是公式:OV=Cy6⊕Cy7;式中,Cy6表示D6位向D7位的進(jìn)位或借位,Cy7表示D6位向CY的進(jìn)位或借位。F0:用戶位,用戶可以作為一般的一位二進(jìn)制數(shù)的存儲(chǔ)器使用。P:奇偶標(biāo)志位,累加器A中1的個(gè)數(shù)為奇數(shù)時(shí)(P)=1,否則(P)=0,只要A中的數(shù)值發(fā)生變化,就影響P(實(shí)時(shí)反映累加器A中1的個(gè)數(shù)的奇偶性)。第三十四頁(yè),共56頁(yè)。注:★CY、AC、OV、P這4個(gè)標(biāo)志位由指令運(yùn)行后,對(duì)其產(chǎn)生影響(由硬件產(chǎn)生各標(biāo)志),主要用于算術(shù)運(yùn)算類指令,除了CY一般這3位不會(huì)用于數(shù)據(jù)的存儲(chǔ),CY也是位處理器(1位的CPU)中的累加器,在位操作中使用較為頻繁?!颬在任何一條指令中,只要有累加器A出現(xiàn)并且A中的值發(fā)生變化,就會(huì)影響P?!颮S1、RS0是工作寄存器組的選擇位,由用戶根據(jù)需要通過(guò)指令來(lái)設(shè)定,去選擇寄存器組(軟件設(shè)定)。第三十五頁(yè),共56頁(yè)。例1:X=-13,Y=-6,求X+Y的補(bǔ)碼運(yùn)算。解:[X]補(bǔ)碼=F3H,[Y]補(bǔ)碼=FAH,[X+Y]補(bǔ)碼,則:[X]補(bǔ)碼:11110011B

[Y]補(bǔ)碼:+11111010B[X]補(bǔ)碼+[Y]補(bǔ)碼:111101101B

在單片機(jī)中,上述運(yùn)算后,(CY)=1,(AC)=0,(OV)=Cy6⊕Cy7=1⊕1=0(結(jié)果正確),(P)=0。

第三十六頁(yè),共56頁(yè)。4.?dāng)?shù)據(jù)指針DPTR(83H、82H)數(shù)據(jù)指針DPTR是一個(gè)16位的特殊功能寄存器,不可位尋址,由兩個(gè)8位寄存器DPH(83H)和DPL(82H)組成,DPH是DPTR的高8位,DPL是DPTR的低8位,DPTR既可合并作為一個(gè)16位寄存器,又可分開按8位寄存器單獨(dú)操作,見(jiàn)圖3-11所示。第三十七頁(yè),共56頁(yè)。在指令中一般都是以一個(gè)16位的寄存器DPTR使用,用于存放外部數(shù)據(jù)存儲(chǔ)器的地址和程序程序器的地址,訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器是用@DPTR,稱之為寄存器間接尋址;訪問(wèn)程序存儲(chǔ)器是用@A+DPTR,稱之為變址尋址。作為兩個(gè)獨(dú)立的8位寄存器(DPH、DPL)使用時(shí),只能使用其地址,在指令系統(tǒng)中會(huì)詳解。第三十八頁(yè),共56頁(yè)。5.堆棧指針SP(81H)堆棧是CPU用于暫時(shí)存放部分?jǐn)?shù)據(jù)的“倉(cāng)庫(kù)”,它的作用是用來(lái)保護(hù)現(xiàn)場(chǎng)和保護(hù)斷點(diǎn)。在80C51中,由內(nèi)部數(shù)據(jù)存儲(chǔ)器中若干存儲(chǔ)單元組成,可由用戶自定義單元地址,一般開辟在內(nèi)部數(shù)據(jù)存儲(chǔ)器30H~7FH這個(gè)空間。存儲(chǔ)單元的個(gè)數(shù)稱為堆棧的深度,可理解為倉(cāng)庫(kù)容量。為了實(shí)現(xiàn)上述數(shù)據(jù)保護(hù)的需要,數(shù)據(jù)的存取,要遵循先進(jìn)后出,后進(jìn)先出的原則。80C51單片機(jī)中用堆棧指針SP(81H)來(lái)實(shí)現(xiàn)數(shù)據(jù)的先進(jìn)后出,后進(jìn)先出,即不可位尋址。它開辟在特殊功能寄存器81H中,沒(méi)有位地址,即不可位尋址,如圖3-12所示第三十九頁(yè),共56頁(yè)。堆棧指針SP是用來(lái)存放堆棧數(shù)據(jù)區(qū)的地址,如圖3-13所示。一般為了書寫方便,堆棧的示意圖,如圖3-14所示。第四十頁(yè),共56頁(yè)。堆棧數(shù)據(jù)的存取又稱之為進(jìn)棧和出棧。進(jìn)棧時(shí),首先堆棧指針加1,即(SP)←(SP)+1,然后數(shù)據(jù)進(jìn)棧;出棧時(shí),先取堆棧的數(shù)據(jù),然后堆棧指針減1,即(SP)←(SP)-1。數(shù)據(jù)的進(jìn)棧和出棧,又有兩種操作形式,一是硬件操作,計(jì)算機(jī)執(zhí)行某個(gè)操作時(shí),硬件自動(dòng)進(jìn)棧(中斷、調(diào)用)和出棧(返回指令),用于保護(hù)斷點(diǎn)。二是軟件操作,由指令PUSHdirect(進(jìn)棧)和指令POPdirect(出棧)來(lái)實(shí)現(xiàn)。不管是硬件操作還是軟件操作,進(jìn)棧時(shí),首先堆棧指針加1,然后數(shù)據(jù)進(jìn)棧;出棧時(shí),先取堆棧的數(shù)據(jù),然后堆棧指針減1。下面以軟件操作加以說(shuō)明。第四十一頁(yè),共56頁(yè)。例2:已知(SP)=2FH,(40H)=22H,(41H)=33H執(zhí)行下列程序。PUSH40HPUSH41HPOP40HPOP41H解:根據(jù)初始條件,得示意圖,存儲(chǔ)器中沒(méi)有提到單元的數(shù)據(jù)為任意值。第四十二頁(yè),共56頁(yè)。執(zhí)行第一條指令PUSH40H,首先(SP)←(SP)+1=2FH+1=30H,然后將40H中的數(shù)據(jù)22H,送入堆棧指針SP指向的單元30H中,如圖3-16(a)所示。第一個(gè)進(jìn)棧的數(shù)據(jù)不是堆棧指針指向的初始單元,在計(jì)算機(jī)中數(shù)據(jù)的傳送,不是完全給予的意思,而是復(fù)制,40H單元數(shù)據(jù)進(jìn)棧后,影響了堆棧指針指向的單元,但不影響40H這個(gè)單元的原始數(shù)據(jù),所以40H的數(shù)據(jù)仍為22H。第四十三頁(yè),共56頁(yè)。執(zhí)行第二條指令PUSH41H,進(jìn)棧過(guò)程同第一條指令。進(jìn)棧后,示意圖如圖3-16(b)所示。第四十四頁(yè),共56頁(yè)。執(zhí)行第三條指令POP40H,首先是取堆棧指針指向單元的數(shù)據(jù)給40H,則40H的數(shù)據(jù)為33H,然后將(SP)←(SP)-1=31H-1=30H,執(zhí)行完后,示意圖如圖3-16(c)所示。第四十五頁(yè),共56頁(yè)。執(zhí)行第四條指令POP41H,出棧過(guò)程同第四條指令,示意圖如圖3-16(d)所示。當(dāng)數(shù)據(jù)取出后,堆棧指針又回到初始狀態(tài),如圖3-15所示。但原來(lái)進(jìn)棧的數(shù)還存于堆棧中,直到下次進(jìn)棧的數(shù)據(jù)將其覆蓋。第四十六頁(yè),共56頁(yè)。該程序,是將40H和41H的數(shù)據(jù)交換,進(jìn)棧兩次,出棧兩次,所以堆棧指針SP的值,仍為初始值2FH,堆棧指針的初始值指向的單元,是不能用于存放堆棧數(shù)據(jù)的,第一個(gè)入棧的數(shù)據(jù),是該單元的地址加1單元。第四十七頁(yè),共56頁(yè)。系統(tǒng)復(fù)位時(shí)堆棧指示器的值為07H,即指向的是工作寄存器區(qū)0組的R7單元,如圖3-17所示,第一個(gè)入棧的數(shù)放于08H單元,但堆棧一般開辟在用戶區(qū)(30H~7FH)中。堆棧的深度是由數(shù)據(jù)連續(xù)進(jìn)棧的次數(shù)來(lái)決定的。若根據(jù)某個(gè)程序設(shè)計(jì)的需要,需要16個(gè)單元堆棧來(lái)存儲(chǔ)數(shù)據(jù),堆棧開辟在40H到4FH單元,則堆棧指示器SP的初始值應(yīng)付3FH,第一個(gè)入棧的數(shù)放入40H中,在程序的設(shè)計(jì)中,40H~41H中不能用于其它的數(shù)據(jù)的存放,否則數(shù)據(jù)被覆蓋。若實(shí)際進(jìn)棧的數(shù)據(jù)超出了16個(gè)單元,則堆棧溢出,溢出的單元在50H以上,這些單元沒(méi)有數(shù)據(jù),則沒(méi)有影響,否則影響原有數(shù)據(jù)。堆棧指針始終指向的是堆棧的棧頂位置。第四十八頁(yè),共56頁(yè)。注:★51子系列中,共有18個(gè)SFR(特殊功能寄存器),占用21個(gè)單元,我們先學(xué)5個(gè)SFR(共6個(gè)單元),其余SFR在后面的學(xué)習(xí)中,會(huì)逐步的給大家介紹?!镞@18個(gè)SFR,21個(gè)單元中,字節(jié)地址能被8整除的單元是可以進(jìn)行位尋址的,也就是說(shuō)字節(jié)地址的后面一位是0或者8,都是可以進(jìn)行位尋址的(bit)?!锟晌粚ぶ返膯卧?,可以用位地址、位編號(hào)或位定義,在尋址中都稱之為位尋址(bit)?!锵到y(tǒng)復(fù)位后,各寄存器的值如表3-4所示。第四十九頁(yè),共56頁(yè)。第五十頁(yè),共56頁(yè)。3.3.4程序存儲(chǔ)器程序存儲(chǔ)器的作用是用來(lái)存放程序和數(shù)表(固定不變的常數(shù))。AT89S51單片機(jī)內(nèi)部有4K的程序存儲(chǔ)器FlashROM,外部最多可擴(kuò)展64K的程序存儲(chǔ)器,內(nèi)外程序存儲(chǔ)器采用統(tǒng)一編址的方法,即共用64K的地址,地址范圍0000H~FFFFH,不管是內(nèi)部還是外部都是用指令MOVC來(lái)訪問(wèn)。如圖3-18所示。第五十一頁(yè),共56頁(yè)。1.程序存儲(chǔ)器的結(jié)構(gòu)●8051(80C51)系列有64KROM的尋址區(qū),地址范圍0000H~FFFFH,用于存放程序。●其中低4K(0000H~0FFFH)的地址區(qū)可以為片內(nèi)ROM和片外ROM共用,但不能同時(shí)使用(由外引腳決定)。

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論