阅读:1034回复:1
问问用d12和51的高人门,51还用不用扩展ram啊
我看了看别人的例子,他们都没有扩展,但有的用c语言写用了xdata
到底用不用扩展啊,at89c52 |
|
沙发#
发布于:2004-03-20 01:57
要不要扩展取决于你系统中其他功能需求。单单USB接口是不需要的。
XDATA相当于MOVX指令。 由于D12提供的是存储器接口,所以可以使用XDATA来访问。可以采用如下几种方式:(假设D12的地址是0x0200和0x0201) #define __D12_DATA_PORT__ 0x0200 #define __D12_CMD_PORT__ 0x0201 #define BYTE unsigned char 方法1: #define D12SetCommand(ucCmd) XDATA[__D12_CMD_PORT__]=ucCmd #define D12GetState() XDATA[__D12_CMD_PORT__] #define D12SetData(ucData) XDATA[__D12_DATA_PORT__]=ucData #define D12GetData)() XDATA[__D12_DATA_PORT__] 方法2: BYTE xdata gucD12CmdPort _at_ __D12_CMD_PORT__; BYTE xdata gucD12DataPort _at_ __D12_DATA_PORT__; #define D12SetCommand(ucCmd) gucD12CmdPort=ucCmd #define D12GetState() gucD12CmdPort #define D12SetData(ucData) gucD12DataPort=ucData #define D12GetData)() gucD12DataPort 方法3: BYTE xdata * gpucD12CmdPort = (BYTE xdata *)__D12_CMD_PORT__; BYTE xdata * gpucD12DataPort = (BYTE xdata *)__D12_DATA_PORT__; #define D12SetCommand(ucCmd) (*gpucD12CmdPort)=ucCmd #define D12GetState() (*gpucD12CmdPort) #define D12SetData(ucData) (*gpucD12DataPort)=ucData #define D12GetData)() (*gpucD12DataPort) 方法4: #define D12SetCommand(ucCmd) (*(BYTE xdata*)__D12_CMD_PORT__)=ucCmd #define D12GetState() (*(BYTE xdata*)__D12_CMD_PORT__) #define D12SetData(ucData) (*(BYTE xdata*)__D12_DATA_PORT__)=ucData #define D12GetData)() (*(BYTE xdata*)__D12_DATA_PORT__) |
|
|