Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1666回复:9

一个困惑很久的问题

楼主#
更多 发布于:2004-08-10 15:11
我用的是cy64613,是有8kram的那种,现在在芯片外部加了一个sram,用了12个地址线和8个数据线,就是说sram的范围是0x000-oxfff,那么看手册说8051对内部的这8k ram和外部的扩展sram的访问都是用movx指令,那么该怎么区分?我的设计中:PSEN#是浮空的,EA接地,现在用C51写firmware,想把接受到的数据存入sram中,
xdata BYTE FIFO1_SRAM[512] _at_ 0x0000;
xdata BYTE FIFO2_SRAM[512] _at_ 0x0200;
xdata BYTE FIFO3_SRAM[512] _at_ 0x0400;
xdata BYTE FIFO4_SRAM[512] _at_ 0x0600;

xdata BYTE Reserved_SRAM[256] _at_ 0x0800;

xdata BYTE PortConfig_SRAM[16] _at_ 0x0900;

xdata BYTE ExtVoltConfig_SRAM _at_ 0x0910;

xdata BYTE Vector1_SRAM _at_ 0x0911;
xdata BYTE Vector2_SRAM _at_ 0x0912;
xdata BYTE Vector3_SRAM _at_ 0x0913;
xdata BYTE Vector4_SRAM _at_ 0x0914;
定义了这么些,但是不知道他们是在内部的8k上,还是已经在外部的sram上了。

帮帮忙阿
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-10 15:57
内部SRAM用的是:
      MOV R1, #XXH(XX是SRAM地址)
      MOV @R1, A(A放想要移的数据)
外部SRAM用的是:
      MOVX @R1, #XXH(对于8位地址)

      MOVX @DPTR, #XXH(对于16位地址)
即内部SRAM是用PDATA定义,外部是用XDATA定义.
新手上路,请多关照.
Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-10 16:09
你所说的内sram是哪256字节吧
我不明白的是对于外部sram,那8k的ram和2k的外部扩展的sram都是用movx访问,怎么区别?

pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-10 19:06
用户被禁言,该主题自动屏蔽!
Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-11 08:51
那么现在外部扩展的sram地址是0x000-0xfff,和内部8k ram的0x0000-0x7fff不是发生了重叠了吗?

比如我要把数据送到外部sram的0x000-0x1ff去而不是内部ram,该怎么做?


困惑~~~~~~~~~~~
lejianz
驱动中牛
驱动中牛
  • 注册日期2003-03-05
  • 最后登录2023-11-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望145点
  • 贡献值0点
  • 好评度116点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-08-11 09:13
xdata 外部数据存储器64K 字节通过MOVX @DPTR 访问
pdata 页外部数据存储器256 字节通过MOVX @Rn 访问
我认为你要慎重。cy64613也是通过扩展RAM来访问。最好,能把你的地地定义为:0X800-0XFFF
一起交流,共同提高!
Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-11 09:27
楼上的能说的详细点嘛?
“最好,能把你的地地定义为:0X800-0XFFF”什么意思?

怎么定义?
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-11 09:44
我对CY64613不熟悉.如果你的2K和8K都是芯片外的SRAM则可以通过
地址线(A0~A15)对他们进行硬件编程(如:2K是低地址,8K是高地址),
这样对2个SRAM不同选通就可以了.
"最好,能把你的地地定义为:0X800-0XFFF”是说在51内,这个地
址段是分配给特殊功能寄存器的,可以直接访问;还有另外的SRAM也
分配这个地址,但是间接访问(@).
PDATA和XDATA在访问时容易搞混,访问PDATA时也访问了XDATA,如:
   MOV R1, #XXH
   MOV A, #XXH
   MOVX @R1, A
这时,不仅将A内的数据送到了R1指定的PDATA里,也送到了外部的
YYXXH里(YY为任意数,我就碰到过),如果你想只对内部或外部访问,
我建议你可以把A13,A14,A15和WR,RD分别编址,接到外部SRAM的WR
和RD上,这样你在访问内部SRAM时,外部SRAM不产生读写信号,也就
不会访问他了;而访问外部时,用DPTR就不会访问内部的了.


[编辑 -  8/11/04 by  metalwing]
新手上路,请多关照.
Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-11 10:39
64613的8051的sfr中添加了一个寄存器MPAGE,可以避免你说的这种混淆的情况。

还有就是A13,A14,A15分别编址什么意思?64613有16个地址线,我只用了A0~A11,其他的A12~A15空接。


Ng_MicHeAl
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-12 15:01
那么就把A12-A15接高电平,A0-A11还是不变,与外部扩展的SRAM(A0~A11)连接,这样的话,外部的地址就是0x0F000~0x0FFFF,可以和内部的8k
(0x0000~0x1FFFF)区别开来了。

可以嘛 ?
游客

返回顶部