单片机汇编问题

[复制链接]
4326|12
 楼主| soul11201 发表于 2013-3-12 23:38 | 显示全部楼层 |阅读模式

  1. ;数码管循环显示从0到9
  2. org 0000h
  3. ajmp main
  4. org 0030h
  5. main:
  6.      ;mov dptr,@table
  7.      ;mov dptr,#table   ;片内数据传输不能用dptr
  8.      mov r1,#table
  9.      loop:
  10.            mov a,@r1
  11.            mov p2,a
  12.            lcall Delay_650ms
  13.            inc r1
  14.            cjne r1,#0ah,loop
  15. ajmp main
  16. ;ajmp loop

  17. ;延时
  18. Delay_650ms:
  19.          mov r7,#05h
  20.          delay_1: mov r6,#0ffh
  21.          delay_2: mov r5,#0ffh
  22.          delay_3: djnz r5,delay_3
  23.                   djnz r6,delay_2
  24.                   djnz r7,delay_1
  25. ret
  26. ;表格
  27. table:
  28.       db 7eh,44h,3dh,6dh,47h ;0 - 4
  29.       db 6bh,7bh,4ch,7fh,6fh ;5 - 8


问题出现在:
  1. mov a,@r1
  2. 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

粉丝
快速回复 在线客服 返回列表 返回顶部