关于DPTR的问题

[复制链接]
9062|16
 楼主| idly 发表于 2010-3-9 00:16 | 显示全部楼层 |阅读模式
ov, hm, AC, AI, RAM
对于DPTR的理解,就是用它来寻址片外RAM/程序存储器;今看到有一些C语言经过KEIL转汇编后有看见如MOV DPTR,#0EH      MOVX A,@DPTR的语句
疑问1:(51单片机、EA=1)DPTR的赋值不是应该大于0x0FFF的吗?
疑问2:假设上面的赋值可以(等待帮助解释-_-?);我写了个下面的程序;
P1接LED灯,I/O低电平亮

直接如:MOV P1,#0F0H灯是会亮的;
ORG 0000H

MAIN:  MOV        A,#0F0H
          MOV        DPTR,#0050H
          MOVX      @DPTR,A
          CLR         A
          MOVX      A,@DPTR
          MOV        P1,A
         ;MOV       C,ACC.0
         ;MOV       P1.0,C
          SJMP MAIN
          END
灯就是不亮?
杨工 发表于 2010-3-9 02:47 | 显示全部楼层
片外RAM和片内RAM是不同的地址空间,所以片外RAM地址从0开始。
我怀疑你没有接好片外RAM
MOVX      A,@DPTR  //导致A=0FFH
否则灯应该亮的。
原野之狼 发表于 2010-3-9 08:37 | 显示全部楼层
片外地址从0x0000开始
翻一下单片机关于片外扩展的章节
你的程序有点奇怪 不知道你要实现什么
 楼主| idly 发表于 2010-3-9 08:44 | 显示全部楼层
我的目的是先验证一下:我没有外接外部RAM,但是这样的语句是否可以实现。也就是感性的看看结果。因为之前看过的程序
 楼主| idly 发表于 2010-3-9 08:45 | 显示全部楼层
我的目的是先验证一下:我没有外接外部RAM,但是这样的语句是否可以实现。也就是感性的看看结果。
原野之狼 发表于 2010-3-9 08:52 | 显示全部楼层
那查看下板子就差不多了呀
 楼主| idly 发表于 2010-3-9 08:56 | 显示全部楼层
假设没有外接RAM,这样的语句是无法实现的对吧?
冷漠 发表于 2010-3-9 10:10 | 显示全部楼层
谁说灯不亮?没有外部XDATA,一样做实验。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| idly 发表于 2010-3-9 10:15 | 显示全部楼层
但是我在板上跑,灯就是没有亮起来
 楼主| idly 发表于 2010-3-9 10:20 | 显示全部楼层
我的疑问就是,当没有外接RAM的时候,使用DPTR是否会使用内部RAM;如上面冷漠的调试结果。查看对应的寄存器。都会有相应的变化。但是在板上就是没有亮LED灯。。。怎么回事呢?
dwq175 发表于 2010-3-9 10:38 | 显示全部楼层
内部RAM是使用直接或者R0,R1访问的。
如果MCU有内部XDATA,需要打开XDATA,DPTR就可以访问了。
冷漠 发表于 2010-3-9 10:51 | 显示全部楼层
这不是很简单的道理吗:如果你没有外部XDATA,却仍然使用了MOVX  A,@DPTR 指令,那么由于数据总线悬空,读取的数据是0xFF,——正如2楼杨工所说,所以灯不会亮。
 楼主| idly 发表于 2010-3-9 11:04 | 显示全部楼层
但是用KEIL调试的时候没有外部XDATA,却仍然使用了MOVX  A,@DPTR 指令;A还是有值F0H
 楼主| idly 发表于 2010-3-9 11:05 | 显示全部楼层
如你上面的调试面板所示:借鉴你的图了。。。。。呵
冷漠 发表于 2010-3-9 11:30 | 显示全部楼层
Keil调试是软件模拟—simulator。
谁说Keil调试时没有外部XDATA?Memory窗口Address栏不是分明选择的X:0000吗?

你还可以选择C:0000/d:00/P:0000看看有什么不同。

要让板上有XDATA,可以选用那些带内部XDATA的芯片,像89C51RD2之类。
 楼主| idly 发表于 2010-3-9 11:56 | 显示全部楼层
明白咯。TKS
peigang 发表于 2010-3-9 20:38 | 显示全部楼层
没有片外RAM
有可能跑飞了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

20

帖子

0

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