51單片機(jī)數(shù)據(jù)類型_第1頁
51單片機(jī)數(shù)據(jù)類型_第2頁
51單片機(jī)數(shù)據(jù)類型_第3頁
51單片機(jī)數(shù)據(jù)類型_第4頁
51單片機(jī)數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

從數(shù)據(jù)存儲(chǔ)類型來說,8051系列有片內(nèi)、片外程序存儲(chǔ)器,片內(nèi)、片外數(shù)據(jù)存儲(chǔ)器,片內(nèi)程序存儲(chǔ)器還分直接尋址區(qū)和間接尋址類型,分別對(duì)應(yīng)code、data、xdata、idata以及根據(jù)51系列特點(diǎn)而設(shè)定的pdata類型,使用不同的存儲(chǔ)器,將使程序執(zhí)行效率不同,在編寫C51程序時(shí),最好指定變量的存儲(chǔ)類型,這樣將有利于提高程序執(zhí)行效率。在51系列中data,idata,xdata,pdata的區(qū)別:1、data:固定指前面0x00-0x7f的128個(gè)RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。2、idata:固定指前面OxOO-Oxff的256個(gè)RAM,其中前128和data的128完全相同,只是因?yàn)樵L問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:moxACC,@Rx.(不重要的補(bǔ)充:c中idata做指針式的訪問效果很好)3、xdata:外部擴(kuò)展RAM,一般指外部OxOOOO-Oxffff空間,用DPTR訪問。4、pdata:外部擴(kuò)展RAM的低256個(gè)字節(jié),地址出現(xiàn)在A0-A7的上時(shí)讀寫,用movxACC,@Rx讀寫。這個(gè)比較特殊,而且C51好象有對(duì)此BUG,建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級(jí)問題,這里不提。當(dāng)然現(xiàn)在有些51單片本身內(nèi)部就有擴(kuò)展的RAM區(qū)域,故在允許使用內(nèi)部擴(kuò)展RAM的時(shí)候使用xdata和pdata并不影響P2和P0口。單片機(jī)C語言u(píng)nsignedcharcodetable[]code是什么作用?code的作用是告訴單片機(jī),我定義的數(shù)據(jù)要放在ROM(程序存儲(chǔ)區(qū))里面,寫入后就不能再更改,其實(shí)是相當(dāng)與匯編里面的尋址MOVX(好像是),因?yàn)镃語言中沒辦法詳細(xì)描述存入的是ROM還是RAM(寄存器),所以在軟件中添加了這一個(gè)語句起到代替匯編指令的作用,對(duì)應(yīng)的還有data杲存入RAM的意思。程序可以簡單的分為code(程序)區(qū),和data(數(shù)據(jù))區(qū),code區(qū)在運(yùn)行的時(shí)候是不可以更改的,data區(qū)放全局變量和臨時(shí)變量,是要不斷的改變的,cpu從code區(qū)讀取指令,對(duì)data區(qū)的數(shù)據(jù)進(jìn)行運(yùn)算處理,因此code區(qū)存儲(chǔ)在什么介質(zhì)上并不重要,象以前的計(jì)算機(jī)程序存儲(chǔ)在卡片上,code區(qū)也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是運(yùn)行速度要慢很多,主要讀flash比讀ram要費(fèi)時(shí)間),因此一般的做法是要將程序放到flash里面,然后load到ram里面運(yùn)行的;DATA區(qū)就沒有什么選擇了,肯定要放在RAM里面,放到rom里面改動(dòng)不了。bdata如何使用它呢?若程序需要8個(gè)或者更多的bit變量,如果你想一次性給8個(gè)變量賦值的話就不方便了,(舉個(gè)例子說說它的方便之處,想更深入的了解請?jiān)趹?yīng)用中自己琢磨)又不可以定義bit數(shù)組,只有一個(gè)方法charbdataMODE;sbitMODE_7=MODE"7;sbitMODE_6=MODE"6;sbitMODE_5=MODE"5;sbitM0DE_4=M0DE"4;sbitMODE_3=MODE"3;sbitMODE_2=MODE"2;sbitMODE_1=MODE'l;sbitMODE_0=MODE'O;8個(gè)bit變量MODE_n就定義好了這是定義語句,Keilc的特殊數(shù)據(jù)類型。記住一定要是sbit不能bitMODE_0=MODE'O;賦值語句要是這么些C語言就視為異或運(yùn)算空間名稱地址范圍說明:1、DATAD:00H~7FH片內(nèi)RAM直接尋址區(qū)。2、BDATAD:20H~2FH片內(nèi)RAM位尋址區(qū)。3、IDATAI:00H~FFH片內(nèi)RAM間接尋址區(qū)。4、XDATAX:0000H?FFFFH64KB常規(guī)片外RAM數(shù)據(jù)區(qū)。5、HDATAX:0000H?FFFFFFH16MB擴(kuò)展片外RAM數(shù)據(jù)區(qū)。6、CODEC:0000H?FFFFH64K常規(guī)片內(nèi)外ROM代碼區(qū)。7、HCONST(ECODE)C:0000H?FFFFFFH16MB擴(kuò)展片外ROM常數(shù)區(qū)(對(duì)Dallas390可用作代碼區(qū))。8、BANK0~BANK31B0:0000H~FFFFH::B31:0000H~FFFFH分組代碼區(qū),最大可擴(kuò)展32X64KBROM。8051單片機(jī)的存儲(chǔ)器結(jié)構(gòu)MCS-51單片機(jī)在物理結(jié)構(gòu)上有四個(gè)存儲(chǔ)空間:1、片內(nèi)程序存儲(chǔ)器2、片外程序存儲(chǔ)器3、片內(nèi)數(shù)據(jù)存儲(chǔ)器4、片外數(shù)據(jù)存儲(chǔ)器但在邏輯上,即從用戶的角度上,8051單片機(jī)有三個(gè)存儲(chǔ)空間1、片內(nèi)外統(tǒng)一編址的64K的程序存儲(chǔ)器地址空間(MOVC)2、256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器的地址空間(MOV)3、以及64K片外數(shù)據(jù)存儲(chǔ)器的地址空間(MOVX)程序內(nèi)存ROM尋址范圍:0000H~FFFFH容量64KBEA=1,尋址內(nèi)部ROM;EA=0,尋址外部ROM地址長度:16位作用:存放程序及程序運(yùn)行時(shí)所需的常數(shù)。七個(gè)具有特殊含義的單元是:0000H——系統(tǒng)復(fù)位,PC指向此處;0003H——外部中斷0入口000BH——T0溢出中斷入口0013H——外中斷1入口001BH——T1溢出中斷入口0023H——串口中斷入口002BH——T2溢出中斷入口內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM物理上分為兩大區(qū):00H~7FH即128B內(nèi)RAM和SFR區(qū)。作用:作數(shù)據(jù)緩沖器用。圖是8051單片機(jī)存儲(chǔ)器的空間結(jié)構(gòu)圖程序存儲(chǔ)器一個(gè)微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強(qiáng)大的硬件外,還需要它們運(yùn)行的軟件,其實(shí)微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計(jì)人員編寫的程序就存放在微處理器的程序存儲(chǔ)器中,俗稱只讀程序存儲(chǔ)器(ROM)。程序相當(dāng)于給微處理器處理問題的一系列命令。其實(shí)程序和數(shù)據(jù)一樣,都是由機(jī)器碼組成的代碼串。只是程序代碼則存放于程序存儲(chǔ)器中。MCS-51具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對(duì)于內(nèi)部無ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。對(duì)于內(nèi)部有ROM的8051等單片機(jī),正常運(yùn)行時(shí),則需接高電平,使CPU先從內(nèi)部的程序存儲(chǔ)中讀取程序,當(dāng)PC值超過內(nèi)部ROM的容量時(shí),才會(huì)轉(zhuǎn)向外部的程序存儲(chǔ)器讀取程序。當(dāng)=1時(shí),程序從片內(nèi)ROM開始執(zhí)行,當(dāng)PC值超過片內(nèi)ROM容量時(shí)會(huì)自動(dòng)轉(zhuǎn)向外部ROM空間。當(dāng)=0時(shí),程序從外部存儲(chǔ)器開始執(zhí)行,例如前面提到的片內(nèi)無ROM的8031單片機(jī),在實(shí)際應(yīng)用中就要把8031的引腳接為低電平。8051片內(nèi)有4kB的程序存儲(chǔ)單元,其地址為0000H—0FFFH,單片機(jī)啟動(dòng)復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開始執(zhí)行程序。但在程序存儲(chǔ)中有些特殊的單元,這在使用中應(yīng)加以注意:其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從0000H單元開始執(zhí)行程序,如果程序不是從0000H單元開始,則應(yīng)在這三個(gè)單元中存放一條無條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。另一組特殊單元是0003H—002AH,這40個(gè)單元各有用途,它們被均勻地分為五段,它們的定義

