如下的语句:
void main(void)
{
INTCONbits.GIE = 1;//这句执行完,GIE=0
INTCONbits.PEIE =1;//这句执行完,GIE=1,PEIE=0
INTCONbits.GIE = 0;//这句执行完,GIE=1,PEIE=1
INTCONbits.PEIE =0;//这句执行完 GIE=1,PEIE=1
while(1);//GIE,PEIE不变,还是为1
}
反汇编:
117: INTCONbits.GIE = 1;
0490 8EF2 BSF 0xff2, 0x7, ACCESS
118: INTCONbits.PEIE =1;
0492 8CF2 BSF 0xff2, 0x6, ACCESS
119: INTCONbits.GIE = 0;
0494 9EF2 BCF 0xff2, 0x7, ACCESS
120: INTCONbits.PEIE =0;
0496 9CF2 BCF 0xff2, 0x6, ACCESS
大家手上有条件的测试一下,在PIC18F26K20,PIC18F46K20上测试过,都是一样的.
PS:
编译器MPLAB C18;
用软件仿真(MPLAB SIM)是正常的.
希望有条件的帮我测试一下.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
回复【3楼】ddwl99
我在4520上试了。没有你说的问题。
我是一个断点一个断点打的!
-----------------------------------------------------------------------
我也是一个断点一个断点做的.4520跟46K20(45K20)是否有区别?
可能是我描述的不够清楚,把帖改了一下,
回复【1楼】hfx1972
将while(1);改写成while(1){ nop;nop;nop}就可以了。
-----------------------------------------------------------------------
没区别吧,,,
=======================================================================
如下的语句:
void main(void)
{
INTCONbits.GIE = 1;
INTCONbits.PEIE =1;//光标指向此处 GIE=0
INTCONbits.GIE = 0;//光标指向此处 GIE=1,PEIE=0
INTCONbits.PEIE =0;//光标指向此处 GIE=1,PEIE=1
while(1); //光标指向此处 全速后停止 GIE=1,PEIE=1
}
问题是,反应不但慢半拍,结果也不对,最后的结果应该都是0
大家手上有条件的测试一下,在PIC18F26K20,PIC18F46K20上测试过,都是一样的.
PS:
编译器MPLAB C18;
用软件仿真(MPLAB SIM)是正常的.
希望有条件的帮我测试一下.
一周热门 更多>