[計算機硬件及網(wǎng)絡(luò)]第3章 80C51單片機的存儲器結(jié)構(gòu)ppt課件_第1頁
[計算機硬件及網(wǎng)絡(luò)]第3章 80C51單片機的存儲器結(jié)構(gòu)ppt課件_第2頁
[計算機硬件及網(wǎng)絡(luò)]第3章 80C51單片機的存儲器結(jié)構(gòu)ppt課件_第3頁
[計算機硬件及網(wǎng)絡(luò)]第3章 80C51單片機的存儲器結(jié)構(gòu)ppt課件_第4頁
[計算機硬件及網(wǎng)絡(luò)]第3章 80C51單片機的存儲器結(jié)構(gòu)ppt課件_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3章章 80C51單片機的存儲器構(gòu)造單片機的存儲器構(gòu)造3.1 存儲器的分類 存儲器的的作用是用來存放程序和數(shù)據(jù),存儲器可分為磁存儲和半導(dǎo)體存儲器,半導(dǎo)體存儲器按功能又可分為只讀存儲器ROM和隨機存儲器RAM,如圖3-1所示。單片機存儲器構(gòu)造中都采用半導(dǎo)體存儲器。1. 只讀存儲器ROM 只讀存儲器在正常工作狀態(tài)下只能從中讀出數(shù)據(jù),用戶不能快速地隨時修改或者重新寫入數(shù)據(jù),數(shù)據(jù)可長時間的保存。1可編程ROM,可通過專用設(shè)備編程器將數(shù)據(jù)寫入ROM。 PROM:用戶可一次編程; EPROM:紫外線擦除,電改寫屢次; EEPROM:電擦除,電改寫屢次; FLASHROM:閃存屢次。2掩膜ROM 用戶不

2、能將數(shù)據(jù)寫入,由廠家寫入數(shù)據(jù)。 由于上述特點,所以在單片機中一般做為程序由于上述特點,所以在單片機中一般做為程序存儲器。存儲器。2. 隨機存取存儲器RAM 在加電期間,可以隨時向存儲器里寫入數(shù)據(jù)或從中讀出數(shù)據(jù),但掉電后,數(shù)據(jù)喪失。 SRAM:靜態(tài)存儲器,加電期間數(shù)據(jù)可以長久保存,掉電信息喪失。 DRAM:動態(tài)存儲器,即使在加電期間數(shù)據(jù)也會喪失數(shù)據(jù)要刷新。 由于上述特點,所以在單片機中一般作由于上述特點,所以在單片機中一般作為數(shù)據(jù)儲存器。為數(shù)據(jù)儲存器。3.2 計算機中儲存器的兩種構(gòu)造 在計算機中存儲器的用處是存放程序和數(shù)據(jù),它有兩種構(gòu)造:馮諾伊曼構(gòu)造和哈佛構(gòu)造。 馮諾伊曼構(gòu)造:程序和數(shù)據(jù)共用一個

3、存儲器邏輯空間,統(tǒng)一編址。 哈佛構(gòu)造:程序與數(shù)據(jù)分為兩個獨立存儲器邏輯空間,分開編址。注: 個人電腦PC機采用的是馮諾伊曼結(jié) 構(gòu); 單片機一般采用哈佛構(gòu)造8051; 805180C51單片機,數(shù)據(jù)存儲器用的是 SRAM程序存儲器用的是ROM。3.3 80C51單片機的儲存器3.3.1 805180C51系列存儲器構(gòu)造1. 物理空間有四個部分 1內(nèi)部數(shù)據(jù)存儲器128B SRAM。 2外部擴展數(shù)據(jù)存儲器最大64K RAM。 3內(nèi)部程序存儲器4K FlashROM AT89S51。 4外部擴展程序存儲器最大64K RAM。2. 邏輯空間有三個部分 1程序存儲器ROM:包括內(nèi)部和外部,共用一個64K的

4、尋址空間。 2內(nèi)部數(shù)據(jù)存儲器RAM128B,獨立的一個128B的尋址空間。 3外部數(shù)據(jù)存儲器RAM64K,獨立的一個64K的尋址空間。如圖3-2所示。內(nèi)部數(shù)據(jù)存儲器和外部數(shù)據(jù)存儲器互相之間獨立編址,內(nèi)部數(shù)據(jù)存儲器和外部數(shù)據(jù)存儲器互相之間獨立編址,內(nèi)部程序存儲器和外部程序存儲器統(tǒng)一編址,共用一個內(nèi)部程序存儲器和外部程序存儲器統(tǒng)一編址,共用一個64K的尋址空的尋址空間。間。外部數(shù)據(jù)儲存器64K(SRAM)內(nèi)部數(shù)據(jù)儲存器128B(SRAM)SFR00H7FHFFH0000HFFFFH0000HFFFFH0FFFH80H1000H內(nèi)部程序儲存器4K(ROM)外部程序儲存器64K(ROM)3.3.2 數(shù)

