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

2.3 8051單片機(jī)的存儲(chǔ)器

2.3.1 存儲(chǔ)器的存儲(chǔ)單位與編址

1. 常用存儲(chǔ)單位

位(bit):它是計(jì)算機(jī)中最小的數(shù)據(jù)單位。由于計(jì)算機(jī)采用二進(jìn)制數(shù),所以1位二進(jìn)制數(shù)稱作1bit,如101011為6bit。

字節(jié)(Byte,單位簡(jiǎn)寫(xiě)為B):8位二進(jìn)制數(shù)稱為一個(gè)字節(jié),1B=8bit。

字(Word):兩個(gè)字節(jié)構(gòu)成一個(gè)字,即1Word=2Byte。

在單片機(jī)中還有一個(gè)常用術(shù)語(yǔ):字長(zhǎng)。所謂字長(zhǎng)是指單片機(jī)一次能處理的二進(jìn)制數(shù)的位數(shù)。51單片機(jī)一次能處理8位二進(jìn)制數(shù),所以51單片機(jī)的字長(zhǎng)為8位。

2. 存儲(chǔ)器的編址與數(shù)據(jù)的讀寫(xiě)說(shuō)明

圖2-8是一個(gè)容量為256B的存儲(chǔ)器,內(nèi)部有256個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元可以存放8位二進(jìn)制數(shù),為了存取數(shù)據(jù)方便,需要對(duì)每個(gè)存儲(chǔ)單元進(jìn)行編號(hào),也即對(duì)存儲(chǔ)單元編址,編址采用二進(jìn)制數(shù),對(duì)256個(gè)存儲(chǔ)單元全部編址至少要用到8位二進(jìn)制數(shù),第1個(gè)存儲(chǔ)單元編址為00000000,編寫(xiě)程序時(shí)為了方便,一般用十六進(jìn)制數(shù)表示,二進(jìn)制數(shù)00000000用十六進(jìn)制表示就是00H,H表示十六制數(shù),第二個(gè)存儲(chǔ)單元編址為01H,第256個(gè)存儲(chǔ)單元編址為FFH(也可以寫(xiě)成0FFH)。

要對(duì)256B存儲(chǔ)器的每個(gè)存儲(chǔ)單元進(jìn)行讀寫(xiě),需要8根地址線和8根數(shù)據(jù)線,先送8位地址選中某個(gè)存儲(chǔ)單元,再根據(jù)讀控制或?qū)懣刂疲瑢⑦x中的存儲(chǔ)單元的8位數(shù)據(jù)從8根數(shù)據(jù)線送出,或通過(guò)8根數(shù)據(jù)線將8位數(shù)據(jù)存入選中的存儲(chǔ)單元中。以圖2-8為例,當(dāng)?shù)刂房偩€A7~A0將8位地址0001111(1FH)送入存儲(chǔ)器時(shí),會(huì)選中內(nèi)部編址為1FH的存儲(chǔ)單元,這時(shí)再?gòu)淖x控制線送入一個(gè)讀控制信號(hào),1FH存儲(chǔ)單元中的數(shù)據(jù)00010111從8根數(shù)據(jù)總線D7~D0送出。

圖2-8 256B存儲(chǔ)器的編址

2.3.2 片內(nèi)外程序存儲(chǔ)器的使用與編址

單片機(jī)的程序存儲(chǔ)器主要用來(lái)存儲(chǔ)程序、常數(shù)和表格數(shù)據(jù)。8051單片機(jī)內(nèi)部有4KB的程序存儲(chǔ)器(8052單片機(jī)內(nèi)部有8KB的程序存儲(chǔ)器,8031單片機(jī)內(nèi)部沒(méi)有程序存儲(chǔ)器,需要外接程序存儲(chǔ)器),如果內(nèi)部程序存儲(chǔ)器不夠用(或無(wú)內(nèi)部程序存儲(chǔ)器),可以外接程序存儲(chǔ)器。

