中断保护问题
当我在80中断时候__interrupt void Int_Tm80(void){ //253.89ms
//PUSH PSW;
TMIF80=0; //;clear flag
PLED2^=1;
//POP PSW;
}
程序ASM文件生成的是:
$DGL 0,10
set1 CY ; 1, 2
bf P12.3,$?L0039 ; 4,10
not1 CY ; 1, 2
?L0039:
bnc $?L0040 ; 2, 6
set1 P12.3 ; 3, 6
br $?L0041 ; 2, 6
?L0040:
clr1 P12.3 ; 3, 6
?L0041:
这个过程中改变了PSW,但是中断过程中没有自动保护PSW,
请问:是不是要自己保护PSW??用C语言如何表示。我只会用汇编。 似乎只要在中断中加一句PUSH=初始值 就好了! c编译器对函数(包括中断函数)的断点和现场的保护是隐含进行的,可以不必考虑内部寄存器的保护问题,至于为什么汇编代码没有对PSW压栈保护,可以多换几个方法来观察。1楼所说的在线汇编压栈,这样做是不妥的,一是没有意义,二是可能会造成意想不到的灾难,因为c编译器用户对栈的操作时封闭禁止的
页:
[1]