本帖最后由 huandaczq 于 2019-6-20 23:30 编辑
设置了RB0下降沿中断。且暂时关闭了RB0中断使能.INT0CONbits.INT0IE=0
void key_pressed() //RB0端口对应的按钮被按下,每次RB0对应的按钮被按下RB0端口被会拉低
{
while (check==0)
{
if (PORTBbits.RB0==0)
{
delay();
if (PORTBbits.RB0==0)
{ while(!PORTBbits.RB0)
delay();
check=1;}
}
}
}
RB0中断:
{
display(3); //3代表闪3次。同理display(4)代表闪4次.
}
-----------------------------方便阅读的分割线----------------------------
IO口什么设置之类的就不放了,变量(比如上面的check)等初值也不放了。这里统一当init()一笔带过
main()
{
1. init();
2. key_pressed(); //这一条一定要记住,问题就是这一条出了问题。
3. delay(8888); // 8888是一个虚数,确保出来等待了N秒;
4. INT0CONbits.INT0IE=1; //开启PORTB的下降沿中断。
5. while(1);
}
-----------------------------以下是问题分割线--------------------
【比较1】:执行以上5条指令的情况下,12345,在执行完第四条以后,直接进入了中断,闪了3下.然而并未按下RB0对应的按钮。
之前在第二条按下的时候,中断使能INT0IE为0。所以没有进入中断。那么为什么在执行完第四条以后,立刻进入了中断
【比较2】:在去掉第二条指令的情况下,1345这样去执行。执行完4以后,不进入中断,没有闪3下。
在第5条死循环的时候,按下RB0对应的按钮,进入中断。
【问题】:为什么没有key_pressed()的情况下,不会自动进入中断,然而有key_pressed()的情况下会自动进入中断。
最后PS一句:RB0外接电路只有一个按钮。且在3-4之间加过指令if (PORTBbits.RB0==1) { display(1);}
说明在开启中断之前,RB0端口一直都是高电平没有错误的。然而一开启使能int0ie,那么问题就想不明白了。同样的代码,只要没有第2条,就 不会自动进入中断。
|