官术网_书友最值得收藏!

2.3 AT89S51的存儲結構

AT89S51單片機的存儲器配置在物理結構上有4個存儲空間:片內程序存儲器、片外程序存儲器、片內數據存儲器、片外數據存儲器。從邏輯上來看,有3個存儲器地址空間:片內、外統一編址的程序存儲器地址空間,片內數據存儲器地址空間和片外數據存儲器地址空間。在訪問3個不同的邏輯空間時,應采用不同形式的指令,以產生不同的內部控制信號,用來選擇所需的邏輯空間。圖2-12表示了AT89S51單片機存儲器空間結構。

圖2-12 AT89S51單片機存儲器空間結構

(a)程序存儲器地址分配; (b)數據存儲器地址分配

2.3.1 程序存儲器

動畫:單片機的程序存儲器

微課:程序存儲器

單片機的程序存儲器一般用于存放編好的程序、表格和常數。AT89S51單片機的程序存儲器地址分配如圖2-13 (a)所示。其中,單片機內部有4 KB的程序存儲器,地址為0000H~0FFFH。片外最多可擴展空間達64 KB,地址為1000H~FFFFH,片內與片外程序存儲器的最大尋址范圍為64 KB (即地址為0000H~FFFFH)。由于單片機的程序存儲器采用片內、片外統一編址,所以范圍為0000H~0FFFH的地址空間是在片內存儲器還是片外存儲器,取決于單片機外圍引腳的狀態。如果接高電平(即=1),表示0000H~0FFFH在片內程序存儲器中;如果接低電平(即=0),則表示0000H~0FFFH在片外程序存儲器中。

一般來說,對于有內部程序存儲器的單片機,應將引腳EA接高電平,使程序從內部程序存儲器開始執行。當程序超出內部程序存儲器的容量時,自動轉向外部程序存儲器1000H~FFFFH地址范圍執行。

AT89S51單片機執行程序時,與微型計算機執行程序類似,也是由程序計數器PC控制程序執行的順序。單片機中的程序計數器PC (Program Counter)是一個16位的專用寄存器,用來存放即將執行的下一條指令所在的地址。它具有自動加1的功能。當CPU要取指令時,PC的內容送至地址總線上,從PC所指向的存儲器地址中取出指令,PC內容則自動加1,指向下一條指令,以保證程序按順序執行。當單片機接通電源時,PC 會被復位為0000H,此時,單片機從0000H開始將指令依次取出執行。

AT89S51的程序存儲器中有5個特殊地址單元,用于中斷程序的入口地址。

·0003H:外部中斷0入口地址。

·000BH:定時/計數器0中斷入口地址。

·0013H:外部中斷1入口地址。

·001BH:定時/計數器1中斷入口地址。

·0023H:串行口中斷入口地址。

由于0000H單元與這些中斷程序入口地址之間的存儲空間有限,為了不影響這些中斷入口地址的正常使用,常在0000H單元及這些中斷入口處都放置一條絕對無條件跳轉指令,使程序跳轉到用戶指定的主程序或中斷服務程序的存儲空間中執行。

2.3.2 數據存儲器

微課:數據存儲器

動畫:單片機的數據存儲器

數據存儲器(RAM)用于存放運算中間結果、數據暫存和緩沖、待調試的程序。數據存儲器在物理上和邏輯上都分為兩個地址空間:一個是由128 B的片內RAM和26個特殊功能寄存器(SFR)構成的內部數據存儲器,另一個是片外最大可擴充64 KB的數據存儲器,如圖2-12 (b)所示。

片外數據存儲器的使用通常出現在單片機內部RAM容量不夠的情況下。擴展容量可由用戶根據需要確定,最大可擴充 64 KB,地址范圍0000H~FFFFH。需要注意的是,AT89S51單片機擴展的I/O接口與片外數據存儲器統一編址。

