阅读:1666回复:9
一个困惑很久的问题
我用的是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上了。 帮帮忙阿 |
|
沙发#
发布于: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定义. |
|
|
板凳#
发布于:2004-08-10 16:09
你所说的内sram是哪256字节吧
我不明白的是对于外部sram,那8k的ram和2k的外部扩展的sram都是用movx访问,怎么区别? |
|
地板#
发布于:2004-08-10 19:06
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2004-08-11 08:51
那么现在外部扩展的sram地址是0x000-0xfff,和内部8k ram的0x0000-0x7fff不是发生了重叠了吗?
比如我要把数据送到外部sram的0x000-0x1ff去而不是内部ram,该怎么做? 困惑~~~~~~~~~~~ |
|
5楼#
发布于:2004-08-11 09:13
xdata 外部数据存储器64K 字节通过MOVX @DPTR 访问
pdata 页外部数据存储器256 字节通过MOVX @Rn 访问 我认为你要慎重。cy64613也是通过扩展RAM来访问。最好,能把你的地地定义为:0X800-0XFFF |
|
|
6楼#
发布于:2004-08-11 09:27
楼上的能说的详细点嘛?
“最好,能把你的地地定义为:0X800-0XFFF”什么意思? 怎么定义? |
|
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] |
|
|
8楼#
发布于:2004-08-11 10:39
64613的8051的sfr中添加了一个寄存器MPAGE,可以避免你说的这种混淆的情况。
还有就是A13,A14,A15分别编址什么意思?64613有16个地址线,我只用了A0~A11,其他的A12~A15空接。 |
|
9楼#
发布于:2004-08-12 15:01
那么就把A12-A15接高电平,A0-A11还是不变,与外部扩展的SRAM(A0~A11)连接,这样的话,外部的地址就是0x0F000~0x0FFFF,可以和内部的8k
(0x0000~0x1FFFF)区别开来了。 可以嘛 ? |
|