8051單片機(jī)最大可以外接容量為64KB的程序存儲(chǔ)器(ROM),它與片內(nèi)4KB程序存儲(chǔ)器統(tǒng)一編址,當(dāng)單片機(jī)的EA端接高電平(接電源正極)時(shí),片內(nèi)、片外程序存儲(chǔ)器都可以使用,片內(nèi)4KB程序存儲(chǔ)器的編址為0000H~0FFFH,片外64KB程序存儲(chǔ)器的編址為1000H~FFFFH,片外程序存儲(chǔ)器低4KB存儲(chǔ)空間無(wú)法使用,如圖2-9(a)所示,當(dāng)單片機(jī)的EA端接低電平(接地)時(shí),只能使用片外程序存儲(chǔ)器,其編址為0000H~FFFFH;片內(nèi)4KB程序存儲(chǔ)器無(wú)法使用,如圖2-9(b)所示。

圖2-9 8051單片機(jī)片內(nèi)、外程序存儲(chǔ)器的使用與編址

2.3.3 片內(nèi)外數(shù)據(jù)存儲(chǔ)器的使用與編址

單片機(jī)的數(shù)據(jù)存儲(chǔ)器主要用來(lái)存儲(chǔ)運(yùn)算的中間結(jié)果和暫存數(shù)據(jù)、控制位和標(biāo)志位。8051單片機(jī)內(nèi)部有256B的數(shù)據(jù)存儲(chǔ)器,如果內(nèi)部數(shù)據(jù)存儲(chǔ)器不夠用,可以外接數(shù)據(jù)存儲(chǔ)器。

8051單片機(jī)最大可以外接容量為64KB的數(shù)據(jù)存儲(chǔ)器(RAM),它與片內(nèi)256B數(shù)據(jù)存儲(chǔ)器分開(kāi)編址,如圖2-10所示。當(dāng)8051單片機(jī)連接片外RAM時(shí),片內(nèi)RAM的00H~FFH存儲(chǔ)單元地址與片外RAM的0000H~00FFH存儲(chǔ)單元地址相同,為了區(qū)分兩者,在用匯編語(yǔ)言編程時(shí),讀寫(xiě)片外RAM時(shí)要用“MOVX”指令(讀寫(xiě)片內(nèi)RAM時(shí)要用“MOV”指令),在用C語(yǔ)言編程時(shí),讀寫(xiě)RAM時(shí)須先聲明數(shù)據(jù)類型(內(nèi)部數(shù)據(jù)或外部數(shù)據(jù)),若讀寫(xiě)的數(shù)據(jù)存放在片內(nèi)RAM中,要聲明數(shù)據(jù)類型為內(nèi)部數(shù)據(jù)類型(如用“data”聲明),若讀寫(xiě)的數(shù)據(jù)存放在片外RAM中,應(yīng)聲明數(shù)據(jù)類型為外部數(shù)據(jù)類型(如用“xdata”聲明),單片機(jī)會(huì)根據(jù)聲明的數(shù)據(jù)類型自動(dòng)選擇讀寫(xiě)片內(nèi)或片外RAM。

圖2-10 8051單片機(jī)片內(nèi)、外數(shù)據(jù)存儲(chǔ)器的使用與編址

2.3.4 數(shù)據(jù)存儲(chǔ)器的分區(qū)

8051單片機(jī)內(nèi)部有128B的數(shù)據(jù)存儲(chǔ)器(地址為00H~7FH)和128B的特殊功能寄存器區(qū)(地址為80H~FFH),8052單片機(jī)內(nèi)部有258B的數(shù)據(jù)存儲(chǔ)器(地址為00H~FFH)和128B的特殊功能寄存器區(qū)(地址為80H~FFH),如圖2-11所示。

圖2-11 8051、8052單片機(jī)的數(shù)據(jù)存儲(chǔ)器分區(qū)

根據(jù)功能不同,8051、8052單片機(jī)的數(shù)據(jù)存儲(chǔ)器可分為工作寄存器區(qū)(0~3組)、位尋址區(qū)和用戶RAM區(qū),從圖2-11可以看出,8052單片機(jī)的用戶RAM區(qū)空間較8051單片機(jī)多出128B,該128B存儲(chǔ)區(qū)地址與特殊功能寄存器區(qū)(SFR)的地址相同,但兩者是兩個(gè)不同的區(qū)域。特殊功能寄存器區(qū)的每個(gè)寄存器都有一個(gè)符號(hào)名稱,如P0(即P0鎖存器)、SCON(串行通信控制寄存器),特殊功能寄存器區(qū)只能用直接尋址方式訪問(wèn),8052單片機(jī)的新增的128B用戶RAM區(qū)只能用間接方式訪問(wèn)。

