找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 965|回复: 17
收起左侧

51单片机寄存器片外间接寻址的问题(汇编语言)

[复制链接]
ID:1003481 发表于 2022-11-15 11:53 | 显示全部楼层 |阅读模式
在第7行之前,R0的值已经等于20H,A的值已经等于DDH。
第7行 MOVX @R0,A 表示将A的值赋给R0的值所指向的片外RAM的存储单元
但为什么第7行代码在执行完以后,片外RAM的20H的值并没有发生变化呢?
51hei截图_20221109133740.png
回复

使用道具 举报

ID:883242 发表于 2022-11-15 17:09 | 显示全部楼层
你看下X:FF20位置,应该已经改变了。
回复

使用道具 举报

ID:624769 发表于 2022-11-15 19:09 | 显示全部楼层
再往下走一步。
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 08:43 | 显示全部楼层
Hephaestus 发表于 2022-11-15 17:09
你看下X:FF20位置,应该已经改变了。

X:FF20H查不了,是一片空白。不知道是为什么,我用的Keil 4仿真的
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 08:44 | 显示全部楼层

往下继续走,X:0020H还是没变
回复

使用道具 举报

ID:384109 发表于 2022-11-16 09:03 | 显示全部楼层
是否有实物外部存储器,软件仿真的话不一定能有结果
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 10:07 | 显示全部楼层
如图,用DPTR指向片外内存就可以正确读写,但R0、R1不行
51hei图片_20221116100235.png
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 10:07 | 显示全部楼层
人中狼 发表于 2022-11-16 09:03
是否有实物外部存储器,软件仿真的话不一定能有结果

用DPTR可以完成操作,但是R0、R1不行。不知道为啥会这样子
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 10:31 来自手机 | 显示全部楼层
如果代码没问题的话我就不去深究了,因为我只是理论学习
回复

使用道具 举报

ID:624769 发表于 2022-11-16 11:34 | 显示全部楼层
MagicKrse 发表于 2022-11-16 10:31
如果代码没问题的话我就不去深究了,因为我只是理论学习

不深究就学不会啊……
你 页定义了么?
只要定义了页,就能正常写入啊。如图:

PDATA.png


回复

使用道具 举报

ID:883242 发表于 2022-11-16 13:23 | 显示全部楼层
这个页地址是标准51没有的,查你用的单片机具体型号的手册吧。
回复

使用道具 举报

ID:123289 发表于 2022-11-16 13:45 | 显示全部楼层
外XRAM地址是16位,含盖0000H-FFFFH。
DPTR是16位,所以用DPTR寻址,你一定能理解。
但R0是8位,你为何没有提出疑问呢?
还是没有认真读CPU手册,51系统规定,用@R0对XRAM寻址时,高8位隐含在P2中。
去核对一下:P2R0合成的地址看看,是不是也。
或者先将P2清0,再做一次。

劝君认真读一下手册,它是你精通单片机成为高手的必由之路!
回复

使用道具 举报

ID:1003481 发表于 2022-11-16 14:25 | 显示全部楼层
答案正如楼上各位所说。
我错误的将R0、R1的寻址和DPTR的内容联系起来了。
我原以为DPTR的高8位(DPH)只要是00H就不会影响工作寄存器片外寻址的地址指向,
我错误的认为:工作寄存器片外寻址时其指向的地址=DPH+R0.
而实际上:P2的值才是地址总线的高8位,工作寄存器片外寻址时其指向的地址=P2+R0,而工作寄存器片外寻址时是不受DPH的影响的。
感谢上面的朋友们的解答!
回复

使用道具 举报

ID:77589 发表于 2022-11-16 17:52 | 显示全部楼层
yzwzfyz 发表于 2022-11-16 13:45
外XRAM地址是16位,含盖0000H-FFFFH。
DPTR是16位,所以用DPTR寻址,你一定能理解。
但R0是8位,你为何没 ...

这才是正解!!!!!!
回复

使用道具 举报

ID:983641 发表于 2022-11-25 17:02 | 显示全部楼层
P2是什么?
回复

使用道具 举报

ID:368534 发表于 2022-11-29 11:29 | 显示全部楼层
查idata,不是xdata。
回复

使用道具 举报

ID:883242 发表于 2022-11-29 21:26 | 显示全部楼层
xdqfc 发表于 2022-11-29 11:29
查idata,不是xdata。

楼主已经解决问题了,你还在说这些错误的结论用意何在?

xdata用movx指令访问
idata用mov @Ri (i=0 or 1)指令访问

你仔细看看楼主的代码!
回复

使用道具 举报

ID:368534 发表于 2022-11-30 11:13 | 显示全部楼层
Hephaestus 发表于 2022-11-29 21:26
楼主已经解决问题了,你还在说这些错误的结论用意何在?

xdata用movx指令访问

我能有什么用意??没有仔细看到他的代码而已。你急什么啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表