5、據(jù)儲存器 數(shù)據(jù)存儲器是采用了靜態(tài)隨機存儲器SRAM的構(gòu)造,掉電信息喪失,故用于暫存數(shù)據(jù)及運算的中間結(jié)果。1. 內(nèi)部數(shù)據(jù)存儲器的構(gòu)造 內(nèi)部數(shù)據(jù)儲存器它由工作存放器區(qū)、位尋址區(qū)、用戶區(qū)三個部分組成,地址范圍00H7FH,共128個單元。用戶對這些單元的訪問,可以用可以用“直接尋直接尋址的方法,即在指令中用址的方法,即在指令中用“direct表示,表示,指的就是00H7FH這128個地址單元,指令中直接給出操作數(shù)所在單元地址的這種尋址方式稱之為“直接尋址。 何為尋址方式,即尋找操作數(shù)的方法。圖3-3 內(nèi)部數(shù)據(jù)存儲器構(gòu)造工作寄存器區(qū)00H7FH位尋址區(qū)用戶區(qū)1FH20H2FH30H1工作存放器區(qū)00H

6、1FH 共32個單元,又分為4組,每組8個單元,都用R0R7表示,如圖3-4所示,R0R1R2R3R4R5R6R700H01H02H03H04H05H06H07H1組2組3組08H0FH1FH18H17H10HR0R0R0R7R7R70組個存放器對應(yīng)的地址見表3-1所示 在內(nèi)部工作存放器中的地址是唯一,但存放器名重名,一個存放器名對應(yīng)有4個單元,為理解決重名問題,單片機用特殊功能存放器PSW中的RS1、RS0來選擇,也就是說,單片機在工作時不會同時使用這4組存放器,在某一時刻,只能選擇其中的一組。工作存放器組地址存放器名RS1RS00組00H07HR0R7001組08H0FHR0R7012組1

7、0H17HR0R7103組18H1FHR0R711 在指令系統(tǒng)中對于這些空間的訪問有以下方法:直接使用地址,在指令系統(tǒng)中用直接使用地址,在指令系統(tǒng)中用“direct表示,表示,這種方式稱之為直接尋址。這種方式稱之為直接尋址。 如:指令 MOV A , direct ;指令中的“direct就是指內(nèi)部數(shù)據(jù)存儲器中的地址00H7FH 該指令就是把direct這個單元中的操作數(shù)傳送到A中。操作數(shù)是指指令中參與操作的數(shù)據(jù)。 指令系統(tǒng)中出現(xiàn)的“direct,在實際編程的過程中不能出現(xiàn),必須寫對應(yīng)的實際地址“00H7FH,這一點非常重要。 如:MOV A , 30H ;就是將30H中的數(shù)送給A。直接使用存

8、放器名R0R7,指令系統(tǒng)中用指令系統(tǒng)中用“Rn表示這表示這8個存放器,這種方式的尋址稱之為個存放器,這種方式的尋址稱之為“存放存放器尋址,器尋址,就是操作數(shù)放在存放器中。 如:指令 MOV A , Rn ;指令中的“Rn就是指工作存放器R0R7。該指令就是把Rn中的操作數(shù)傳送到A中。 指令系統(tǒng)中出現(xiàn)的“Rn,在實際編程的過程中不能出現(xiàn),必須寫對應(yīng)的存放器“R0R7。 如:MOV A , R3 ;就是將工作存放器R3中的數(shù)傳送到A中。R0和R1這兩個存放器還有一種用法,稱之為稱之為“存放器間接尋址,存放器間接尋址,用“Ri表示,i=0、1。R0和R1存放的是操作數(shù)所在單元的地址。 如:MOV A

9、, Ri ; 指令中的“Ri就是指工作存放器R0和R1。該指令就是把Ri中的數(shù)取出作為所取數(shù)據(jù)的單元地址。指令系統(tǒng)中出現(xiàn)“Ri,在實際編程的過程中不能出現(xiàn),必須寫 “R0或R1。 如:MOV A , R0 ;就是將R0中的數(shù)取出,作為所取數(shù)據(jù)的地址,將該地址單元的數(shù)取出送到A中。如圖3-5所示, R0所指的操作數(shù)就是10101010BAAH。3-5所示, 指令MOV A , R0 操作示意??梢杂肦0=40H=AAH表示。00H1FH20H2FH30H1 0 1 0 1 0 1 00 1 0 0 0 0 0 0R040H 注: 在存放器尋址中Rn,這4組存放器,由用戶使用中通過PSW中的RS1

