<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機程序存儲器和數據存儲器

51單片機程序存儲器和數據存儲器

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
為了保證程序能夠連續地執行下去,CPU必須具有某些手段來(lái)確定一條指令的地址。程序計數器PC正是起到了這種作用,所以通常又稱(chēng)其為指令地址計數器。在程序開(kāi)始執行前,必須將其起始地址。即程序的第一條指令所在的內存單元地址送入PC。當執行指令時(shí),CPU將自動(dòng)修改PC的內容,使之總是保存將要執行的下一個(gè)條指令的地址。由于大多數都是按順序執行的,所以修改的過(guò)程只是簡(jiǎn)單的加1操作。

下面我們看看8051的存儲器系統:(此章非常重要,請仔細理解)

本文引用地址:http://dyxdggzs.com/article/201611/322860.htm

8051序列單片機與一般微機的存儲器配置方式不相同。一般微機通常只有一個(gè)地址空間,ROM和RAM可以隨意安排在這一地址范圍內不同的空間,即ROM和RAM的地址同在一個(gè)隊列里分配不同的地址空間。CPU訪(fǎng)問(wèn)存儲器時(shí),一個(gè)地址對應唯一的存儲單元,可以是ROM也可以是RAM,并用同類(lèi)訪(fǎng)問(wèn)指令。此種存儲器結構稱(chēng)普林斯頓結構。

 

8051的存儲器在物理結構上分程序存儲器空間和數據存儲器空間。有四個(gè)存儲空間:片內程序存儲器和片外程序存儲空間以及片內數據存儲器和片外數據存儲器。這種程序存儲器和數據存儲器分開(kāi)的結構形式,稱(chēng)為哈佛結構。但從用戶(hù)使用的角度,8051存儲器地址空間分為三類(lèi):

1、片內,片外統一編址0000H—FFFFH的64K字節的程序存儲器地址空間,用16位地址;

2、64K字節片外數據存儲器地址空間,地址也從0000H—FFFFH,用16位地址;

3、256K字節數據存儲器地址空間,用8位地址。

上述三個(gè)存儲空間地址是重迭的,任何區別這三個(gè)不同的邏輯空間呢?8051的指令系統設計了不同的數據傳送指令符號:CPU訪(fǎng)問(wèn)片內片外ROM指令用MOVC,訪(fǎng)問(wèn)片外指令用MOVX,訪(fǎng)問(wèn)片內RAM指令用MOV。

程序存儲器地址空間

8051程序存儲器用于存放編好的程序和表格常數。程序存儲器通過(guò)16位程序計數器PC尋址,尋址能力為64K字節。8051,8751的64程序存儲器片內ROM為4K字節,地址為0000H—0FFFH,片外最多可擴至64K字節ROM,地址1000H—FFFFH,片內外是統一編址的。

當引腳EA接高電平時(shí),8051程序計數器PC在0000H—0FFFH范圍內,即前4K字節地址執行片內ROM中的程序;當指令地址超過(guò)0FFFH后,就自動(dòng)地轉向片外ROM指令。

當引腳EA接低電平時(shí),8051片內ROM不起作用,CPU只能從片外ROMZ中取指令,地址可以從000H開(kāi)始編址。這種接法特別適用于采用8031單片機的場(chǎng)合,由于8031片內不帶ROM,所以使用使必須使EA=0.以便能夠從外部擴展EPROM中取指令。

 

8051從片內程序存儲器和片外程序存儲器取 值時(shí)執行速度相同。程序存儲器的某些單元是留給系統使用的。

存儲單元0000H-0002H用作8051上電復位后引導程序存放單元。因為8051上電復位后程序計數器PC的內容為0000H,所以CPU總是從0000H開(kāi)始執行程序。如果在這三個(gè)單元中存有轉移指令,那么程序就被引導到轉移指令指定的ROM空間去執行。

0003H—0023H單元均勻地分為五段,用作五個(gè)中斷服務(wù)程序的入口,因為這五個(gè)入口之間的間隔較小,因此,一般說(shuō)來(lái)這五個(gè)入口處都是放的一條跳轉指令,而把真正的中斷服務(wù)程序視情況安排在后面的存儲器中。這五個(gè)入口分別是:

0003h:

外部中斷0的入口地址,當外部中斷引腳INT0,即P3.2有效時(shí),引起中斷申請,CPU響應中斷后自動(dòng)將地址0003H裝入程序計數器PC,程序就被轉換到0003H去執行外部中斷0的中斷服務(wù)程序。

000Bh:

定時(shí)器0溢出中斷的入口地址,當定時(shí)器T0產(chǎn)生溢出時(shí),引起中斷申請,CPU響應中斷后自動(dòng)將地址000BH裝入程序計數器PC, 程序就被轉移到000BH去執行定時(shí)器0的中斷服務(wù)程序。