如下:0003H—000AH外部中斷0中斷地址區(qū)。000BH—0012H定時(shí)/計(jì)數(shù)器0中斷地址區(qū)。0013H—001AH外部中斷1中斷地址區(qū)。001BH—0022H定時(shí)/計(jì)數(shù)器1中斷地址區(qū)。0023H—002AH串行中斷地址區(qū)??梢娨陨系?0個(gè)單元是專門用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動(dòng)轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。從上面可以看出,每個(gè)中斷服務(wù)程序只有8個(gè)字節(jié)單元,用8個(gè)字節(jié)來存放一個(gè)中斷服務(wù)程序顯然是不可能的。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,我們是在中斷響應(yīng)的地址區(qū)安放一條無條件轉(zhuǎn)移指令,指向程序存儲(chǔ)器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。下圖是ROM的地址分配圖:OFFFFHoojaH/oo33irOO^AH/DOSBI^-Oft22H/Ci023H-U^lAlI/VOLbll-oooAH/oonrsH-m〒行i屛oooAH/oonrsH-m〒行i屛■■■I■■■I■■■I■■■I■■■I■?匕鄧V一型L_I\p■了門換帀Ipl折—一OOOaiVOOOUH-oonofiLJVIP^,從上圖中大家可以看到,0000H-0002H,只有三個(gè)存儲(chǔ)單元,3個(gè)存儲(chǔ)單元在我們的程序存放時(shí)是存放不了實(shí)際意義的程序的,通常我們在實(shí)際編寫程序時(shí)是在這里安排一條ORG指令,通過ORG指令跳轉(zhuǎn)到從0033H開始的用戶ROM區(qū)域,再來安排我們的程序語言。從0033開始的用戶ROM區(qū)域用戶可以通過ORG指令任意安排,但在應(yīng)用中應(yīng)注意,不要超過了實(shí)際的存儲(chǔ)空間,不然程序就會(huì)找不到。數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器也稱為隨機(jī)存取數(shù)據(jù)存儲(chǔ)器。數(shù)據(jù)存儲(chǔ)器分為內(nèi)部數(shù)據(jù)存儲(chǔ)和外部數(shù)據(jù)存儲(chǔ)。MCS-51內(nèi)部RAM有128或256個(gè)字節(jié)的用戶數(shù)據(jù)存儲(chǔ)(不同的型號(hào)有分別),片外最多可擴(kuò)展64KB的RAM,構(gòu)成兩個(gè)地址空間,訪問片內(nèi)RAM用“MOV”指令,訪問片夕卜RAM用“MOVX”指令。它們是用于存放執(zhí)行的中間結(jié)果和過程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲(chǔ)器均可讀寫,部分單元還可以位尋址。MCS-51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,即:數(shù)據(jù)存儲(chǔ)器空間(低128單元);特殊功能寄存器空間(高128單元);這兩個(gè)空間是相連的,從用戶角度而言,低128單元才是真正的數(shù)據(jù)存儲(chǔ)器。下面我們就來詳細(xì)的與大家講解一下:低128單元:片內(nèi)數(shù)據(jù)存儲(chǔ)器為8位地址,所以最大可尋址的范圍為256個(gè)單元地址,對(duì)片夕數(shù)據(jù)存儲(chǔ)器采用間接尋址方式,R0、R1和DPTR都可以做為間接尋址寄存器,R0、R1是8位的寄存器,即R0、R1的尋址范圍最大為256個(gè)單元,而DPTR是16位地址指針,尋址范圍就可達(dá)到64KB。也就是說在尋址片外數(shù)據(jù)存儲(chǔ)器時(shí),尋址范圍超過了256B,就不能用R0、R1做為間接尋址寄存器,而必須用DPTR寄存器做為間接尋址寄存器。FFH特殊功能寄存器區(qū)(SFR)SOH7FH數(shù)據(jù)緩沖區(qū)工作單元只能字節(jié)尋址30H2FH位尋址反址20HOOH—7FH12BS1FH3[X4爼通用寄存器嘔ED—RT也可件RAN使用,RO、R1亦可位尋址OOHo[K從上圖中我們可以看到,8051單片機(jī)片內(nèi)RAM共有256個(gè)單元(OOH-FFH),這256個(gè)單元共分為兩部分。其一是地址從OOH—7FH單元(共128個(gè)字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個(gè)字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。1、通用寄存器區(qū)(OOH-1FH)在OOH—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以RO—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為RO—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個(gè)寄存器——程序狀態(tài)字寄存器(PSW)來管理它們,CPU只要定義這個(gè)寄存的PSW的D3和D4位(RSO和RS1),即可選中這四組通用寄存

器。對(duì)應(yīng)的編碼關(guān)系如下表所示。惹程序中并不需要用4組,那么其余的可用做一般的數(shù)據(jù)緩沖器,CPU在復(fù)位后,選中第0組工作寄存器。2、位尋址區(qū)(20H-2FH)片內(nèi)RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對(duì)它們的位進(jìn)行尋址。位尋址區(qū)共有16個(gè)字節(jié),128個(gè)位,位地址為00H—7FH。位地址分配如下表所示:CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲(chǔ)空間指的就是這些為尋址區(qū)。3、用戶RAM區(qū)(30H-7FH)在片內(nèi)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論