10、和RS0的設(shè)定,來確定用戶使用的組。 這32個單元可以使用“直接尋址 方式,也可使用“存放器尋址方式來進展訪問。 4組中的R0和R1除了“直接尋址和“存放器尋址外,還可采用“存放器間接尋址方式來訪問。2 位尋址區(qū)20H2FH 這16個RAM 單元具有雙重功能。它們既可以像普通RAM 單元一樣按字節(jié)存取,即“直接尋址direct也可以對每個RAM 單元中的任何一個二進制位單獨存取,這就這就是位尋址是位尋址bit,80C51單片機為這些區(qū)域?qū)iT設(shè)置了位處理器一個1位的CPU,用于這些空間的訪問,如圖3-6所示。圖3-6,位地址表。07H17H0FH06H16H0EH05H15H0DH04H14H0

11、CH03H13H0BH02H12H0AH01H11H09H00H10H08H1FH2FH27H1EH2EH26H1DH2DH25H1CH2CH24H1BH2BH23H1AH2AH22H19H29H21H18H28H20H37H3FH36H3EH35H3DH34H3CH33H3BH32H3AH31H39H30H38H47H 46H 45H 44H 43H 42H 41H 40H4FH57H4EH56H4DH55H4CH54H4BH53H4AH52H49H51H48H50H5FH 5EH 5DH 5CH 5BH 5AH 59H 58H67H6FH66H6EH65H6DH64H6CH63H6BH62

12、H6AH61H69H60H68H77H7FH76H7EH75H7DH74H7CH73H7BH72H7AH71H79H70H78H20H23H2FH28H2CH2EH2BH2AH27H29H26H2DH25H24H22H21H 在指令系統(tǒng)中對于這些空間的訪問有以下方法: 可以采用“直接尋址的方式去訪問這16個單元; 如:MOV A , 20H MOV A , direct 也可以采用“位尋址bit的方式去訪問這128個二進制位。 如:MOV C , 00H MOV C , bit 該指令就是把00H中的一個二進制數(shù)送到C中。 指令中“bit,指的就是位地址“00H7FH。注: 字節(jié)地址:20H2

13、FH,位地址:00H7FH。 為了區(qū)分位地址“00H7FH和內(nèi)部數(shù)據(jù)存儲器的地址“00H7FH,提到位尋址區(qū)中的位地址時,必須注明位地址。單元地址,稱之為字節(jié)地址,也可簡稱地址。3數(shù)據(jù)緩沖區(qū)用戶區(qū)30H7FH 數(shù)據(jù)緩沖區(qū)共有80個RAM 單元,用于存放用戶數(shù)據(jù)或作堆棧區(qū)使用,也稱用戶RAM區(qū)。80C51對用戶RAM區(qū)中每個RAM單元只能按字節(jié)存取的不可位尋址。 在指令系統(tǒng)中對于這些空間的訪問只有一種方法,即直接尋址即直接尋址direct。如:MOV A , 40H MOV A , direct內(nèi)部數(shù)據(jù)存儲器小結(jié): 內(nèi)部數(shù)據(jù)存儲器中所有的單元128B都可以用直接尋址的方法來進展訪問direct。

14、 工作存放器區(qū)也可以用存放器尋址Rn的方法來訪問,指令系統(tǒng)中一般都用存放器尋址Rn的方法來訪問該空間。除了存放器尋址的方式,R0和R1也可采用存放器間接尋址Ri的方式,在使用中R0和R1必須先滿足間接尋址方式,有多余的可用于存放器尋址方式。 位尋址區(qū),對這16個單元可以使用直接尋址方式,這16個單元中的128個位都有位地址,還可以用位尋址的方式來訪問。 用戶區(qū)只能用直接尋址的方式來訪問。 指令系統(tǒng)中所有的數(shù)據(jù)處理、運算都是在內(nèi)部數(shù)據(jù)存儲器中完成,所以指令系統(tǒng)也是非常豐富的大部分指令都是針對該空間。2. 外部數(shù)據(jù)存儲器 當(dāng)內(nèi)部數(shù)據(jù)存儲器不夠用時,在單片機的外總線上可以最大擴展64K的RAM,可獨

15、立尋址,有專用指令系統(tǒng)MOVX傳送指令,不能用于數(shù)據(jù)的運算及處理,所以僅有4條指令,兩條讀,兩條寫,用于一般數(shù)據(jù)的存放,地址為0000HFFFFH。尋址方式采用存放器間接尋址的方式,如MOVX A , DPTR.,指令中DPTR,開拓在特殊功能存放器SFR中,是一個16位的數(shù)據(jù)存儲器數(shù)據(jù)指針,用于訪問外部數(shù)據(jù)存儲器和程序存儲器,一般用于存放的是外部數(shù)據(jù)存儲器和程序存儲器的地址外部數(shù)據(jù)存儲器的地址也是16位。存儲器構(gòu)造見圖3-7所示。圖3-7 外部數(shù)據(jù)存儲器構(gòu)造外部數(shù)據(jù)儲存器64K(SRAM)FFFFH0000H3.3.3 特殊功能存放器SFR 80C51系列單片機內(nèi)的鎖存器、定時器、串行口、數(shù)

