您现在所在的是:

单片机论坛

回帖:6个,阅读:1568 [上一页] [1] [下一页]
* 帖子主题:

[求助]关于dptr

913
flead
文章数:5
年度积分:50
历史总积分:913
注册时间:2005/7/27
发站内信
发表于:2005/7/27 15:26:00
#0楼

MAIN:  MOV   SP,#60H
      SETB  EX1
      MOV   DPTR,#5FFFH
      MOV   A,#0DCH
      MOVX  @DPTR,A
LP:    MOVX  A,@DPTR
      JB    ACC.7,LP
      MOV   A,#00H

我想问一下大虾,运行LP:    MOVX  A,@DPTR 这句代码后,为什么A中的值不是DCH



[此贴子已经被作者于2005-7-27 16:19:13编辑过]
913
flead
文章数:5
年度积分:50
历史总积分:913
注册时间:2005/7/27
发站内信
发表于:2005/7/27 15:28:00
#1楼
LP:    MOVX  A,@DPTR
      JB    ACC.7,LP

这两句话不是死循环吗?

晕了,晕了
913
flead
文章数:5
年度积分:50
历史总积分:913
注册时间:2005/7/27
发站内信
发表于:2005/7/27 15:29:00
#2楼
在线等回复,大虾帮忙。
这个程序是正确的,原程序如下。
      ORG   0
      LJMP  MAIN
      ORG   0013H
      LJMP  INT1P
      ORG   0030H
MAIN:  MOV   SP,#60H
      SETB  EX1
      MOV   DPTR,#5FFFH
      MOV   A,#0DCH
      MOVX  @DPTR,A
LP:    MOVX  A,@DPTR
      JB    ACC.7,LP
      MOV   A,#00H
      MOVX  @DPTR,A
      MOV   A,#34H
      MOVX  @DPTR,A
      CLR   IT1
      SETB  EA      
      CLR   12H
MLF0:  LCALL CDIR
      MOV   R1,#50H
      MOV   R7,#6
      MOV   R0,#3EH      
MLF2:  LCALL KEYI
      LCALL DATAM
      PUSH  PSW
      SETB  PSW.4
      LCALL DISY
      POP   PSW
      DJNZ  R7,MLF2
      LCALL DELAY
      LCALL DELAY      
      LCALL DEAL
      LCALL TRANS
MLP40: LCALL DISY
      LCALL AKSS
      JZ    MLP40
      LJMP  MLF0
;****************************
DATAM: MOV   @R1,A
      MOV   @R0,A
      INC   R1
      DEC   R0
      RET      
DEAL:  CLR   00H
      MOV   R7,#6
      MOV   R0,#50H
      MOV   A,@R0
LOOP:  INC   R0
      MOV   R2,A
      SUBB  A,@R0
      MOV   A,R2
      JC    NEXT
      SETB  00H
      XCH   A,@R0
      DEC   R0
      XCH   A,@R0
      INC   R0
NEXT:  MOV   A,@R0
      DJNZ  R7,LOOP
      JB    00H,DEAL      
      RET
TRANS: MOV   R0,#3EH
      MOV   R1,#50H
      MOV   R7,#6
LOP0:  MOV   A,@R1
      MOV   @R0,A
      INC   R1
      DEC   R0
      DJNZ  R7,LOP0
      RET      
;***************************
INT1P: PUSH  ACC
      PUSH  DPH
      PUSH  DPL
      CLR   EA
      MOV   A,#40H
      MOV   DPTR,#5FFFH
      MOVX  @DPTR,A
      MOV   DPTR,#5EFFH
      MOVX  A,@DPTR
      MOV   27H,A
      SETB  12H
      SETB  EA
      POP   DPL
      POP   DPH
      POP   ACC
      RETI
;*****************************
KEYI:  JNB   12H,KEYI
      MOV   A,27H
      ANL   A,#0FH
      CLR   12H
      RET
CDIR:  MOV   R0,#39H
      MOV   R7,#6
CDIQ:  MOV   @R0,#17H
      INC   R0
      DJNZ  R7,CDIQ
      RET
AKSS:  JNB   12H,AKSS
      RET
DISY:  MOV   R2,#06H
      MOV   A,#92H
      MOV   DPTR,#5FFFH
      MOVX  @DPTR,A
      MOV   R0,#39H
TY11:  MOV   A,@R0
      MOV   DPTR,#TABL
      MOVC  A,@A+DPTR
      MOV   DPTR,#5EFFH
      MOVX  @DPTR,A
      INC   R0
      DJNZ  R2,TY11
      RET
DELAY: MOV   R6,#10H
      MOV   R7,#10H
DEL:   DJNZ  R6,$
      DJNZ  R7,DEL
      RET
TABL:  DB 0C0H,0F9H,0A4H,0B0H,99H
      DB 92H,82H,0F8H,80H,90H,88H
      DB 83H,0C6H,0A1H,86H,8EH,8CH
      DB 0C1H,89H,0C7H,0BFH,91H
      DB 00H,0FFH
      END
913
flead
文章数:5
年度积分:50
历史总积分:913
注册时间:2005/7/27
发站内信
发表于:2005/7/27 16:05:00
#3楼
有没有人啊,是不是大虾都不在啊。
999
wys721030
文章数:46
年度积分:50
历史总积分:999
注册时间:2004/11/6
发站内信
发表于:2005/7/29 14:28:00
#4楼
在没有RAM,或RAM地址范围不包括#5FFFH,那么在MOVX @DPTR,A时并没有内存资源将数据写下,当然在调出该地址的数据时会出错!也就是说该程序检查到#5FFF地址的内存写(#0DCH ACC.7为1)未出错时将陷入死循环......
除非该地址映射的实际上是特殊功能块(如定时器,串行口等)或IO接口用于检测外电路状态(如按键按下,收到数据等等),要是那样的话该地址读回的数据就更有可能不是你所写入的


[此贴子已经被作者于2005-7-29 14:33:20编辑过]
1052
luorizhou_ok
文章数:55
年度积分:50
历史总积分:1052
注册时间:2005/9/18
发站内信
发表于:2005/10/2 19:09:00
#5楼
那样当然不行了,如果单片机不扩展外存储器,实际上5fffh这个地址在单片机内是找不到的,
读到的值就会是个随机值,你的程序没有问题,但前提是5fffh这个地址必须对应某个I/O,即所谓的“内存映射I/O”机理。
923
xhlin2004
文章数:10
年度积分:50
历史总积分:923
注册时间:2005/10/3
发站内信
发表于:2005/10/3 9:00:00
#6楼
I agree the former.

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004