1. 工作寄存器區(qū)

單片機(jī)在工作時(shí)需要處理很多數(shù)據(jù),有些數(shù)據(jù)要用來(lái)運(yùn)算,有些要反復(fù)調(diào)用,有些要用來(lái)比較校驗(yàn)等,在處理這些數(shù)據(jù)時(shí)需要有地方能暫時(shí)存放這些數(shù)據(jù),單片機(jī)提供暫存數(shù)據(jù)的地方就是工作寄存器。

8051單片機(jī)的工作寄存器區(qū)總存儲(chǔ)空間為32B,由0~3組工作寄存器組成,每組有8個(gè)工作寄存器(R0~R7),共32個(gè)工作寄存器(存儲(chǔ)單元),地址編號(hào)為00H~1FH,每個(gè)工作寄存器可存儲(chǔ)一個(gè)字節(jié)數(shù)據(jù)(8位)。4組工作寄存器的各個(gè)寄存器地址編號(hào)如下。

單片機(jī)上電復(fù)位后,默認(rèn)使用第0組工作寄存器,可以通過(guò)編程設(shè)置PSW(程序狀態(tài)字寄存器)的RS1、RS0位的值來(lái)?yè)Q成其他組工作寄存器。當(dāng)PSW的RS1位=0、RS0位=0時(shí),使用第0組工作寄存器;RS1位=0、RS0位=1時(shí),使用第1組工作寄存器;RS1位=1、RS0位=0時(shí),使用第2組工作寄存器;RS1位=1、RS0位=1時(shí),使用第3組工作寄存器,如圖2-12所示。不使用的工作寄存器可當(dāng)作一般的數(shù)據(jù)存儲(chǔ)器使用。

圖2-12 PSW 的RS1、RS0位決定使用的工作寄存器組號(hào)

2. 位尋址區(qū)

位尋址區(qū)位于工作寄存器區(qū)之后,總存儲(chǔ)空間為16B,有16個(gè)字節(jié)存儲(chǔ)單元,字節(jié)地址為20H~2FH,每個(gè)字節(jié)存儲(chǔ)單元有8個(gè)存儲(chǔ)位,一共有16×8=128個(gè)存儲(chǔ)位,每個(gè)位都有地址,稱為位地址,利用位地址可以直接對(duì)位進(jìn)行讀寫(xiě)。

位尋址區(qū)的16個(gè)字節(jié)存儲(chǔ)單元與128個(gè)存儲(chǔ)位的地址編號(hào)如圖2-13所示,從圖中可以看出,字節(jié)存儲(chǔ)單元和存儲(chǔ)位有部分相同的地址編號(hào),單片機(jī)是以指令類型來(lái)區(qū)分訪問(wèn)地址為字節(jié)存儲(chǔ)單元還是位單元,比如用字節(jié)指令訪問(wèn)地址20H時(shí),訪問(wèn)的為20H字節(jié)單元,可以同時(shí)操作該字節(jié)單元的8位數(shù),用位指令訪問(wèn)地址20H時(shí),訪問(wèn)的為24H字節(jié)單元的D0位,只能操作該位的數(shù)據(jù)。

3. 用戶RAM區(qū)

用戶RAM區(qū)又稱為數(shù)據(jù)緩存區(qū),8051單片機(jī)的用戶RAM區(qū)有80個(gè)存儲(chǔ)單元(字節(jié)),地址編號(hào)為30H~7FH,8052單片機(jī)的用戶RAM區(qū)有208個(gè)存儲(chǔ)單元(字節(jié)),地址編號(hào)為30H~FFH。用戶RAM區(qū)一般用來(lái)存儲(chǔ)隨機(jī)數(shù)據(jù)和運(yùn)算中間結(jié)果等。

