leon101010 发表于 2010-7-11 15:11:31

PM+ 中断中如何快速开全局中断?

例如如下程序
/* Uart接收出错中断 */
__interrupt void IntUartRxErr(void)
{
EI();
Encrypt.RxCnt = RXD1;                                 /* 假读 */
Encrypt.RxCnt = 0xff;                                 /* 命令出错 */
}
编译后汇编指令如下:
_IntUartRxErr   C1         PUSHAX
                717AFA   EI
                8E46       MOV   A,RXD1
                9F3FFC   MOV   !0FC3FH,A
                CF3FFCFF   MOV   !0FC3FH,#0FFH
                C0         POP   AX
                61FC       RETI
这段代码是进入中断服务程序后的第二条指令才开中断.
如何在进入中断服务程序后的第一条指令就开中断?

moon557 发表于 2010-7-25 15:39:10

EI()指令可以写在主程序中呀

jdjsxf 发表于 2010-7-27 17:39:53

我想你在中断里再打开中断的目的应该就是想中断嵌套,试想一下,如果你的现场还没保存完就被新的中断打断了,它还能返回吗?

yf_888 发表于 2010-9-16 21:27:33

中断现场的保护是隐含进行的,无需c代码干预

jdjsxf 发表于 2010-9-17 16:17:50

回复【3楼】yf_888 海上翼
---------------------------------------------------------------------

如果什么都是隐含执行的话,中断程序开始的那些PUSH还有什么意义?
你如果写过汇编语言的话,肯定写过PUSH阿。

wzyllgx 发表于 2010-9-17 17:00:50

NEC,那一个慢哦,做通信,头痛,要想快速开中断,可以这样,你的C不是写好了嘛,PM+可以生成汇编的,然后用汇编的来编译,不过你得修改一下,顺便也把你想要做的也做了。

huanghua 发表于 2010-9-20 17:35:05

中断现场的保护是隐含进行的,无需c代码干预

jdjsxf 发表于 2010-9-21 10:47:30

在此我忽然又想到了在学校时老师说的一句话:如果你开始使用汇编,对你以后使用C语言会有很大帮助,对你真正理解底层也会有很大帮助。对于一个只使用过C语言的人来讲,很多问题是理解不了的。

LearnNec 发表于 2010-12-7 18:53:27

二楼正解
页: [1]
查看完整版本: PM+ 中断中如何快速开全局中断?