使用片內和片外數據存儲器時采用不同的指令加以區別。在訪問片內數據存儲器時,可使用MOV指令;要訪問片外數據存儲器可使用MOVX指令。片外數據存儲器只能采用間接尋址方式,可使用 R0、R1 和 DPTR 作間址寄存器。R0、R1作為8位地址指針,尋址范圍為256 B;而DPTR是16位地址指針,故尋址范圍可達64 KB。

AT89S51單片機的內部數據存儲器只有地址為00~7FH的共128 B RAM可供用戶使用,與片內 RAM 統一編址的80H~FFH 地址空間中,只有26 個存儲空間被特殊功能寄存器(SFR)占用。

1.片內數據存儲區(00~7FH)

片內數據存儲區地址為00~7FH的空間劃分為工作寄存器區、位尋址區及用戶RAM區3部分。

(1)工作寄存器區(00H~1FH)

工作寄存器區共32個存儲單元,分為4組,每組由8個地址單元組成通用寄存器R0~R7,其地址分配如表2-2所示。每組寄存器均可作為CPU當前的工作寄存器,當前工作寄存器可通過特殊功能寄存器中的程序狀態字PSW的RS1、RS0兩位進行設置。例如,如果RS1 RS0=01H,則表示選中了第1組,即地址為08H~0FH的單元構成當前的工作寄存器R0~R7。

表2-2 單片機工作寄存器地址分配表

當CPU復位后,自動選中第0組工作寄存器。一旦選中了一組工作寄存器,其他3組的地址空間只能用于數據存儲器,不能作為寄存器。如果要使用必須重新設置RS1、RS0的狀態。

(2)位尋址區(20H~2FH)

位尋址區共16B,每1B 為8 位,共128 位,這128 位用位地址編號,范圍為00H~7FH。這些位地址單元構成了布爾處理器的存儲空間,其地址分布如表2-3所示。位尋址區既可采用位尋址方式訪問,也可以采用字節尋址方式訪問,這種位尋址能力是51系列單片機一個重要特點。

表2-3 位地址分配表

(3)用戶RAM區(30H~7FH)

用戶RAM區共80個單元,可作為堆棧或數據緩沖使用。

2.特殊功能寄存器區(80H~FFH)

AT89S51單片機中共有26個特殊功能寄存器(SFR),這些寄存器離散地分布在內部數據存儲器的80H~FFH這128 B的地址空間中。

這些特殊功能寄存器只能采用直接尋址及位尋址,其中,地址為X0H和X8H的各寄存器可位尋址,如表2-4所示,表中用“?”表示可位尋址的寄存器。

表2-4 特殊功能寄存器(SFR)地址分配表

這些特殊功能寄存器(SFR)都和單片機的相關部件有關,如ACC、B、PSW與CPU有關,SP、DPTR與存儲器有關,P0~P3與I/O端口有關,IP、IE 與中斷系統有關,TCON、TMOD、TH0、TL0、TH1、TL1與定時/計數器有關,SCON、SBUF與串行口有關,PCON與電源有關。這些SFR專門用來設置單片機內部的各種資源,記錄電路的運行狀態,參與各種運算及輸入/輸出操作,如設置中斷和定時器的工作方式、進行并行及串行輸入/輸出等。

下面簡述幾個常用的特殊功能寄存器的功能。

(1)累加器ACC

ACC是一個具有特殊用途的8位寄存器,主要用于存放操作數或運算結果。AT89S51指令系統中大多數指令的執行都要通過累加器ACC進行。因此,在CPU中,累加器的使用頻率是很高的。當采用寄存器尋址時,可用A表示累加器。

(2)寄存器B

寄存器B在乘、除法指令中用于暫存數據。乘法指令的兩個操作數分別取自于A和B,其結果存放在BA寄存器對中。具體應用見第3章中有關乘法、除法指令的內容。

(3)程序狀態字PSW

PSW是一個可編程的8位寄存器,用來存放與當前指令執行結果相關的狀態。AT89S51有些指令的執行會自動影響PSW相關位的狀態,在編程時要加以注意。同時,PSW中某些位的狀態也可通過指令設置。PSW各標志位的定義如表2-5所示。

