打印

求助:单片机一段小程序问题

[复制链接]
1628|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leshak|  楼主 | 2012-1-23 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面段程序是将RAM 6116的2KB单元清0,6116有11根地址线,A0---A10
        ORG 0000H
        MOV  A, #00H
        MOV DPTR,#00H
        MOV R0,#10H-----这边的值应该是11吧,因为有11根地址线啊?
OL0:MOV R1,#00H
OL1:MOVX @DPTR,A  写数据
         INC DPTR     地址加1?
         DJNZ   R1,OL1-------这里不明白,R1都赋为#00H了,00H减1不是一直要循环下去了?
         DZNZ  R0,OL0
望各位前辈和大侠指教,谢谢!

相关帖子

沙发
老鱼探戈| | 2012-1-23 17:35 | 只看该作者
10H是空间分区,且不是地址线条数
00H减一是FFH

使用特权

评论回复
板凳
xjycug| | 2012-1-23 17:39 | 只看该作者
程序要清2KB的存储空间,所以循环要执行2048次,应该是0x800次。地址根据是DPTR
会自动累加的。那么我觉得 MOV R0,#10H这句应该改为MOV R0,#08H.DJNZ   R1,OL1是不是让其自减256次,应为DJNZ好像是先减再比较吧。呵呵,好多年没看汇编了,感觉是这样,仅供参考哈。

使用特权

评论回复
地板
leshak|  楼主 | 2012-1-23 19:25 | 只看该作者
谢谢你们的帮助,我理解了。回3楼,感觉应该是10H,DPTR是16位的...

使用特权

评论回复
5
wuzx-61| | 2012-1-23 19:50 | 只看该作者
X000:  MOV   A,#00H
           MOV   DPTR,#00H
           MOV   R0,#08H                     ;8x256=2048
OL0:  MOV    R1,#0FFH
OL1:  MOV    @DPTR,A
           INC     DPTR
           DJNZ   R1,OL1
           DJNZ   R0,OL0
           RET
C51单片机地址与P2口连线有关。

使用特权

评论回复
6
fu10| | 2012-1-26 16:54 | 只看该作者
本帖最后由 fu10 于 2012-1-26 16:55 编辑

小兄弟,我帮你详细解析一下,很简单的:
看如下注析-----------
       ORG 0000H
        MOV  A, #00H
        MOV DPTR,#00H
        MOV R0,#10H-----这里是#10H==16,改为#08才是2K
OL0:MOV R1,#00H----这里是256,因为零减一就变成0FFH了,即是255,明白吗?你加回一就是256了!因为已经有进位了
OL1:MOVX @DPTR,A  写数据
         INC DPTR     "地址加1?"----当然要加一啦,你是准备要向下一个地址放数据啦
         DJNZ   R1,OL1-------这里是要先将R1减一再判断R1是否为零,再判断是否要继续下去
         DZNZ  R0,OL0--------这里就不用讲啦,16X256=4096=4K了,是要清零4K的单元

使用特权

评论回复
7
leshak|  楼主 | 2012-1-27 13:50 | 只看该作者
TO fu10和楼上的朋友,谢谢你们啊,概念似乎有点清楚了。11条数据线2的11次方=2KB单元。

使用特权

评论回复
8
llp133| | 2012-1-28 22:27 | 只看该作者
数值转换啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

522

帖子

4

粉丝