圖2-13 位尋址區(qū)的16個(gè)字節(jié)存儲(chǔ)單元與128個(gè)位的地址編號(hào)

圖2-13 位尋址區(qū)的16個(gè)字節(jié)存儲(chǔ)單元與128個(gè)位的地址編號(hào)(續(xù))

2.3.5 特殊功能寄存器(SFR)

特殊功能寄存器簡(jiǎn)稱SFR(Special Function Register),主要用于管理單片機(jī)內(nèi)部各功能部件(如定時(shí)器/計(jì)數(shù)器、I/O端口、中斷控制器、串行通信口等),通過(guò)編程設(shè)定一些特殊功能寄存器的值,可以讓相對(duì)應(yīng)的功能部件進(jìn)入設(shè)定的工作狀態(tài)。

1. 特殊功能寄存器的符號(hào)、字節(jié)地址、位地址和復(fù)位值

8051單片機(jī)有21個(gè)特殊功能寄存器(SFR),見(jiàn)表2-2,每個(gè)特殊功能寄存器都是一個(gè)字節(jié)單元(有8位),它們的地址離散分布在80H~FFH范圍內(nèi),這個(gè)地址范圍與數(shù)據(jù)存儲(chǔ)器用戶RAM區(qū)(對(duì)于8052單片機(jī)而言)的80H~FFH地址重疊,為了避免尋址產(chǎn)生混亂,51單片機(jī)規(guī)定特殊寄存器只能用直接尋址(直接寫(xiě)出SFR的地址或符號(hào))方式訪問(wèn),8052單片機(jī)新增的128B用戶RAM區(qū)的80H~FFH單元只能用間接尋址方式訪問(wèn)。

21個(gè)特殊功能寄存器都能以字節(jié)為單位進(jìn)行訪問(wèn),其中有一些特殊功能寄存器還可以進(jìn)行位訪問(wèn),能訪問(wèn)的位都有符號(hào)和位地址,位地址為特殊功能寄存器的字節(jié)地址加位號(hào)。以特殊功能寄存器P0為例,其字節(jié)地址為80H(字節(jié)地址值可以被8整除),其P0.0~P0.7位的位地址為80H~87H,訪問(wèn)字節(jié)地址80H時(shí)可讀寫(xiě)8位(P0.0~P0.7位),訪問(wèn)位地址82H時(shí)僅可讀寫(xiě)P0.2位。

有位地址的特殊寄存器的既可以用字節(jié)地址訪問(wèn)整個(gè)寄存器(8位),也可以用位地址(或位符號(hào))訪問(wèn)寄存器的某個(gè)位,無(wú)位地址的特殊寄存器只能用字節(jié)地址訪問(wèn)整個(gè)寄存器。當(dāng)位地址和字節(jié)地址相同時(shí),單片機(jī)會(huì)根據(jù)指令類型來(lái)確定該地址的類型。單片機(jī)上電復(fù)位后,各特殊功能寄存器都有個(gè)復(fù)位初始值,具體見(jiàn)表2-2,x表示數(shù)值不定(或1或0)。

表2-2 8051單片機(jī)的21個(gè)特殊功能寄存器(SFR)

2. 部分特殊功能寄存器介紹

單片機(jī)的特殊功能寄存器很多,可以分為特定功能型和通用型。對(duì)于特定功能型特殊功能寄存器,當(dāng)往某些位寫(xiě)入不同的值時(shí),可以將其控制的功能部件設(shè)為不同工作方式,讀取某些位的值,可以了解相應(yīng)功能部件的工作狀態(tài);通用型特殊功能寄存器主要用于運(yùn)算、尋址和反映運(yùn)算結(jié)果狀態(tài)。

特定功能型特殊功能寄存器將在后面介紹功能部件的章節(jié)說(shuō)明,下面介紹一些通用型特殊功能寄存器。

(1)累加器(ACC)

累加器又稱ACC,簡(jiǎn)稱A,是一個(gè)8位寄存器,其字節(jié)地址為E0H。累加器是單片機(jī)中使用最頻繁的寄存器,在進(jìn)行算術(shù)或邏輯運(yùn)算時(shí),數(shù)據(jù)大多數(shù)先進(jìn)入ACC,運(yùn)算完成后,結(jié)果也大多數(shù)也送入ACC。

