PIC18FXXKXX 的奇怪问题

2020-02-09 09:24发布

如下的语句:
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)是正常的.
希望有条件的帮我测试一下.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
hfx1972
1楼-- · 2020-02-09 13:24
将while(1);改写成while(1){ NOP;NOP;NOP}就可以了。
zbcfscc
2楼-- · 2020-02-09 19:09
我怀疑是调试方法不对造成的。试试在要加断点的语句下面加一个Nop();然后断点设在Nop()那一行。
ddwl99
3楼-- · 2020-02-09 19:39
 精彩回答 2  元偷偷看……
wolfe
4楼-- · 2020-02-10 01:13
不好意思,最近在忙别的,手上的活也停了,..没上来这里看看

回复【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)是正常的.
希望有条件的帮我测试一下.

一周热门 更多>