0013h:

外部中斷1的入口地址,當外部中斷引腳INT1,即P3.3有效時(shí),引起中斷申請,CPU響應中斷后自動(dòng)將地址0013H裝入程序計數器PC, 程序就被轉移到0013H去執行外部中斷1的中斷服務(wù)程序。

001Bh:

定時(shí)器1溢出中斷的入口地址,當定時(shí)器T1產(chǎn)生溢出時(shí),引起中斷申請,CPU響應中斷后自動(dòng)將地址001BH裝入程序計數器PC, 程序就被轉3移到0003H去執行定時(shí)器1的中斷服務(wù)程序。

0023h:

串行接口中斷的入口地址,當串行接口接收或發(fā)送完一個(gè)數據后,引起中斷申請,CPU響應中斷后自動(dòng)將地址0023H裝入程序計數器PC,程序就被轉移到0023H去串行接口中斷服務(wù)程序。

 

二.數據存儲器地址空間。

數據存儲器RAM用于存放運算中的中間結果,數據暫存,緩沖,標志位等。數據存儲器空間也分為片內和片外兩部分,即片內RAM和片外RAM。

8051片外數據存儲器空間為64K,從0000H—FFFFH;片內存儲器空間為256字節,地址從0000H—00FFH。

(一)片外RAM

片外數據存儲器與片內數據存儲器空間低地址0000H—00FFH是重迭的,如何區分片內,片外RAM空間呢?8051有MOV和MOVX兩種指令,用于區分片內片外RAM空間。片內RAM使用MOV指令,片外64KRAM空間專(zhuān)門(mén)為MOVX指令使用。

 

(二)片內RAM數據存儲器最大可尋址256個(gè)單元,它們又分為兩個(gè)部分:

低128字節,00H—7KH,是真正的RAM區。高128字節,80H—FFH,為特殊功能寄存器區。

低128字節RAM ,00H—1FH地址安排為四組寄存器區,每組有八個(gè)工作寄存器,即R0-R7,,共占32個(gè)單元。通過(guò)對程序狀態(tài)字PSW中RS1,RS0兩位的設置,每組寄存器可選作CPU的當前工作寄存器組。若程序中并不需要四組,那么其余可用作一般RAN單元。CPU復位后,選中第0組工作寄存器。

工作寄存器區后的16字節單元,即20H—2FH,可以位尋址方式訪(fǎng)問(wèn)其各位,這128個(gè)位的地址為00H—7FH。低128字節RAM單元地址范圍也是00H—7FH,8051采用不同尋址方式加以區分,即訪(fǎng)問(wèn)128個(gè)位地址用位尋址方式。訪(fǎng)問(wèn)低128字節單元用直接尋址或間接尋址,這樣就可以區分開(kāi)00H—7FH是位地址還是字節地址,尋址方式以后再講。通過(guò)執行指令可直接對某一位操作,如置1,請0或判1,判0等,可用作軟件標志位或用于位處理。

高128字節RAM,特殊功能寄存器,8051片內高128字節RAM中,除程序計數器PC外,有21專(zhuān)用寄存器,也稱(chēng)特殊功能寄存器,它們離散地分布在80H—FFH的RAM空間中。在21個(gè)特殊功能寄存器中,有11個(gè)特殊功能寄存器具有位尋址能力,它們的字節地址正好能被8整除,下面介紹部分特殊功能寄存器,其余將在后面講述:

(1)累加器ACC

累加器ACC是8051最常見(jiàn),最繁忙的八位特殊功能寄存器,許多指令的操作數取自于A(yíng)CC,許多運算結果也存放于A(yíng)CC中。在指令系統中采用A作為累加器ACC的助記符。

(2)寄存器B

在乘,除指令中,用到了8位B寄存器。乘法指令的兩個(gè)操作數分別來(lái)自A和B,乘積存放于B,A兩個(gè)8位寄存器中。除法指令中,A中存放被除數,B中放除數,商存放于A(yíng)中,B中存放余數。在其他指令中,B可作為一般通用寄存器或一個(gè)RAM單元使用。

 

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

PSW是一個(gè)8位特殊功能寄存器,它的各位包含了程序執行后的狀態(tài)信息,供程序查詢(xún)或判別之用。各位的含義及其格式如下:

PSW除有確定的字節地址DOH外,每一位均有位地址。

PY,PSW.7,進(jìn)位標志位。在執行加法或減法運算指令時(shí),如果運算結果最高位即位7,向前有進(jìn)位或借位,CY位由硬件置1,如運算結果最高位無(wú)進(jìn)位或借位,則CY清0。CY也是8051在進(jìn)行位操作時(shí)的累加器。