(2)寄存器B

寄存器B主要用于乘、除運(yùn)算,其字節(jié)地址是F0H。在乘法運(yùn)算時(shí),一個(gè)數(shù)存放在A(累加器)中,另一個(gè)數(shù)存放在B中,運(yùn)算結(jié)果得到的積(16位),積的高字節(jié)存放在B中,低字節(jié)存放在A中;在除法運(yùn)算時(shí),被除數(shù)存取自A,除數(shù)取自B,運(yùn)算結(jié)果得到的商(8位)和余數(shù)(8位),商存放在A中,余數(shù)存放在B中。

(3)數(shù)據(jù)指針寄存器(DPTR)

數(shù)據(jù)指針寄存器(DPTR)簡(jiǎn)稱數(shù)據(jù)指針,是一個(gè)16位寄存器,由DPH和DPL兩個(gè)8位寄存器組成,地址分別為83H、82H。DPTR主要在單片機(jī)訪問(wèn)片外RAM時(shí)使用,用于存放片外RAM的16位地址,DPH保存高8位地址,DPL保存低8位地址。

(4)堆棧指針寄存器(SP)

人們?cè)谙赐氲鷷r(shí),通常是將洗完的碗碟一只一只由下往上堆起來(lái),使用時(shí)則是將碗碟從上往下一只一只取走。這個(gè)過(guò)程有兩個(gè)要點(diǎn):一是這些碗碟的堆放是連續(xù)的;二是先堆放的后取走,后堆放的先取走。單片機(jī)的堆棧與上述情況類似。堆棧是指在單片機(jī)數(shù)據(jù)存儲(chǔ)器中劃分出的一個(gè)連續(xù)的存儲(chǔ)空間,這個(gè)存儲(chǔ)空間存取數(shù)據(jù)時(shí)具有“先進(jìn)后出,后進(jìn)先出”的特點(diǎn)。

在存儲(chǔ)器存取數(shù)據(jù)時(shí),首先根據(jù)地址選中某個(gè)單元,再將數(shù)據(jù)存入或取出。如果有一批數(shù)據(jù)要連續(xù)存入存儲(chǔ)器,例如,將5個(gè)數(shù)據(jù)(每個(gè)數(shù)據(jù)為8位)依次存入地址為30H~34H的5個(gè)存儲(chǔ)單元中,按一般的操作方法是:先選中地址為30H的存儲(chǔ)單元,再將第1個(gè)數(shù)據(jù)存入該單元,然后選中地址為31H的存儲(chǔ)單元,再將第2個(gè)數(shù)據(jù)存入該單元,……顯然這樣存取數(shù)據(jù)比較麻煩,采用堆棧可以很好地解決這個(gè)問(wèn)題。

在數(shù)據(jù)存儲(chǔ)器中劃分堆棧的方法是:通過(guò)編程的方法設(shè)置堆棧指針寄存器(SP)的值,如讓SP=2FH,SP就將存儲(chǔ)器地址為2FH的存儲(chǔ)單元設(shè)為堆棧的棧頂?shù)刂罚?FH單元后面的連續(xù)存儲(chǔ)單元就構(gòu)成了堆棧,如圖2-14所示。堆棧設(shè)置好后,就可以將數(shù)據(jù)按順序依次存入堆棧或從堆棧中取出,在堆棧中存取數(shù)據(jù)按照“先進(jìn)后出,后進(jìn)先出”的規(guī)則進(jìn)行。

圖2-14 堆棧的使用

需要注意的是,堆棧指針寄存器(SP)中的值并不是堆棧的第一個(gè)存儲(chǔ)單元的地址,而是前一個(gè)單元的地址。例如,SP=2FH,那么堆棧的第一個(gè)存儲(chǔ)單元的地址是30H,第1個(gè)數(shù)據(jù)存入30H單元。單片機(jī)通電復(fù)位后,SP的初始值為07H,這樣堆棧第一個(gè)存儲(chǔ)單元的地址就為08H,由于08H~1FH地址已劃分給1~3組工作寄存器,在需要用到堆棧時(shí),通常在編程時(shí)設(shè)SP=2FH,這樣就將堆棧設(shè)置在數(shù)據(jù)存儲(chǔ)器的用戶RAM區(qū)(30H~7FH)。