16、據(jù)緩沖器及各種控制存放器、狀態(tài)存放器都以特殊功能存放器SFR的形式出現(xiàn),它們離散地分布在高128位片內(nèi)RAM 80HFFH中。51子系列共有18個特殊功能存放器,占用21個單元,其余107個單元用戶不好使用AT89C51。表3-2 SFR地址映像表 這18個特殊功能存放器,其中有15個特殊功能存放器占用1個單元,另外3個特殊功能存放器占用2個單元,這就是為什么18個特殊功能存放器占用21個單元的原因。這18個特功能存放器我們先學(xué)5個,其余的放在以后學(xué)習(xí)。 1累加器ACCE0H 累加器ACC 是80C51型單片機中最常用的存放器。許多指令的操作數(shù)取自ACC,許多運算的結(jié)果存放在ACC 中。乘除法

17、指令必須通過ACC 進展。累加器ACC 的指令助記符為。 簡單的講就是一個8位的存儲器,使用非常頻繁,很多指令中必須用到ACC。D7D6D5D4D3D2D1D0ACCE0HACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0E7H E6H E5H E4H E3H E2H E1H E0H 在指令系統(tǒng)中,可直接使用存放器名ACCA和字節(jié)地址E0H對這八個二進制位進展操作,前者稱之為存放器尋址,后者稱之為直接尋址direct,用戶一般使用存放器尋址,即存放器尋址,在特殊條件下才會使用直接尋址。累加器ACC也是一個可以對8個二進制位進展位尋址的存放器,8個二進

18、制位都有唯一的位地址,指令中只能使用位地址bit,也稱之為位尋址,假設(shè)使用位編號,編譯軟件會將位編號轉(zhuǎn)換成位地址,再進展編譯,最后形成目的文件。 2存放器F0H 80C51單片機乘除法指令中要用到存放器,用于存放操作數(shù)和操作結(jié)果。也可作為通用存儲器器使用。 在乘除指令中,直接使用存放器名B,稱之為存放器尋存放器尋址址。用作通用存儲器時只能使用地址F0H稱之為直接尋址直接尋址,假設(shè)用存放器名B,編譯軟件會將其轉(zhuǎn)換成地址F0H來使用。存放器B是可以進展位尋址的單元,8個二進制位都有唯一的位地址,在對二進制位尋址時,指令中只能使用位地址bit,稱之為位尋址,假設(shè)使用位編號,編譯軟件會將位編號轉(zhuǎn)換成位

19、地址,再進展編譯,最后形成目的文件,見圖3-9所示。D7D6D5D4D3D2D1D0BF0HB.7 B.6 B.5 B.4 B.3 B.2 B.1 B.0 F7H F6H F5H F4H F3H F2H F1H F0H3程序狀態(tài)字存放器程序狀態(tài)字存放器PSWD0H 程序狀態(tài)字存放器程序狀態(tài)字存放器PSW也稱為標志存放器,存放各有也稱為標志存放器,存放各有關(guān)標志和對工作存放器的選擇設(shè)置。其構(gòu)造和定義如圖關(guān)標志和對工作存放器的選擇設(shè)置。其構(gòu)造和定義如圖3-10所示。在指令系統(tǒng)中該單元只能使用字節(jié)地址所示。在指令系統(tǒng)中該單元只能使用字節(jié)地址D0H來訪問,來訪問,稱之為稱之為直接尋址直接尋址direc

20、t,假設(shè)用存放器名,假設(shè)用存放器名PSW,編譯軟,編譯軟件會將其轉(zhuǎn)換成地址件會將其轉(zhuǎn)換成地址D0H來使用。程序狀態(tài)字存放器來使用。程序狀態(tài)字存放器PSW是可以進展位尋址的單元,是可以進展位尋址的單元,8個二進制位都有唯一的位地址,個二進制位都有唯一的位地址,在對二進制位尋址時,指令中只能使用位地址在對二進制位尋址時,指令中只能使用位地址bit,稱之,稱之為為位尋址位尋址,假設(shè)使用位定義或位編號,編譯軟件會將位定義,假設(shè)使用位定義或位編號,編譯軟件會將位定義和位編號轉(zhuǎn)換成位地址,再進展編譯,最后形成目的文件。和位編號轉(zhuǎn)換成位地址,再進展編譯,最后形成目的文件。D7D6D5D4D3D2D1D0PS

21、WD0HPSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0CY AC F0 RS1 RS0 OV - P D7H D6H D5H D4H D3H D2H D1H D0H 該單元各位的定義如下:該單元各位的定義如下:CY:進借位標志位,有進借位:進借位標志位,有進借位CY1,否那,否那么么 CY0,主要用于加減運算中。,主要用于加減運算中。AC:輔助進借位標志位,低四位向高四位的進借:輔助進借位標志位,低四位向高四位的進借 位,有進借位,有進借AC=1,否那么,否那么AC=0,主要,主要用用 于加減運算中。于加減運算中。RS1、RS0:工作存放器組的選

