打印

程序在这里卡住,编译通不过了,请帮忙看一看......

[复制链接]
3356|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
89cpu|  楼主 | 2008-1-12 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一本书上的汇编程序, 是一段ERR(出错处理) 程序;
但是,程序在这里卡住,编译通不过了,请帮忙看一看......

以下是程序:
......

;****************************
;ERR(出错处理) 程序    ;
;****************************

 ERR:CLR EA                 ;关中断
     MOV DPTR, #ERR1        ;准备返回地址
     PUSH DPL               ;压栈
     PUSH DPH               ;
     RETI                   ;中断返回
ERR1:MOV 56H,#0AAH          ;建立上电标志(出错标志)
     MOV 57H, #55H
     MOV A,#00H             ;准备返回地址
     PUSH A                 ;压栈
     PUSH  A
     RETI                   ;中断返回
     NOP
     NOP
     LJMP ERR               ;软件陷阱

     ORG 07FAH
     NOP
     NOP
     NOP
     LJMP ERR               ;软件陷阱

     END                    ;程序结束

--------------------------------------------

谢谢!

2008-01-12  18:45

相关帖子

沙发
89cpu|  楼主 | 2008-1-12 18:48 | 只看该作者

是北京航空航天大学的“51系列单片机设计实例”一书。

是一段软件陷阱程序。
是该书附带的光盘里的程序。




使用特权

评论回复
板凳
89cpu|  楼主 | 2008-1-12 19:18 | 只看该作者

即使去掉一句PUSH A也不行的。还是通不过。

PUSH A                 ;压栈
PUSH A

*-*******************************
即使去掉一句PUSH A也不行的。还是通不过。

使用特权

评论回复
地板
5880527| | 2008-1-12 19:30 | 只看该作者

呵呵,作者竟然犯这样的低级错误,还陷阱呢,真服了

使用特权

评论回复
5
89cpu|  楼主 | 2008-1-12 19:49 | 只看该作者

5880527,你好!错在哪里了呢?

我用KEIL编译时发现的。
通不过。

低级错误?请指出。
我没编过软件陷阱程序。只是在书上看到。

我是想按那书上的程序做出个试验板的。
是关于倒计时的一个程序。

谢谢!

使用特权

评论回复
6
5880527| | 2008-1-12 19:55 | 只看该作者

把PUSH A改成PUSH ACC就解决了

使用特权

评论回复
7
computer00| | 2008-1-12 19:57 | 只看该作者

哈哈,A是寄存器...不能push...ACC是地址,才能push...

使用特权

评论回复
8
89cpu|  楼主 | 2008-1-12 22:20 | 只看该作者

哎!我真要找堵墙撞死得了!!

可是! 那书的作者也太那个了吧?!
还随书附带光盘呢!

谢谢!

使用特权

评论回复
9
89cpu|  楼主 | 2008-1-12 22:25 | 只看该作者

这书的作者一定要暴光!

我随后拍了照片上来! 

使用特权

评论回复
10
程序匠人| | 2008-1-12 22:38 | 只看该作者

先别急着骂作者

如果这只是其中一段程序,那么也许作者在此程序之前,有过预定义之类的。把ACC预定义成A。或者也有可能作者用的编译器和你不一样。

先搞清楚再说。

使用特权

评论回复
11
hotpower| | 2008-1-12 22:43 | 只看该作者

哈哈~~~匠人说不过去~~~肯定是错了~~~没人用A替代ACC的~~~

使用特权

评论回复
12
程序匠人| | 2008-1-12 23:10 | 只看该作者

不过也是,匠人查了一下以前写的51程序也是用acc

;**************************************
;脉冲输入中断
;**************************************
INT1_MC:PUSH    ACC
        PUSH    PSW
        LCALL   MC_INC                  ;脉冲+1
        POP     PSW
        POP     ACC
        RETI
------------------------------------------
确实是用“PUSH    ACC”

使用特权

评论回复
13
hotpower| | 2008-1-12 23:23 | 只看该作者

哈哈~~~就没有PUSH/POP A这条指令~~~

使用特权

评论回复
14
89cpu|  楼主 | 2008-1-13 00:00 | 只看该作者

那么是不是不是说那两句PUSH A都改成PUSH ACC就行了?

为什么用两句PUSH  A啊?

改后是:
PUSH  ACC
PUSH  ACC吗?


使用特权

评论回复
15
89cpu|  楼主 | 2008-1-13 00:04 | 只看该作者

预定义(伪定义)里没发现有关于把ACC预定义成A的语句啊?!

程序匠人 发表于 2008-1-12 22:38 侃单片机 ←返回版面    

10楼: 先别急着骂作者 

如果这只是其中一段程序,那么也许作者在此程序之前,有过预定义之类的。把ACC预定义成A。或者也有可能作者用的编译器和你不一样。

先搞清楚再说。 
 
*-*-*-***************************************************************
预定义(伪定义)里没发现有关于把ACC预定义成A的语句.
是一个错误了.
对出学者来说, 这无疑是致命的.
还好现在有了网络,有了21IC的这么多的老师,多谢!

使用特权

评论回复
16
89cpu|  楼主 | 2008-1-13 00:20 | 只看该作者

但是: 他们附带的光盘里,有HEX文件的啊???!!!

但是: 他们附带的光盘里,有HEX文件的啊.

按他们的那程序, 怎么能得出HEX文件的呢?

疑惑!

使用特权

评论回复
17
程序匠人| | 2008-1-13 00:22 | 只看该作者

所以匠人让你先别急着骂作者嘛

一般这种代码都是经过验证的。

也许是印刷时的疏漏,也许还有别的可能。

使用特权

评论回复
18
程序匠人| | 2008-1-13 00:30 | 只看该作者

能够从书中发现错误也是很不容易的

需要细心和运气。匠人看了那么多书,从来都是囫囵吞枣,没有发现过一次错误。惭愧!

使用特权

评论回复
19
89cpu|  楼主 | 2008-1-13 00:31 | 只看该作者

那么正确的应该是:

我不是急着骂作者啊!
关键是买来了这书, 按着书上的程序又整不出来. 着急啊!

最终结果:
是不是说把那两句PUSH A都改成PUSH  ACC就行了呢?

我改了后是可以通过KEIL的编译了.但需要用两句么?

使用特权

评论回复
20
89cpu|  楼主 | 2008-1-13 00:42 | 只看该作者

程序匠人,我在好几本单片机的书上发现了错误.

包括人民邮电出版社的[][51单片机开发入门与典型实例]].
发了邮件提醒出版社及作者,人家的回复都是无所谓的样子啊!!!!

我不在乎买他们这本书的钱,我又不是靠这个混饭吃的!

但是: 
我担心的是:他们这样会害人啊!至少也是耽误了别人的时间和精力啊!
因为:别人是掏腰包买了他们出版社的东西, 却发现是个滥货!

这个可真是不应该啊!

J国, 你什么能多一些责任感呢?!





使用特权

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

本版积分规则

21

主题

184

帖子

0

粉丝