AC,PSW.6半標記位,也稱(chēng)輔助進(jìn)位標志。當執行加法或減法操作時(shí),其運算結果產(chǎn)生由低半字節,即位3向高半字節有半進(jìn)位或借位時(shí)AC位將被硬件自動(dòng)置1,否則AC被自動(dòng)清0。

PSW.5,用戶(hù)標志位。用戶(hù)可以根據自己的需要對FO位賦予一定含義,由用戶(hù)置位,復位,系統沒(méi)有規定它的意義。

RSO,和RS1,PSW.4,和PSW.5,工作寄存器組選擇控制位。這兩位的值決定選擇哪一組工作寄存器為當前工作寄存器組。由用戶(hù)用軟件改變RS1和RS0值的組合,以切換當前選用的工作寄存器組。

當RS1=0,RS0=0時(shí),工作寄存器組定位在00到07單元,即此時(shí)R0就是00,R1就是01,R2就是02,R3就是03,R4就是04,R5就是05,R6就是06,R7就是07。

當RS1=0,RS0=1時(shí),工作寄存器組定位在08到0F單元;

當RS1=1,RS0=0時(shí),工作寄存器組定位在10到17單元;

當RS1=1,RS0=1時(shí),工作寄存器組定位在18到1F單元;

8051上電復位后, RS1=0,RS0=0,工作寄存器組定位在00到07單元;

根據需要,可利用傳送指令對PSW整字節操作或用位操作指令改變RS1和RS0的狀態(tài),以切換當前工作寄存器組。這樣的設置對程序中保護現場(chǎng)提供了方便。

OV,PSW.2,溢出標志位。當進(jìn)行補碼運算時(shí),如有溢出,即當運算結果超出-128到+127的范圍時(shí),OV位由硬件自動(dòng)置1;無(wú)溢出時(shí),OV=0,

PSW.1,為保留位,8051未用,8052為F1用戶(hù)標志位。P, PSW.0,奇偶檢驗標志位。每條指令執行后,該位始終跟蹤指示累加器A中1的個(gè)數。如結果A中有奇數個(gè)1,則置P=1,否則P=0.常用于校驗串行通訊中的數據傳送是否出錯。

 

(4)堆棧指針SP

堆棧指針SP為8位特殊功能寄存器,SP的內容即堆棧指針可指向8051片內00H—7FH RAM的任何單元。系統復位后,SP初始化為07H,即指向07H的RAM單元。下面介紹一下堆棧的概念。

8051同一般微機處理器一樣,設有堆棧。在片內RAM中專(zhuān)門(mén)開(kāi)辟出一個(gè)區域,數據的存取是以“后進(jìn)先出”的結構方式處理的。這種數據結構方式對于中斷,調用子程序都非常方便。堆棧的操作有兩種:

一種叫數據壓入,即PUSH;另一種叫數據彈出,即POP。棧頂由堆棧指針SP自動(dòng)管理。每次進(jìn)行壓入或彈出操作以后,堆棧指針便自動(dòng)調整以保持指示堆棧頂部的位置。在使用堆棧之前,先給SP賦值,以規定堆棧的起始位置,稱(chēng)為棧 底。

當數據壓入堆棧后SP自動(dòng)加1以指出當前棧頂位置。8051的堆棧指針SP是一個(gè)雙向計數器。在壓棧時(shí)SP內容自動(dòng)增值,出棧時(shí)自動(dòng)減值,存取信號必須按照“后進(jìn)先出”的原則。

 

(5)數據指針DPTR

DPTR是一個(gè)16位的特殊功能寄存器,其高位字節寄存器用DPH表示,地址83H,低位字節寄存器用DPL表示,地址82H。DPTR既可以作為一個(gè)16位寄存器來(lái)處理,也可以作為一個(gè)16寄存器來(lái)處理,也可以作為兩個(gè)獨立的8位寄存器DPH和DPL使用。

 

(6)IO端口PO,P1,P2,P3.

PO,P1,P2,P3.為四個(gè)8位特殊功能寄存器,分別是四個(gè)并行IO端口的鎖存器。它們都是有字節地址,每一個(gè)鎖存器還有位地址,所以每一個(gè)IO線(xiàn)獨立地作輸入或輸出時(shí),數據可以鎖存,作輸出時(shí)數據可以緩沖。8051的中斷源包括:定時(shí)計數器0,定時(shí)計數器1,外中斷0,外中斷1,串口中斷,除上述資源外8051還有40條引腳(關(guān)于這40條引腳,請查看相關(guān)資料)。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>