22、擇位,見表:工作存放器組的選擇位,見表3-3所示。所示。字節(jié)地址字節(jié)地址存放器名存放器名RS1RS1RS0RS00 0組組00H00H07H07HR0R0R7R70 00 01 1組組08H08H0FH0FHR0R0R7R70 01 12 2組組10H10H17H17HR0R0R7R71 10 03 3組組18H18H1FH1FHR0R0R7R71 11 1OV:溢出標志位,:溢出標志位,80C51單片機單片機CPU的位數(shù)是的位數(shù)是8位,那么表位,那么表示示 帶符號數(shù)的位數(shù)只能是帶符號數(shù)的位數(shù)只能是8位,最高位是符號位,數(shù)據(jù)位位,最高位是符號位,數(shù)據(jù)位 只有只有7位,數(shù)的范圍在位,數(shù)的范圍在-

23、128+127之間,假設(shè)運算的結(jié)之間,假設(shè)運算的結(jié)果果 超出這個范圍,溢出結(jié)果出錯。計算機中判斷結(jié)超出這個范圍,溢出結(jié)果出錯。計算機中判斷結(jié) 果溢出的算法是果溢出的算法是 公式:公式:OV =Cy6 Cy7 ; 式中,式中,Cy6表示表示D6位向位向D7位的進位或借位,位的進位或借位, Cy7表示表示D6位向位向CY的進位或借位。的進位或借位。F0:用戶位,用戶可以作為一般的一位二進制數(shù)的存儲器使:用戶位,用戶可以作為一般的一位二進制數(shù)的存儲器使 用。用。P:奇偶標志位,累加器:奇偶標志位,累加器A中中1的個數(shù)為奇數(shù)時的個數(shù)為奇數(shù)時P=1,否,否 那么那么P=0,只要,只要A中的數(shù)值發(fā)生變化,

24、就影響中的數(shù)值發(fā)生變化,就影響P實實時時 反映累加器反映累加器A中中1的個數(shù)的奇偶性。的個數(shù)的奇偶性。注:注: CY、AC、OV、P這這4個標志位由指令運行后,對其個標志位由指令運行后,對其 產(chǎn)生影響由硬件產(chǎn)生各標志,主要用于算術(shù)運算產(chǎn)生影響由硬件產(chǎn)生各標志,主要用于算術(shù)運算 類指令,除了類指令,除了CY一般這一般這3位不會用于數(shù)據(jù)的存儲,位不會用于數(shù)據(jù)的存儲, CY也是位處理器也是位處理器1位的位的CPU中的累加器,在位操中的累加器,在位操 作中使用較為頻繁。作中使用較為頻繁。 P 在任何一條指令中,只要有累加器在任何一條指令中,只要有累加器A出現(xiàn)并且出現(xiàn)并且A中的中的 值發(fā)生變化,就會影響

25、值發(fā)生變化,就會影響P。 RS1、RS0是工作存放器組的選擇位,由用戶根據(jù)需是工作存放器組的選擇位,由用戶根據(jù)需 要通過指令來設(shè)定,去選擇存放器組軟件設(shè)定。要通過指令來設(shè)定,去選擇存放器組軟件設(shè)定。例例1:X=13,Y=6,求X+Y的補碼運算。解:解:X補碼=F3H,Y補碼=FAH, X+Y補碼,那么: X補碼 : 1 1 1 1 0 0 1 1 B Y補碼 : + 1 1 1 1 1 0 1 0 B X補碼+Y補碼 : 1 1 1 1 0 1 1 0 1 B 在單片機中,上述運算后,CY=1,AC=0, OV= Cy6 Cy7=1 1=0結(jié)果正確,P=0。 4數(shù)據(jù)指針數(shù)據(jù)指針DPTR83H、

26、82H 數(shù)據(jù)指針數(shù)據(jù)指針DPTR是一個是一個16位的特殊功能存放器,不可位位的特殊功能存放器,不可位尋址,由兩個位存放器尋址,由兩個位存放器DPH83H 和和DPL82H 組組成,成,DPH 是是DPTR的高位,的高位,DPL是是DPTR的低位,的低位,DPTR既可合并作為一個既可合并作為一個16位存放器,又可分開按位存放位存放器,又可分開按位存放器單獨操作,見圖器單獨操作,見圖3-11所示。所示。 在指令中一般都是以一個在指令中一般都是以一個16位的存放器位的存放器DPTR使用使用,用用于存放外部數(shù)據(jù)存儲器的地址和程序程序器的地址,訪問外于存放外部數(shù)據(jù)存儲器的地址和程序程序器的地址,訪問外部

