<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          單片機RAM這樣用

          作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
          任何一本單片機的數(shù)據(jù)都不會不提存儲器的問題,但是沒有基本能說的讓人一下就領(lǐng)悟過來。菜鳥時候的特權(quán)也是一知半解的過來的,我想如果讀51的存儲器(主要是RAM)做一下歸納,列一張表,我想一定會讓初學(xué)者少走很多彎路,希望這張表還有下面的一些個人的經(jīng)驗只談能給你一些啟迪。也許有些地方說的不是很專業(yè),或者說是表達不太合適,很歡迎各路高手拍磚指正。EDN這個大家庭就是讓我們互相學(xué)習(xí)共同進步的樂土!
          51單片機存儲區(qū)分配如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/323222.htm
          存儲區(qū)
          地址范圍
          功能說明
          內(nèi)部RAM
          (256Byte)
          00H-1FH
          內(nèi)部使用DATA區(qū),四個工作寄存器組(4*8=32Byte),用于內(nèi)部參數(shù)傳遞
          20H-2FH1
          BDATA區(qū),DATA區(qū)的16個字節(jié)的可位尋址區(qū)
          30H-7FH2
          用戶可用非位尋址DATA區(qū),可在一個周期內(nèi)直接尋址
          80H-FFH
          IDATA區(qū),用戶可用的內(nèi)部RAM區(qū)的高128個字節(jié),必須采用間接尋址
          80H-FFH3
          可以進行位尋址的特殊功能寄存器(SFR)
          外部擴展RAM
          (最大64KByte)
          00H-FFH
          PDATA區(qū),外部存儲區(qū)的256個字節(jié)通過P0口的地址對其尋址,需要兩個指令周期
          00H-FFFFH4
          XDATA區(qū)(外部存儲區(qū)),使用DPTR尋址
          ROM
          (最大64KByte)
          00H-FFFFH
          CODE區(qū)(程序存儲區(qū)),使用DPTR尋址

          對上表的一些說明:
          1編程定義為:uchar bdata test;
          所謂的可位尋址,如果你這么用:if(test^0)…else…;我的經(jīng)驗告訴我編譯出來的程序會出錯的。
          我們一般可以這么用:
          先做一個位定義:sbit test0 = test^0;
          然后再程序中使用:if(test0)…else…;表示判斷test的第0bit位的值,然后執(zhí)行相應(yīng)程序。其它位的用法類似。
          2編程定義為:uchar data test;
          因為data區(qū)時直接存取存儲,也就是說它在編程的時候最快的RAM區(qū),所以我們往往把使用最頻繁或者說對實時性要求高的數(shù)據(jù)都定義在data區(qū)(keil C中是可以設(shè)置優(yōu)先存放RAM區(qū)的)。
          Data區(qū)包括了4個工作寄存器組(32Byte)、位尋址區(qū)(16Byte)、用戶data區(qū)(80Byte)。其實位尋址區(qū)也應(yīng)該歸類到用戶可用data區(qū)中,所以一般用戶可以使用的直接尋址的RAM為96Byte。而實際上,一種比較極端的情況,因為單片機工作時只使用4組工作寄存器組中的一組,我們可編程的data區(qū)可以有120Byte(我在keilC下編譯測試的結(jié)果是,只有在不使用bdata的情況下才可以定義120Byte的data區(qū)數(shù)據(jù))。
          3編程定義為:uchar idata test;
          如果你沒有完全弄懂一個MPU的SFR,那么只能說你沒有弄懂這個MPU了。所以這里不細(xì)說單片機的SFR,只提一點,它的地址是和IDATA區(qū)重疊的,單片機內(nèi)部時通過區(qū)分所訪問的存儲區(qū)來解決地址重疊問題的,因為IDATA 區(qū)只能通過間接尋址來訪問。在我們的實時性要求不那么高,或者DATA區(qū)不夠用的情況下我們就應(yīng)該啟用IDATA區(qū)。
          4編程定義為:uchar xdata LD_at_ 0x7f;
          也可以這么使用:(需包含頭文件absacc.h)
          A = XBYTE[0x8100]; //從地址8100H讀一個字節(jié)
          B = *((char xdata *) 0x0000); //從地址0000H讀一個字節(jié)
          XBYTE[0x7500] = 0xf0; //寫一個字節(jié)到7500H
          P2和P0口為16bit的地址總線接口,P0口為數(shù)據(jù)總線口,數(shù)據(jù)和地址時分時傳輸?shù)摹?/div>
          51單片機的最后一個存儲空間為64K, 和CODE 區(qū)一樣采用16 位尋址,屬于外部數(shù)據(jù)存儲區(qū),即XDATA區(qū)。這個區(qū)通常包括一些RAM器件(如SRAM)或是一些需要通過總線接口的外圍器件(特權(quán)在以前的BLOG里多次談過這個擴展RAM的問題,這里也不多涉及了)。對XDATA的讀寫操作需要至少兩個處理周期來裝入地址,而讀寫又需要兩個處理周期。


          關(guān)鍵詞: 單片機RA

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();