单片机汇编问题

[复制链接]
3358|12
手机看帖
扫描二维码
随时随地手机跟帖
soul11201|  楼主 | 2013-3-12 23:38 | 显示全部楼层 |阅读模式

;数码管循环显示从0到9
org 0000h
ajmp main
org 0030h
main:
     ;mov dptr,@table
     ;mov dptr,#table   ;片内数据传输不能用dptr
     mov r1,#table
     loop:
           mov a,@r1
           mov p2,a
           lcall Delay_650ms
           inc r1
           cjne r1,#0ah,loop
ajmp main
;ajmp loop

;延时
Delay_650ms:
         mov r7,#05h
         delay_1: mov r6,#0ffh
         delay_2: mov r5,#0ffh
         delay_3: djnz r5,delay_3
                  djnz r6,delay_2
                  djnz r7,delay_1
ret
;表格
table:
      db 7eh,44h,3dh,6dh,47h ;0 - 4
      db 6bh,7bh,4ch,7fh,6fh ;5 - 8


问题出现在:
mov a,@r1
mov p2,a
p2的值给的一直是00h但是取出来的应该为7eh啊?求大神指点一下。


相关帖子

huangxz| | 2013-3-12 23:43 | 显示全部楼层
有inc r1,所以r1的值是0-0x0a变的

使用特权

评论回复
soul11201|  楼主 | 2013-3-13 00:13 | 显示全部楼层
该了以后还是出现问题,上面那两句话单步执行后,p2的值还是一直为00h,

使用特权

评论回复
soul11201|  楼主 | 2013-3-13 00:18 | 显示全部楼层
huangxz 发表于 2013-3-12 23:43
有inc r1,所以r1的值是0-0x0a变的

改了以后还是出现问题,上面那两句话单步执行后,p2的值还是一直为00h,查看code区r1很正常的指向了table的首地址。data的0f0h地址也就是a还是00一直没变好像mov a,@r1指令没有把,7eh赋值给a.不理解这里的原因。

使用特权

评论回复
soul11201|  楼主 | 2013-3-13 12:17 | 显示全部楼层
自己顶一下。

使用特权

评论回复
delin17| | 2013-3-13 13:50 | 显示全部楼层
注意看汇编指令。
mov a,@r1

这个命令应该只能取间接RAM的数据吧。
你的表存在程序空间里。

使用特权

评论回复
delin17| | 2013-3-13 13:52 | 显示全部楼层
应该是使用dptr指令。取程序地址的数据

使用特权

评论回复
IC采购哪里去| | 2013-3-13 14:22 | 显示全部楼层
又看到了汇编代码啊,记得考试前满脑子都是在些东西,现在也忘的差不多了,不好意思啊,估计是帮不了你了、!

使用特权

评论回复
lypd96| | 2013-3-13 19:16 | 显示全部楼层
应该这样:
org 0000h

ajmp main

org 0030h

main:


     mov dptr,#table   ;
     mov r1,#0
     loop:

           mov a,r1
           MOVC  A,@A+DPTR

           mov p2,a

           lcall Delay_650ms

           inc r1

           cjne r1,#0ah,loop

ajmp main




;延时

Delay_650ms:

         mov r7,#05h

         delay_1: mov r6,#0ffh

         delay_2: mov r5,#0ffh

         delay_3: djnz r5,delay_3

                  djnz r6,delay_2

                  djnz r7,delay_1

ret

;表格

table:

      db 7eh,44h,3dh,6dh,47h ;0 - 4

      db 6bh,7bh,4ch,7fh,6fh ;5 - 8

使用特权

评论回复
lypd96| | 2013-3-13 19:19 | 显示全部楼层
呵呵 楼主看看6楼的发言,再去仔细看指令表就应该可以明白原因了

使用特权

评论回复
谈的元| | 2013-3-13 21:31 | 显示全部楼层
MOV  a,@r1  ;a=常数r1,

楼主是不是多写了@,

楼主本意应该是:MOV  a,r1 ?????????

使用特权

评论回复
soul11201|  楼主 | 2013-3-13 21:44 | 显示全部楼层
lypd96 发表于 2013-3-13 19:16
应该这样:
org 0000h

正解哇,今天上午问了老师,刚改过来!thanks啊。呵呵。。。

使用特权

评论回复
soul11201|  楼主 | 2013-3-13 21:49 | 显示全部楼层
谈的元 发表于 2013-3-13 21:31
MOV  a,@r1  ;a=常数r1,

楼主是不是多写了@,

没有,指令用错了,mov a,@r1从片内数据存储器取得数据,而table存在了片内程序存储器应该用dptr类指令,唉。还是当时没理解透哈佛存储结构哇。。

使用特权

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

本版积分规则

10

主题

76

帖子

0

粉丝