(5)程序狀態(tài)字寄存器(PSW)

程序狀態(tài)字寄存器(PSW)的地址是D0H,它是一個(gè)狀態(tài)指示寄存器(又稱標(biāo)志寄存器),用來(lái)指示系統(tǒng)的工作狀態(tài)。PSW是一個(gè)8位寄存器,可以存儲(chǔ)8位數(shù),各位代表不同的功能。程序狀態(tài)字寄存器(PSW)的字節(jié)地址、各位地址和各位功能如圖2-15所示。

圖2-15 程序狀態(tài)字寄存器(PSW)的字節(jié)地址、各位地址和各位功能

D7位(C):進(jìn)位標(biāo)志位。當(dāng)單片機(jī)進(jìn)行加、減運(yùn)算時(shí),若運(yùn)算結(jié)果最高位有進(jìn)位或借位時(shí),C位置1,無(wú)進(jìn)位或借位時(shí),C位置0。在進(jìn)行位操作時(shí),C用作位操作累加器。

D6位(AC):半進(jìn)位標(biāo)志位。單片機(jī)進(jìn)行加、減運(yùn)算時(shí),當(dāng)?shù)桶胱止?jié)的D3位向高半字節(jié)的D4位有進(jìn)位或借位時(shí),AC位置1,否則AC位置0。

D5位(F0):用戶標(biāo)志位0。用戶可設(shè)定的標(biāo)志位,可置1或置0。

D4位(RS1)、D3位(RS0):工作寄存器組選擇位。這兩位有4種組合狀態(tài),用來(lái)控制工作寄存器區(qū)(00H~1FH)4組中的某一組寄存器進(jìn)入工作狀態(tài),具體見(jiàn)圖2-12。

D2位(OV):溢出標(biāo)志位。在進(jìn)行有符號(hào)數(shù)運(yùn)算時(shí),若運(yùn)算結(jié)果超出?128~+127范圍,OV=1,否則OV=0;當(dāng)進(jìn)行無(wú)符號(hào)數(shù)乘法運(yùn)算時(shí),若運(yùn)算結(jié)果超出255,OV=1,否則OV=0;當(dāng)進(jìn)行無(wú)符號(hào)數(shù)除法運(yùn)算時(shí),若除數(shù)為0,OV=1,否則OV=0。

D1位(F1):用戶標(biāo)志位1。同F(xiàn)0位,用戶可設(shè)定的標(biāo)志位,可置1或置0。

D0位(P):奇偶校驗(yàn)位。該位用于對(duì)累加器A中的數(shù)據(jù)進(jìn)行奇偶校驗(yàn),當(dāng)累加器A中“1”的個(gè)數(shù)為奇數(shù)值時(shí),P=1;若累加器A中的“1”的個(gè)數(shù)為偶數(shù)值時(shí),P=0。51系列單片機(jī)總是保持累加器A與P中“1”的總個(gè)數(shù)為偶數(shù)值,比如累加器A中有3個(gè)“1”,即“1”的個(gè)數(shù)為奇數(shù)值,那么P應(yīng)為“1”,這樣才能讓兩者“1”的總個(gè)數(shù)為偶數(shù)值,這種校驗(yàn)方式稱作偶校驗(yàn)。

主站蜘蛛池模板: 芦山县| 锦州市| 汉寿县| 奉新县| 枣强县| 东明县| 福海县| 池州市| 比如县| 策勒县| 龙井市| 田林县| 壤塘县| 曲麻莱县| 蒙阴县| 华蓥市| 定西市| 聂拉木县| 三都| 佛教| 高台县| 平遥县| 高邑县| 五家渠市| 祁东县| 五莲县| 高青县| 荔波县| 博乐市| 怀集县| 汶上县| 吉木乃县| 镇巴县| 安仁县| 龙游县| 平凉市| 扬州市| 轮台县| 双峰县| 申扎县| 永靖县|