打印

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

[复制链接]
2306|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 | 只看该作者
问题补充:他怎么实现加速处理的呢

使用特权

评论回复
5
zx4798|  楼主 | 2010-10-15 07:59 | 只看该作者
[img][/img]

使用特权

评论回复
6
zjswuyunbo| | 2010-10-15 08:35 | 只看该作者
用什么编译?proteus?
用keil试试,
proteus做编译貌似不专业

使用特权

评论回复
7
zx4798|  楼主 | 2010-10-15 09:19 | 只看该作者
噢噢 不过我的问题呢没回答啊

使用特权

评论回复
8
aihe| | 2010-10-15 10:45 | 只看该作者
因为你操作了外部存储器
DAC0832你当成外部存储器来使
P0口是数据/地址复用线

使用特权

评论回复
9
zx4798|  楼主 | 2010-10-15 15:33 | 只看该作者
详细点 可以吗 谢谢

使用特权

评论回复
10
peigang| | 2010-10-15 16:05 | 只看该作者
你往DAC0832里写的数越大,输出越大。转速越快。
你的程序有问题。

使用特权

评论回复
11
zx4798|  楼主 | 2010-10-15 16:33 | 只看该作者
哦  懂了一点点
能指出问题吗
谢谢

使用特权

评论回复
12
zx4798|  楼主 | 2010-10-15 16:36 | 只看该作者
请问#7FFFH数字是怎么来的?和单片机引脚端口到底有什么联系?请高人指点,不胜感激。

使用特权

评论回复
13
continue_| | 2010-10-15 16:59 | 只看该作者
这个很简单,应该是0832作为外设连接到,占用存储器地址,#7fff  其实只是保证访问时cs那引脚为低电平,看样子只要保证a15为0 其他的数也都可以

使用特权

评论回复
14
xinxi| | 2010-10-15 17:37 | 只看该作者
12# zx4798

因为0832的 cs 引脚,接在了 单片机的 a15 地址线了,为了选中(激活)0832,所以a15必须为低电平0,,所以在输出地址(movx)的时候,必须保证最高比特位为0,因此 这里的这个DPTR 的取值可以在0000-07FFh 之间的任意一个,,,至于这里 为什么用7FFF,这可能和最初编程人员的喜好,性格,口味,等 ,以及系统其它需求有关。单片机又不是人脑,你必须给个确定的数值给他,,你总不能告诉单片机说:只要a15为0就可以了,其它你看着办吧,随便输 没关系的。

使用特权

评论回复
15
zx4798|  楼主 | 2010-10-15 19:07 | 只看该作者
噢噢终于弄清楚了
感谢各位的指导啊

使用特权

评论回复
16
zx4798|  楼主 | 2010-10-15 23:08 | 只看该作者
再问下 为什么用dptr呢

使用特权

评论回复
17
fjx120666| | 2010-10-15 23:48 | 只看该作者
:)

使用特权

评论回复
18
highgear| | 2010-10-15 23:57 | 只看该作者
8楼, 14楼不是说了么, 用 dptr 为了用 movx 实现外部写数据。

使用特权

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

本版积分规则

0

主题

53

帖子

1

粉丝