27、數(shù)據(jù)存儲器是用部數(shù)據(jù)存儲器是用DPTR,稱之為,稱之為存放器間接尋址存放器間接尋址;訪問;訪問程序存儲器是用程序存儲器是用A+DPTR,稱之,稱之為變址尋址為變址尋址。作為兩個獨。作為兩個獨立的立的8位存放器位存放器DPH、DPL使用時,只能使用其地址,使用時,只能使用其地址,在指令系統(tǒng)中會詳解。在指令系統(tǒng)中會詳解。5堆棧指針堆棧指針SP81H 堆棧是堆棧是CPU 用于暫時存放部分數(shù)據(jù)的用于暫時存放部分數(shù)據(jù)的“倉庫倉庫,它的作它的作用是用來保護現(xiàn)場和保護斷點。在用是用來保護現(xiàn)場和保護斷點。在80C51中,由內(nèi)部數(shù)據(jù)存中,由內(nèi)部數(shù)據(jù)存儲器中假設(shè)干存儲單元組成,可由用戶自定義單元地址,一儲器中假設(shè)

28、干存儲單元組成,可由用戶自定義單元地址,一般開拓在內(nèi)部數(shù)據(jù)存儲器般開拓在內(nèi)部數(shù)據(jù)存儲器30H7FH這個空間。存儲單元的這個空間。存儲單元的個數(shù)稱為堆棧的深度,可理解為倉庫容量。為了實現(xiàn)上述數(shù)個數(shù)稱為堆棧的深度,可理解為倉庫容量。為了實現(xiàn)上述數(shù)據(jù)保護的需要,數(shù)據(jù)的存取,要遵循先進后出,后進先出的據(jù)保護的需要,數(shù)據(jù)的存取,要遵循先進后出,后進先出的原那么。原那么。80C51單片機中用堆棧指針單片機中用堆棧指針SP81H來實現(xiàn)數(shù)據(jù)來實現(xiàn)數(shù)據(jù)的先進后出,后進先出,即不可位尋址。它開拓在特殊功能的先進后出,后進先出,即不可位尋址。它開拓在特殊功能存放器存放器81H中,沒有位地址,即不可位尋址,如圖中,沒

29、有位地址,即不可位尋址,如圖3-12所示所示D7D6D5D4D3D2D1D0SP81H 堆棧指針堆棧指針SP是用來存放堆棧數(shù)據(jù)區(qū)的地址,如圖是用來存放堆棧數(shù)據(jù)區(qū)的地址,如圖3-13所示。一般為了書寫方便,堆棧的示意圖,如圖所示。一般為了書寫方便,堆棧的示意圖,如圖3-14所示。所示。SP2FH00H2FH30H31H32H33H34H35H80H81HFFH7FH1FH20H特殊功能寄存器區(qū)用戶區(qū)位尋址區(qū)工作寄存器區(qū)SP(81H)2FH2FH30H31H32H33H34H35H7FH用戶區(qū) 堆棧數(shù)據(jù)的存取又稱之為進棧和出棧。進棧時,首先堆堆棧數(shù)據(jù)的存取又稱之為進棧和出棧。進棧時,首先堆棧指針加

30、棧指針加1,即,即SP SP+1,然后數(shù)據(jù)進棧;出棧,然后數(shù)據(jù)進棧;出棧時,先取堆棧的數(shù)據(jù),然后堆棧指針減時,先取堆棧的數(shù)據(jù),然后堆棧指針減1,即,即SP SP-1。 數(shù)據(jù)的進棧和出棧,又有兩種操作形式,一是硬件操作,數(shù)據(jù)的進棧和出棧,又有兩種操作形式,一是硬件操作,計算機執(zhí)行某個操作時,硬件自動進棧中斷、調(diào)用和出計算機執(zhí)行某個操作時,硬件自動進棧中斷、調(diào)用和出棧返回指令,用于保護斷點。二是軟件操作,由指令棧返回指令,用于保護斷點。二是軟件操作,由指令PUSH direct進棧和指令進棧和指令POP direct出棧來實現(xiàn)。出棧來實現(xiàn)。不管是硬件操作還是軟件操作,進棧時,首先堆棧指針加不管是硬

31、件操作還是軟件操作,進棧時,首先堆棧指針加1,然后數(shù)據(jù)進棧;出棧時,先取堆棧的數(shù)據(jù),然后堆棧指針減然后數(shù)據(jù)進棧;出棧時,先取堆棧的數(shù)據(jù),然后堆棧指針減1。下面以軟件操作加以說明。下面以軟件操作加以說明。例例2:SP=2FH,40H=22H,41H=33H執(zhí)行以下程執(zhí)行以下程序。序。 PUSH 40H PUSH 41H POP 40H POP 41H解:根據(jù)初始條件,得示意圖,存儲器中沒有提到單元的數(shù)據(jù)解:根據(jù)初始條件,得示意圖,存儲器中沒有提到單元的數(shù)據(jù)為任意值。為任意值。SP(81H)2FH2FH30H31H32H40H41H42H7FHXXXXXXXX22H33HXXXXXX 執(zhí)行第一條指

