C51中訪問(wèn)外部RAM的方法
XBYTE定義的是外部地址,這樣才能和接到你的IO口上的器件通信
在一般的讀寫(xiě)外部RAM的程序中,經(jīng)??吹竭@樣的句子:
訪問(wèn)指令如你這里講51的MOVX指令(在C語(yǔ)言中他會(huì)編譯成這個(gè)指令)在執(zhí)行這個(gè)指令的時(shí)候3組線是協(xié)調(diào)工作
mov dptr,#1000h
mov a,#55h
movx @dptr,a
上面3調(diào)語(yǔ)句的C語(yǔ)言可以表示如下
#define
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
data
idata
bdata
xdata
pdata
特殊資料型態(tài)
bit
sbit
語(yǔ)法
sbit
范例
sbit
或是配合 bdata 宣告的位(bit)變量
char
sbit
(注意 sbit 前不可以加 static)
sfr
語(yǔ)法
sfr
范例
sfr
指定絕對(duì)地址的變量
在單一模塊內(nèi)可以使用下面的語(yǔ)法宣告
[memory_space]
范例
pdata
如果該變量必須為多個(gè)模塊所使用(Global Variable)則以
抽象指針(Abstract Pointer)的方式在標(biāo)頭檔(Header File)定義較為方便。
#define
范例
#define
(注意 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)鏈接庫(kù)中稱為 startup.a51 的程序模塊。
startup.a51 的主要工作是把包含 idata、xdata、pdata 在內(nèi)的內(nèi)存區(qū)塊清除為 0,并
且初始化遞歸指針。接著 startup.a51 被執(zhí)行的仍然是一個(gè)隱藏在 KEIL-C51 標(biāo)準(zhǔn)鏈接庫(kù)
中稱為 init.a51 的程序模塊。而 init.a51 的主要工作則是初始化具有非零初始值設(shè)定的
變量。
在完成上述的初始化程序之后,80C51 的控制權(quán)才會(huì)交給 main() 開(kāi)始執(zhí)行使用者的程序。
#define XBYTE ((unsigned char volatile xdata *) 0)
定義
這樣,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)訪問(wèn)外部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。這說(shuō)明你用的是帶外部數(shù)據(jù)總線的51芯片,外部的存儲(chǔ)器多半是RAM,RAM的容量至少有 0x8000(32k)字節(jié)-RAM的容量可能是64k字節(jié)?如果還有問(wèn)題,可以發(fā)消息聯(lián)系補(bǔ)充1:L代表 long,這說(shuō)明 0x20000L 是一個(gè)長(zhǎng)整數(shù)。一般來(lái)說(shuō),8位單片機(jī)如51,整數(shù)用16位二進(jìn)制表示,長(zhǎng)整數(shù)用32位二進(jìn)制表示。
還有這樣用的:
寫(xiě)這樣的一個(gè)頭文件
這樣的格式:
類型 儲(chǔ)存空間 定義別名 關(guān)鍵字_at_ 寄存器的地址
_at_這個(gè)關(guān)鍵字是絕對(duì)定義地址
評(píng)論