sirenfox
驱动牛犊
驱动牛犊
  • 注册日期2004-02-13
  • 最后登录2004-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1035回复:1

问问用d12和51的高人门,51还用不用扩展ram啊

楼主#
更多 发布于:2004-03-19 17:52
我看了看别人的例子,他们都没有扩展,但有的用c语言写用了xdata
到底用不用扩展啊,at89c52
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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__)

A strong man can save himself. A great man can save another.
游客

返回顶部