找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4322|回复: 6
打印 上一主题 下一主题
收起左侧

为什么DJNZ R7,LOOP汇编指令在这最多只能循环0x20次

[复制链接]
跳转到指定楼层
楼主

这个程序是将片内RAM60H~0AH单元的内容送到片外RAM1000H开始的单元中,但我在keil里面调试好像只将0X60~0X80的内容移过去了,这是为什么?



这个是仿真结果,片内RAM 84H的内容并没有移过去。并发现DJNZ R7,LOOP循环好像只循环了0x20次
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401564 发表于 2020-3-21 15:18 | 只看该作者
你确定你能看得懂下面那红色圈圈里头是什么意思吗?
我用了几年的汇编,都看不懂那玩意
汇编不仿真,仿真没用的
直接烧录看结果,汇编是直接操作硬件的,硬件不用,结果也不同,那么仿真就没有意义了
你确定R7那只循环了20次吗?
回复

使用道具 举报

板凳
ID:480251 发表于 2020-3-21 17:39 | 只看该作者
错误的原因是您并没有好好去了解单片机内部RAM的寄存器分布,对于51单片机,一般RAM区是30-7FH,80-FFH地址 是有特殊寄存器的,是不能读值的,建议您把起始地址60H改为40H即可成功。

解答4.PNG (89.65 KB, 下载次数: 111)

解答4.PNG

解答3.PNG (46.94 KB, 下载次数: 104)

解答3.PNG

解答1.PNG (219.06 KB, 下载次数: 103)

解答1.PNG

解答.PNG (316.18 KB, 下载次数: 110)

解答.PNG
回复

使用道具 举报

地板
ID:235200 发表于 2020-3-21 21:05 | 只看该作者
程序在R7减为0后的语句是RET,这是子程序的返回指令,不应该有,程序DPTR初始是1000H,请问你的外存存储器支持最大地址1040H吗?
回复

使用道具 举报

5#
ID:693671 发表于 2020-3-22 10:15 | 只看该作者
csmyldl 发表于 2020-3-21 21:05
程序在R7减为0后的语句是RET,这是子程序的返回指令,不应该有,程序DPTR初始是1000H,请问你的外存存储器 ...

选用的是AT89C51,外部RAM应该可以访问到0XFFFFFF
回复

使用道具 举报

6#
ID:693671 发表于 2020-3-22 10:48 | 只看该作者
19857119144 发表于 2020-3-21 17:39
错误的原因是您并没有好好去了解单片机内部RAM的寄存器分布,对于51单片机,一般RAM区是30-7FH,80-FFH地址  ...

明白了,万分感谢!

我又试了一下,想将片内80H开始的内容移到片外去,仿真都出不来结果
C:\Users\DELL\Desktop
C:\Users\DELL\Desktop
回复

使用道具 举报

7#
ID:693671 发表于 2020-3-22 10:51 | 只看该作者
Y_G_G 发表于 2020-3-21 15:18
你确定你能看得懂下面那红色圈圈里头是什么意思吗?
我用了几年的汇编,都看不懂那玩意
汇编不仿真,仿真没 ...

红色圈里面的应该是存储器内容值吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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