请教高手为什么编译没问题运行出错呢

[复制链接]
3318|17
 楼主| zx4798 发表于 2010-10-15 00:55 | 显示全部楼层 |阅读模式
本帖最后由 zx4798 于 2010-10-15 08:09 编辑

ORG 0000H
START: LJMP MAIN
        ORG 0030H
MAIN: MOV DPTR,#7FFFH
      MOV A,#3FH
LOOP: MOVX @DPTR,A
JNB P1.0,INCD
JNB PI.2,DECD
SJMP LOOP
INCD: ADD A,#20H
CJNE A,#0E0H,LOOP
MOV A,#20H
SJMP LOOP
DECD: CLR
SUBB A,#20H
CJNE A,#00H,LOOP
MOV A,#20H
SJMP LOOP
END
这个#7FFFH不理解,然后图中p0.0~P0.7为什么会有电平啊哪来得
谢了

本帖子中包含更多资源

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

×
xinxi 发表于 2010-10-15 01:46 | 显示全部楼层
本帖最后由 xinxi 于 2010-10-15 02:02 编辑

ORG 0000H
START: LJMP MAIN
        ORG 0030H
MAIN: MOV DPTR,#7FFFH  ;装入7fffh,用于选中DAC0832
      MOV A,#3FH
LOOP: MOVX @DPTR,A    ;把A内容 送到 DAC0832
JNB P1.0,INCD    ;检测p1.0   为0则跳转
JNB PI.2,DECD  ;检测p1.2   为0则跳转
SJMP LOOP       ;循环
INCD: ADD A,#20H  ;A加立即数20h,结果为5fh(头次循环),因为前面 累加器已经是3f了,
CJNE A,#0E0H,LOOP  ;即使经过n次循环,此条指令永远不会相等(低位肯定是F),直接跳转到 loop
MOV A,#20H  
SJMP LOOP
DECD: CLR     ;此条指令错误,缺少参数,整个汇编失败,楼主说的编译没问题是骗人的哦,不好的哦
SUBB A,#20H
CJNE A,#00H,LOOP
MOV A,#20H
SJMP LOOP
END
 楼主| zx4798 发表于 2010-10-15 07:44 | 显示全部楼层
装入7fffh,用于选中DAC0832,为什么要用7ffffh选呢
是CLR C,不过在Proteus的确是bulid ok,木有骗人
 楼主| zx4798 发表于 2010-10-15 07:54 | 显示全部楼层
问题补充:他怎么实现加速处理的呢
 楼主| zx4798 发表于 2010-10-15 07:59 | 显示全部楼层
[img][/img]
zjswuyunbo 发表于 2010-10-15 08:35 | 显示全部楼层
用什么编译?proteus?
用keil试试,
proteus做编译貌似不专业
 楼主| zx4798 发表于 2010-10-15 09:19 | 显示全部楼层
噢噢 不过我的问题呢没回答啊
aihe 发表于 2010-10-15 10:45 | 显示全部楼层
因为你操作了外部存储器
DAC0832你当成外部存储器来使
P0口是数据/地址复用线
 楼主| zx4798 发表于 2010-10-15 15:33 | 显示全部楼层
详细点 可以吗 谢谢
peigang 发表于 2010-10-15 16:05 | 显示全部楼层
你往DAC0832里写的数越大,输出越大。转速越快。
你的程序有问题。
 楼主| zx4798 发表于 2010-10-15 16:33 | 显示全部楼层
哦  懂了一点点
能指出问题吗
谢谢
 楼主| zx4798 发表于 2010-10-15 16:36 | 显示全部楼层
请问#7FFFH数字是怎么来的?和单片机引脚端口到底有什么联系?请高人指点,不胜感激。
continue_ 发表于 2010-10-15 16:59 | 显示全部楼层
这个很简单,应该是0832作为外设连接到,占用存储器地址,#7fff  其实只是保证访问时cs那引脚为低电平,看样子只要保证a15为0 其他的数也都可以
xinxi 发表于 2010-10-15 17:37 | 显示全部楼层
12# zx4798

因为0832的 cs 引脚,接在了 单片机的 a15 地址线了,为了选中(激活)0832,所以a15必须为低电平0,,所以在输出地址(movx)的时候,必须保证最高比特位为0,因此 这里的这个DPTR 的取值可以在0000-07FFh 之间的任意一个,,,至于这里 为什么用7FFF,这可能和最初编程人员的喜好,性格,口味,等 ,以及系统其它需求有关。单片机又不是人脑,你必须给个确定的数值给他,,你总不能告诉单片机说:只要a15为0就可以了,其它你看着办吧,随便输 没关系的。
 楼主| zx4798 发表于 2010-10-15 19:07 | 显示全部楼层
噢噢终于弄清楚了
感谢各位的指导啊
 楼主| zx4798 发表于 2010-10-15 23:08 | 显示全部楼层
再问下 为什么用dptr呢
fjx120666 发表于 2010-10-15 23:48 | 显示全部楼层
highgear 发表于 2010-10-15 23:57 | 显示全部楼层
8楼, 14楼不是说了么, 用 dptr 为了用 movx 实现外部写数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

53

帖子

1

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