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

          新聞中心

          C51中訪問外部RAM的方法

          作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          C51的P0,P2口做外部擴(kuò)展時(shí)使用,其中XBYTE [0x0002],P2口對(duì)應(yīng)于地址高位,P0口對(duì)應(yīng)于地址低位。一般P2口用于控制信號(hào),P0口作為數(shù)據(jù)通道。

          XBYTE定義的是外部地址,這樣才能和接到你的IO口上的器件通信
          在一般的讀寫外部RAM的程序中,經(jīng)常看到這樣的句子:

          本文引用地址:http://www.ex-cimer.com/article/201611/322578.htm

          XBYTE[address]=data寫數(shù)據(jù)
          data=XBYTE[address]讀數(shù)據(jù)1
          外部總線由3組總線組成,數(shù)據(jù) 地址 控制,我們常常一般就叫他外部總線,既然是有3組不同的信號(hào),那么他們是怎么協(xié)調(diào)工作的呢?一般情況CPU有特殊的外部數(shù)據(jù)

          訪問指令如你這里講51的MOVX指令(在C語言中他會(huì)編譯成這個(gè)指令)在執(zhí)行這個(gè)指令的時(shí)候3組線是協(xié)調(diào)工作
          mov dptr,#1000h
          mov a,#55h
          movx @dptr,a
          上面3調(diào)語句的C語言可以表示如下
          #defineW_DATAXBYTE[0x1000]
          W_DATA=0X55;
          在使用外部總線的時(shí)候,數(shù)據(jù) 地址和控制信號(hào)是直接按照規(guī)定的時(shí)序輸出高低電平的,所以不用你管,當(dāng)然你必須要滿足時(shí)序工作如何理解#define XBYTE ((unsigned char

          volatile xdata * ))
          8051 特有的內(nèi)存型態(tài)
          code以 MOVC @A+DPTR 讀取的程序內(nèi)存
          data可以直接存取的內(nèi)部數(shù)據(jù)存儲(chǔ)器
          idata以 Mov @Rn 存取的內(nèi)部數(shù)據(jù)存儲(chǔ)器
          bdata可以位尋址(Bit Addressable)的內(nèi)部存儲(chǔ)器
          xdata以 MOVX @DPTR 存取的外部數(shù)據(jù)存儲(chǔ)器
          pdata以 MOVX @Rn 存取的外部數(shù)據(jù)存儲(chǔ)器
          特殊資料型態(tài)
          bit一般位(bit)變量
          sbit絕對(duì)尋址的位(bit)變量
          語法
          sbitmy_flag=location;(location 范圍從 0x00 ~ 0x7F)
          范例
          sbitEA =0xAF;
          或是配合 bdata 宣告的位(bit)變量
          charbdatamy_flags;
          sbitflag0 =my_flags ^ 0;
          (注意 sbit 前不可以加 static)
          sfr特殊功能緩存器(Special Function Register)
          語法
          sfrmy_sfr=location;(location 范圍從 0x80 ~ 0xFF)
          范例
          sfrP0=0x80;
          指定絕對(duì)地址的變量
          在單一模塊內(nèi)可以使用下面的語法宣告
          [memory_space]typevariable_name_at_location
          范例
          pdatacharmy_pdata_at_0x80;
          如果該變量必須為多個(gè)模塊所使用(Global Variable)則以
          抽象指針(Abstract Pointer)的方式在標(biāo)頭檔(Header File)定義較為方便。
          #definevariable_name*((data_type *)location)
          范例
          #definemy_pdata*((char pdata *)0x80)
          (注意 char 與 pdata 的順序)
          ABSACC.H 提供了下列方便的宏(Macro)定義。
          #define CBYTE ((unsigned char volatile code *) 0)
          #define DBYTE ((unsigned char volatile data *) 0)
          #define PBYTE ((unsigned char volatile pdata *) 0)
          #define XBYTE ((unsigned char volatile xdata *) 0)
          #define CWORD ((unsigned int volatile code *) 0)
          #define DWORD ((unsigned int volatile data *) 0)
          #define PWORD ((unsigned int volatile pdata *) 0)
          #define XWORD ((unsigned int volatile xdata *) 0)
          隱藏的初始化程序
          80C51 在電源重置后(Power On Reset)所執(zhí)行的第一個(gè)程序模塊并不是使用者的主程序
          main(),而是一個(gè)隱藏在 KEIL-C51 標(biāo)準(zhǔn)鏈接庫中稱為 startup.a51 的程序模塊。
          startup.a51 的主要工作是把包含 idata、xdata、pdata 在內(nèi)的內(nèi)存區(qū)塊清除為 0,并
          且初始化遞歸指針。接著 startup.a51 被執(zhí)行的仍然是一個(gè)隱藏在 KEIL-C51 標(biāo)準(zhǔn)鏈接庫
          中稱為 init.a51 的程序模塊。而 init.a51 的主要工作則是初始化具有非零初始值設(shè)定的
          變量。
          在完成上述的初始化程序之后,80C51 的控制權(quán)才會(huì)交給 main() 開始執(zhí)行使用者的程序。
          #define XBYTE ((unsigned char volatile xdata *) 0)
          定義XBYTE 為 指向 xdata 地址空間unsigned char 數(shù)據(jù)類型的指針,指針值為0
          這樣,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)訪問外部RAM了

          其中,初始地址就是0x0000;

          百度知道:

          #define XBYTE((char*)0x20000L)XBYTE[0x8000]=0x41;這段程序是什么意思?#define XBYTE ((char*)0x20000L) 定義了XBYTE是個(gè)指向地址 0x20000L 的字符型指針(或者數(shù)組)變量XBYTE[0x8000]=0x41; 對(duì)數(shù)組XBYTE的第 0x8000個(gè)變量進(jìn)行賦值,賦值為0x41。即對(duì)地址0x28000L的內(nèi)存單元賦值為0x41。這說明你用的是帶外部數(shù)據(jù)總線的51芯片,外部的存儲(chǔ)器多半是RAM,RAM的容量至少有 0x8000(32k)字節(jié)-RAM的容量可能是64k字節(jié)?如果還有問題,可以發(fā)消息聯(lián)系補(bǔ)充1:L代表 long,這說明 0x20000L 是一個(gè)長(zhǎng)整數(shù)。一般來說,8位單片機(jī)如51,整數(shù)用16位二進(jìn)制表示,長(zhǎng)整數(shù)用32位二進(jìn)制表示。
          還有這樣用的:
          寫這樣的一個(gè)頭文件

          這樣的格式:
          類型 儲(chǔ)存空間 定義別名 關(guān)鍵字_at_ 寄存器的地址
          _at_這個(gè)關(guān)鍵字是絕對(duì)定義地址


          關(guān)鍵詞: C51外部RA

          評(píng)論


          技術(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); })();