80C51內(nèi)部RAM有256個(gè)單元,通常在空間上分為兩個(gè)區(qū)。
低128個(gè)單元(00H~7FH)的內(nèi)部數(shù)據(jù)RAM區(qū)和高128個(gè)單元(80H~0FFH)的專用寄存器SFR區(qū)。
內(nèi)部RAM低128單元
80C51低128個(gè)單元是真正的內(nèi)部數(shù)據(jù)RAM區(qū),是一個(gè)多功能復(fù)用性數(shù)據(jù)存儲(chǔ)器,其按用途可分為3個(gè)區(qū)域,如下圖所示:
1)工作寄存器區(qū)(00H~1FH)
工作寄存器區(qū)也稱為通用寄存器,該區(qū)域共有4組寄存器,每組由8個(gè)寄存器組成,每個(gè)單元8位,各組均以R0~R7作為寄存器編號(hào),共32個(gè)單元,單元的地址為00H~1FH。
在任一時(shí)刻,CPU只能使用其中一組通用寄存器,稱為當(dāng)前通用寄存器組,具體可由程序狀態(tài)寄存器PSW中的RS1,RS0位的狀態(tài)組合來(lái)確定。
通用寄存器位CPU提供了就近存取數(shù)據(jù)的便利,提高了工作速度,也為編程提供了方便。
2)位尋址區(qū)(20H~2FH)
內(nèi)部RAM的20H~2FH共16個(gè)單元,計(jì)16*8=128位,位地址為00H~7FH。
位尋址區(qū)既可以作為一般的RAM區(qū)進(jìn)行字節(jié)操作,也可以對(duì)單元的每一位進(jìn)行位操作,因此稱為位尋址區(qū),是存儲(chǔ)空間的一部分。
3)用戶RAM區(qū)(30H~7FH)
所剩的80個(gè)單元即為用戶RAM區(qū),單元地址為30H~7FH,這些單元可以作為數(shù)據(jù)緩沖器使用,在一般應(yīng)用中把堆棧設(shè)置在該區(qū)域中,棧頂?shù)奈恢糜啥褩V羔楽P指示。
對(duì)內(nèi)部RAM低128單元的使用作幾點(diǎn)說(shuō)明:
1>80C51內(nèi)部RAM 00H~7FH單元可采用直接尋址或間接尋址方式實(shí)現(xiàn)數(shù)據(jù)傳送;
2>內(nèi)部RAM 20H~2FH單元的位地址空間可實(shí)現(xiàn)位操作,當(dāng)前工作寄存器組可通過(guò)軟件對(duì)PSW中的RS1,RS0位的狀態(tài)設(shè)置來(lái)選擇。
內(nèi)部RAM高128單元
內(nèi)部RAM高128單元是供給專用寄存器使用的,因此稱為專用寄存器區(qū)(也稱為特殊功能寄存器區(qū),SFR區(qū)),單元地址是80H~0FFH。
80C51共有22個(gè)專用寄存器,其中程序計(jì)數(shù)器在物理上獨(dú)立的,沒(méi)有地址,故不可尋址,它不屬于SFR區(qū)。
其余的21個(gè)專用寄存器都屬于SFR區(qū),是可尋址的,他們的單元地址離散地分布于80H~0FFH,如下表。
下面有關(guān)專用寄存器功能介紹。
1)程序計(jì)數(shù)器PC
PC是一個(gè)16位計(jì)數(shù)器,其內(nèi)容為單片機(jī)將要執(zhí)行的指令機(jī)器碼所在存儲(chǔ)單元的地址。PC具有自動(dòng)加1的功能,從而實(shí)現(xiàn)程序的順序執(zhí)行。
由于PC是不可尋址的,因此用戶無(wú)法對(duì)他進(jìn)行讀/寫(xiě)操作,但可以通過(guò)轉(zhuǎn)移,調(diào)用,返回等指令改變其內(nèi)容,以實(shí)現(xiàn)程序的轉(zhuǎn)移。PC的尋址范圍為64KB,即地址空間為0000~0FFFFH。
2)累加器ACC或A
累加器ACC是8位寄存器,是最常用的專用寄存器,功能強(qiáng),地位重要。它既可存放操作數(shù),又可以存放運(yùn)算的中間結(jié)果。
80C51系列單片機(jī)中許多指令的操作數(shù)來(lái)自累加器ACC。累加器非常繁忙,是單片機(jī)的執(zhí)行程序瓶頸,制約了單片機(jī)工作效率的提高,現(xiàn)在已經(jīng)有些單片機(jī)用寄存器陣列來(lái)代替累加器ACC。
3)寄存器B
寄存器B是8位寄存器,主要用于乘除運(yùn)算。乘法運(yùn)算時(shí),B中存放乘數(shù),乘法操作后,高8位結(jié)果存于B寄存器中。
除法運(yùn)算時(shí),B中存放除法,除法操作后,余數(shù)存于寄存器B中,寄存器B也可作為一般的寄存器用。
4)程序狀態(tài)字PSW
程序狀態(tài)字是8位寄存器,用于指示程序運(yùn)行狀態(tài)信息。其中有些位是根據(jù)程序執(zhí)行結(jié)果由硬件自動(dòng)設(shè)置的,而有些位可由用戶通過(guò)指令方法設(shè)定。
PSW中各標(biāo)志位名稱及定義如下:
CY:進(jìn)(借)位標(biāo)志位,也是位處理器的位累加器C。在加減運(yùn)算中,若操作結(jié)果的最高位有進(jìn)位或有借位時(shí),CY由硬件自動(dòng)置1,否則清0。
在位操作時(shí),CY作為累加器C使用,參與進(jìn)行位傳送,位與,位或等位操作。另外,某些控制轉(zhuǎn)移類指令也會(huì)影響CY位狀態(tài)。
AC:輔助進(jìn)(借)位標(biāo)志位。在加減運(yùn)算中,當(dāng)操作結(jié)果的低4位向高4位進(jìn)位或借位時(shí),此標(biāo)志位由硬件自動(dòng)置1,否則清0。
F0:用戶標(biāo)志位,由用戶通過(guò)軟件設(shè)定,用以控制程序轉(zhuǎn)向。
RS1,RS0:寄存器組選擇位。用于設(shè)定當(dāng)前通用寄存器組的組號(hào)。
通用寄存器組共有4組,其對(duì)應(yīng)關(guān)系如下表:
RS1,RS0的狀態(tài)由軟件設(shè)置,被選中寄存器組為當(dāng)前通用寄存器組。
OV:溢出標(biāo)志位,在帶符號(hào)數(shù)(補(bǔ)碼數(shù))的加減運(yùn)算中,OV=1表示加減運(yùn)算的結(jié)果超出了累加器A的8位符號(hào)數(shù)表示范圍(-128~+127),產(chǎn)生溢出,因此運(yùn)算結(jié)果是錯(cuò)誤的。OV=0,表示結(jié)果未超出255,結(jié)果只存在A中。
除法時(shí),OV=1,表示除數(shù)為0。OV=0,表示除數(shù)不為0。
P:奇偶標(biāo)志位,執(zhí)行結(jié)果中含1的奇偶狀態(tài),即是奇數(shù)個(gè)1,還是偶數(shù)個(gè)1。
5)數(shù)據(jù)指針DPTR
數(shù)據(jù)指針DPTR為16位寄存器,它是80C51中唯一的一個(gè)16位寄存器。編程時(shí),既可以按16位寄存器使用,也可以作為兩個(gè)8位寄存器分開(kāi)使用。
DPH為DPTR的高8位寄存器,DPL為DPTR的低8位寄存器。DPTR通常在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或I/O接口時(shí)作為地址指針使用,尋址范圍為64KB。
6)堆棧指針SP
在微型計(jì)算機(jī)的內(nèi)存中,都需要設(shè)置一個(gè)對(duì)數(shù)據(jù)實(shí)行后進(jìn)先出操作的區(qū)域,這個(gè)區(qū)域稱為堆棧。
堆棧通常是存儲(chǔ)器的一部分,為了保證棧區(qū)的數(shù)據(jù)能按后進(jìn)先出的規(guī)則來(lái)操作,專門(mén)設(shè)置一個(gè)地址寄存器來(lái)管理,這個(gè)地址寄存器稱為堆棧指針SP,用于指示棧頂單元地址。
51系列單片機(jī)中堆棧指針SP為8位寄存器。
在51系列單片機(jī)中,當(dāng)數(shù)據(jù)存入堆棧中,堆棧指針將自動(dòng)加1并將數(shù)據(jù)存入堆棧指針?biāo)傅拇鎯?chǔ)單元,當(dāng)需要從堆棧中取出數(shù)據(jù)時(shí),首先將堆棧指針?biāo)傅拇鎯?chǔ)單元中的數(shù)據(jù)讀出,然后自動(dòng)將堆棧指針減1。
所以堆棧指針始終指向堆棧中最后存入數(shù)據(jù)的那個(gè)單元,故稱該單元為堆棧頂棧。由于數(shù)據(jù)存入堆棧時(shí)堆棧指針自動(dòng)加1(地址增大),所以稱為向上生長(zhǎng)型堆棧。
操作規(guī)程時(shí):進(jìn)棧操作,先將SP加1,后寫(xiě)入數(shù)據(jù);出棧操作,先讀出數(shù)據(jù),后將SP減1。
51系列單片機(jī)中,堆棧規(guī)定設(shè)在單片機(jī)的內(nèi)部RAM中,同時(shí)在特殊功能寄存器中將81H設(shè)置為堆棧指針,即SP=81H,81H的內(nèi)容指示了棧頂?shù)刂贰?/p>
堆棧的主要功能是保護(hù)斷點(diǎn)和保護(hù)現(xiàn)場(chǎng)。51系列單片機(jī)系統(tǒng)復(fù)位時(shí),SP=07H。
由于89C51片內(nèi)RAM區(qū)有限,所以棧頂越小,堆棧深度就越深。為便于通用4組寄存器組都能使用,一般在系統(tǒng)初始化時(shí)使用MOV SP, #30H將棧頂設(shè)置在30H位置處。
堆棧的使用方式有兩種,一種是自動(dòng)方式,在調(diào)用子程序或中斷時(shí),返回地址自動(dòng)進(jìn)棧。程序返回時(shí),斷點(diǎn)再自動(dòng)彈回PC。這種方式無(wú)須用戶操作。
另一種指令模式,進(jìn)棧指令是PUSH,出棧指令是POP。
7)電源控制及波特率選擇控制寄存器PCON
PCON為8位寄存器,主要用于控制單片機(jī)工作于低功耗模式。80C51單片機(jī)的低功耗方式有待機(jī)方式和掉電保護(hù)方式兩種。
待機(jī)方式和掉電保護(hù)方式都由專用寄存器PCON的有關(guān)位來(lái)控制。PCON寄存器不可位尋址,只能字節(jié)尋址。
PD:掉電保護(hù)位,為1時(shí)進(jìn)入掉電保護(hù)方式;
IDL:待機(jī)方式位,為1時(shí)進(jìn)入待機(jī)方式。
8)并行I/O端口P0~P3
專用寄存器P0,P1,P2,P3分別是并行I/O口P0~P3的數(shù)據(jù)鎖存器。在80C51系列單片機(jī)中,沒(méi)有專門(mén)的I/O口操作指令,而采用同一的MOV指令操作,把I/O口當(dāng)做一般的專用寄存器使用。
9)串行數(shù)據(jù)緩沖器SBUF
串行數(shù)據(jù)緩沖器SBUF是串行口的一個(gè)專用寄存器,由一個(gè)發(fā)送緩沖器和一個(gè)接收緩沖器組成。兩個(gè)緩沖器在物理上獨(dú)立,但公用一個(gè)地址(99H)。SBUF用來(lái)存放要發(fā)送的或已接收的數(shù)據(jù)。
10)定時(shí)/計(jì)數(shù)器的專用寄存器
80C51系列單片機(jī)中有兩個(gè)16位的定時(shí)/計(jì)數(shù)器T0和T1,它們分別由兩個(gè)獨(dú)立的8位計(jì)數(shù)器組成,T0由專用寄存器TH0,TL0組成。T1由專用寄存器TH1,TL1組成。
11)控制類專用寄存器
IE,IP,TMOD,TCON,SCON寄存器是中斷系統(tǒng),定時(shí)/計(jì)數(shù)器,串行口的控制寄存器,包含控制位和狀態(tài)位。控制位是編程寫(xiě)入的控制操作位。
對(duì)專用寄存器的字節(jié)尋址作如下幾點(diǎn)說(shuō)明:
1>21個(gè)可字節(jié)尋址的專用寄存器離散分散在內(nèi)部RAM的高128單元,其余的空閑單元為保留區(qū),無(wú)定義,用戶不能使用。
2>程序計(jì)數(shù)器PC是唯一不能尋址的專用寄存器,PC不占用內(nèi)部RAM單元,它在物理上是獨(dú)立的。
3>對(duì)專用寄存器只能使用直接尋址方式,在指令中可寫(xiě)成寄存器符號(hào)或單元地址形式。
在21個(gè)可尋址的專用寄存器中,有11個(gè)寄存器它們的字節(jié)地址都能被8整除,可以進(jìn)行位尋址,即可對(duì)這些專用寄存器單元的每一位進(jìn)行位操作,每一位都有固定的位地址。
評(píng)論
查看更多