keil c编程如何改变中断返回点

[复制链接]
1982|3
 楼主| LKZ89 发表于 2013-5-23 11:14 | 显示全部楼层 |阅读模式
用INT0中断后,想人为指定返回点,goto语句好像不行(从一接触C语言就告知要少用goto语句,所以也没有深入研究。试过如果在一个函数中同时用标号和goto后编译可以,但在主函数中设置标号,在中断函数中用goto返回就不行)。然后想在中断混编一段汇编来实现
#pragma asm
        POP DPH
        POP DPL
        MOVE DPTR,0800H//(乱填的,想编译后再填返回点的地址)
        PUSH DPL
        PUSH DPH
        RETI
#pragma endasm
但是编译没有成功,keil用这种方法混编要求已经上网解决了,但编译后还是提示
main.src(112): error A45: UNDEFINED SYMBOL (PASS-2)
main.src(563): error A45: UNDEFINED SYMBOL (PASS-2)
main.src(570): error A5: ILLEGAL USE OF A RESERVED WORD
main.src(582): error A9: SYNTAX ERROR
compiling ds18b20.c...
airwill 发表于 2013-5-23 12:16 | 显示全部楼层
其实不需要用 SRC 汇编.
INTRINS.H 有函数 _push_    ,_pop_     使用的.
我曾经在 <抢先式裸奔系统> 里这么干过, 用起来很正常, 没有什么问题.
去年的上海网友会上我还交流过这个东西, 这个**最后整理发表在 <单片机与嵌入式系统> 去年的第12期杂志上.
楼主可以去研究一下.
ayb_ice 发表于 2013-5-23 13:27 | 显示全部楼层
MOV DPTR,#0800H
pang7 发表于 2013-5-23 21:49 | 显示全部楼层
本质是改变pc指针与堆栈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

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