找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4388|回复: 6
收起左侧

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

[复制链接]
ID:693671 发表于 2020-3-21 12:22 | 显示全部楼层 |阅读模式
批注 2020-03-21 121304.png
这个程序是将片内RAM60H~0AH单元的内容送到片外RAM1000H开始的单元中,但我在keil里面调试好像只将0X60~0X80的内容移过去了,这是为什么?

批注 2020-03-21 121129.png

这个是仿真结果,片内RAM 84H的内容并没有移过去。并发现DJNZ R7,LOOP循环好像只循环了0x20次
回复

使用道具 举报

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
解答3.PNG
解答1.PNG
解答.PNG
回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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
回复

使用道具 举报

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 单片机教程网

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