表2-5 PSW各標志位

CY:進位標志位。當累加器A的最高位有進位(加法)或借位(減法)時,CY=1;否則CY=0。在布爾操作時,它是各種位操作的“累加器”。CY在指令中常簡記為C。

AC:輔助進位標志位。當累加器A的D3位向D4位進位或借位時,AC=1;否則為0。有時AC也被稱為半進位標志。

F0:用戶標志位。可以根據需要用程序將其置位或清0,以控制程序的轉向。

RS1、RS0:工作寄存器區選擇位。RS1、RS0可由指令置位或清0,用來選擇單片機的工作寄存器區,其選擇方法見表2-2。

OV:溢出標志位。當有符號數采用補碼運算時,其結果超出范圍(-127~+128)時,有溢出,OV=1;否則OV=0。

—:保留位。

P:奇偶校驗位。指示累加器A中操作結果的“1”的個數的奇偶性。凡是改變累加器A中內容的指令均影響P標志位。當A中有奇數個“1”,則P=1;否則P=0。此標志位對串行通信中的數據傳輸有重要的意義,在串行通信中常采用奇偶校驗的方法來校驗數據傳輸的可靠性。

(4)堆棧指針SP

堆棧是存儲區中一個存放數據地址的特殊區域,主要是用來暫存數據和地址的,操作時按先進后出的原則存放數據,其生成方向由低地址到高地址。

堆棧指針SP是一個8位特殊功能寄存器,指示堆棧的底部在片內RAM中的位置。系統復位后,SP的初始值為07H。由于08H~1FH單元分屬于工作寄存器區1~3,所以一般將SP的初值改變至片內RAM的高地址區(30H以上)。

(5)數據指針DPTR

DPTR是一個16位地址寄存器,主要用來存放16位地址,作間接尋址寄存器使用,可用于讀寫外接數據存儲器或I/O端口。AT89S51單片機提供了兩個數據指針DP0和DP1,可通過雙時鐘指針寄存器AUXR1來選擇,如表2-4所示。當DPTR選擇位DPS為0時,選擇DP0;為1時,選擇DP1。它們也可以拆成兩個獨立的8位寄存器使用,即DPH (高8位)和DPL (低8位)。

(6)端口P0~P3

P0~P3分別表示I/O端口中的P0~P3鎖存器。在AT89S51中可以把I/O端口當作一般的特殊功能寄存器來使用,不再專設端口操作指令,均采用統一的MOV指令,使用方便。

(7)串行數據緩沖器SBUF

串行數據緩沖器SBUF用于存放串行通信中待發送或已接收到的數據。它實際上是由兩個獨立的寄存器組成,一個是發送緩沖器,一個是接收緩沖器。

(8)定時/計數器TH1、TL1、TH0、TL0

AT89S51中有兩個16位定時/計數器T0和T1。它們各自由兩個獨立的8位寄存器組成,共為4個寄存器TH1、TL1、TH0和TL0,可以分別對這4個寄存器尋址,但不能把T0、T1當16位寄存器來對待。由于定時/計數器工作方式的不同,定時器使用的有效位數會發生變化。具體應用見第5章相關章節。

除上述SFR以外,另外還有IE、IP、TMOD、TCON,SCON和PCON等寄存器,將在以后的章節中介紹。

主站蜘蛛池模板: 石屏县| 轮台县| 南丹县| 滕州市| 济南市| 裕民县| 鄯善县| 弋阳县| 夏邑县| 壤塘县| 新宁县| 彰化县| 江孜县| 福州市| 宜兰县| 周至县| 博湖县| 湛江市| 略阳县| 海宁市| 罗源县| 西乌珠穆沁旗| 太谷县| 西畴县| 新乡县| 阳朔县| 伊金霍洛旗| 垣曲县| 西昌市| 宜宾市| 琼中| 洪湖市| 赣州市| 敖汉旗| 灵山县| 周至县| 杂多县| 成安县| 枣强县| 琼结县| 渑池县|