32、令執(zhí)行第一條指令 PUSH 40H,首先,首先SP SP+1=2FH+1=30H,然后將,然后將40H中的數(shù)據(jù)中的數(shù)據(jù)22H,送入堆棧指針,送入堆棧指針SP指向的單元指向的單元30H中,如圖中,如圖3-16a所示。第一個進棧的數(shù)所示。第一個進棧的數(shù)據(jù)不是堆棧指針指向的初始單元,在計算機中數(shù)據(jù)的傳送,據(jù)不是堆棧指針指向的初始單元,在計算機中數(shù)據(jù)的傳送,不是完全給予的意思,而是復(fù)制,不是完全給予的意思,而是復(fù)制,40H單元數(shù)據(jù)進棧后,影單元數(shù)據(jù)進棧后,影響了堆棧指針指向的單元,但不影響響了堆棧指針指向的單元,但不影響40H這個單元的原始數(shù)這個單元的原始數(shù)據(jù),所以據(jù),所以40H的數(shù)據(jù)仍為的數(shù)據(jù)仍為2

33、2H。 執(zhí)行第二條指令執(zhí)行第二條指令 PUSH 41H,進棧過程同第一條指令。,進棧過程同第一條指令。進棧后,示意圖如圖進棧后,示意圖如圖3-16b所示。所示。 執(zhí)行第三條指令執(zhí)行第三條指令 POP 40H,首先是取堆棧指針指向單,首先是取堆棧指針指向單元的數(shù)據(jù)給元的數(shù)據(jù)給40H,那么,那么40H的數(shù)據(jù)為的數(shù)據(jù)為33H,然后將,然后將SP SP-1=31H-1=30H,執(zhí)行完后,示意圖如圖,執(zhí)行完后,示意圖如圖3-16c所示。所示。 執(zhí)行第四條指令執(zhí)行第四條指令 POP 41H,出棧過程同第四條指令,出棧過程同第四條指令,示意圖如圖示意圖如圖3-16d所示。當(dāng)數(shù)據(jù)取出后,堆棧指針又回所示。當(dāng)數(shù)

34、據(jù)取出后,堆棧指針又回到初始狀態(tài),如圖到初始狀態(tài),如圖3-15所示。但原來進棧的數(shù)還存于堆棧中,所示。但原來進棧的數(shù)還存于堆棧中,直到下次進棧的數(shù)據(jù)將其覆蓋。直到下次進棧的數(shù)據(jù)將其覆蓋。 該程序,是將該程序,是將40H和和41H的數(shù)據(jù)交換,進棧兩次,出棧的數(shù)據(jù)交換,進棧兩次,出棧兩次,所以堆棧指針兩次,所以堆棧指針SP的值,仍為初始值的值,仍為初始值2FH,堆棧指針的,堆棧指針的初始值指向的單元,是不能用于存放堆棧數(shù)據(jù)的,第一個入初始值指向的單元,是不能用于存放堆棧數(shù)據(jù)的,第一個入棧的數(shù)據(jù),是該單元的地址加棧的數(shù)據(jù),是該單元的地址加1單元。單元。 系統(tǒng)復(fù)位時堆棧指示器的值為系統(tǒng)復(fù)位時堆棧指示器

35、的值為07H,即指向的是工作存,即指向的是工作存放器區(qū)放器區(qū)0組的組的R7單元,如圖單元,如圖3-17所示,第一個入棧的數(shù)放于所示,第一個入棧的數(shù)放于08H單元,但堆棧一般開拓在用戶區(qū)單元,但堆棧一般開拓在用戶區(qū)30H7FH中。堆棧中。堆棧的深度是由數(shù)據(jù)連續(xù)進棧的次數(shù)來決定的。假設(shè)根據(jù)某個程的深度是由數(shù)據(jù)連續(xù)進棧的次數(shù)來決定的。假設(shè)根據(jù)某個程序設(shè)計的需要,需要序設(shè)計的需要,需要16個單元堆棧來存儲數(shù)據(jù),堆棧開拓在個單元堆棧來存儲數(shù)據(jù),堆棧開拓在40H到到4FH單元,那么堆棧指示器單元,那么堆棧指示器SP的初始值應(yīng)付的初始值應(yīng)付3FH,第,第一個入棧的數(shù)放入一個入棧的數(shù)放入40H中,在程序的設(shè)計

36、中,中,在程序的設(shè)計中,40H41H中不中不能用于其它的數(shù)據(jù)的存放,否那么數(shù)據(jù)被覆蓋。假設(shè)實際進能用于其它的數(shù)據(jù)的存放,否那么數(shù)據(jù)被覆蓋。假設(shè)實際進棧的數(shù)據(jù)超出了棧的數(shù)據(jù)超出了16個單元,那么堆棧溢出,溢出的單元在個單元,那么堆棧溢出,溢出的單元在50H以上,這些單元沒有數(shù)據(jù),那么沒有影響,否那么影響以上,這些單元沒有數(shù)據(jù),那么沒有影響,否那么影響原有數(shù)據(jù)。堆棧指針始終指向的是堆棧的棧頂位置。原有數(shù)據(jù)。堆棧指針始終指向的是堆棧的棧頂位置。SP(81H)07H07H08H09H0AH00H7FHR7R0R1R2R0注:注: 51子系列中,共有子系列中,共有18個個SFR特殊功能存放器,特殊功能存

37、放器, 占用占用21個單元,我們先學(xué)個單元,我們先學(xué)5個個SFR共共6個單元,個單元, 其余其余SFR在后面的學(xué)習(xí)中,會逐步的給大家介紹。在后面的學(xué)習(xí)中,會逐步的給大家介紹。 這這18個個SFR,21個單元中,字節(jié)地址能被個單元中,字節(jié)地址能被8整除的單整除的單 元是可以進展位尋址的,也就是說字節(jié)地址的后面元是可以進展位尋址的,也就是說字節(jié)地址的后面 一位是一位是0或者或者8,都是可以進展位尋址的,都是可以進展位尋址的bit。 可位尋址的單元,可以用位地址、位編號或位定可位尋址的單元,可以用位地址、位編號或位定 義,在尋址中都稱之為位尋址義,在尋址中都稱之為位尋址bit。 系統(tǒng)復(fù)位后,各存放器

38、的值如表系統(tǒng)復(fù)位后,各存放器的值如表3-4所示。所示。3.3.4 程序存儲器程序存儲器 程序存儲器的作用是用來存放程序和數(shù)表固定不變的程序存儲器的作用是用來存放程序和數(shù)表固定不變的常數(shù)。常數(shù)。AT89S51單片機內(nèi)部有單片機內(nèi)部有4K的程序存儲器的程序存儲器FlashROM,外部最多可擴展,外部最多可擴展64K的程序存儲器,內(nèi)外程序的程序存儲器,內(nèi)外程序存儲器采用統(tǒng)一編址的方法,即共用存儲器采用統(tǒng)一編址的方法,即共用64K的地址,地址范圍的地址,地址范圍0000HFFFFH,不管是內(nèi)部還是外部都是用指令,不管是內(nèi)部還是外部都是用指令MOVC來來訪問。如圖訪問。如圖3-18所示。所示。0000H

39、FFFFH0FFFH1000H內(nèi)部程序儲存器4K(ROM)外部程序儲存器可擴展64K(ROM)1.程序存儲器的構(gòu)造程序存儲器的構(gòu)造 805180C51系列有系列有64K ROM 的尋址區(qū),地址范圍的尋址區(qū),地址范圍0000HFFFFH,用于存放程序。用于存放程序。 其中低其中低4K0000H0FFFH 的地址區(qū)可以為片內(nèi)的地址區(qū)可以為片內(nèi)ROM 和片外和片外ROM共用,但不能同時使用共用,但不能同時使用由外引腳由外引腳 決定決定。 高高60K1000HFFFFH 的地址區(qū)為片外的地址區(qū)為片外ROM所專用。所專用。注:注: 低低4K共用地址,這樣出現(xiàn)一個地址兩個單元,地址不能共用地址,這樣出現(xiàn)一

40、個地址兩個單元,地址不能 唯一,這在計算機中是不允許的;唯一,這在計算機中是不允許的; 解決方法,通過單片機的外引腳解決方法,通過單片機的外引腳 來實現(xiàn):來實現(xiàn): a、當(dāng)、當(dāng) EA=0時,時,CPU直接訪問直接訪問ROM0000HFFFFH, 內(nèi)部不用;內(nèi)部不用; b、 當(dāng)當(dāng) EA=1時,時,CPU先訪問內(nèi)部先訪問內(nèi)部ROM0000H0FFFH 完畢后,再去訪問外部完畢后,再去訪問外部ROM 1000HFFFFH,外部低,外部低4K不用,也不用,也 就是說外部低就是說外部低4K無需擴展,這種情況下,無需擴展,這種情況下, 外部最多可擴展外部最多可擴展60K。2. CPU對程序存儲器中程序的訪問對程序存儲器中程序的訪問 CPU對存儲器的訪問也就是執(zhí)行程序,程序存儲器的主對存儲器的訪問也就是執(zhí)行程序,程序存儲器的主要作用是用來存放程序,那要作用是用來存放程序,那CPU怎么去執(zhí)行程序呢?怎么知怎么去執(zhí)行程序呢?怎么知道哪一條指令先執(zhí)行?哪一條指令后執(zhí)行呢?其實計算機根道哪一條指令先執(zhí)行?哪一條指令后執(zhí)行呢?其實計算機根本不認程序,只認程序存儲器的單元地址,先從低字節(jié)地址本不認程序,只認程序存儲器的單元地址,先從低字節(jié)地址單元開場取指令

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論