新人~关于51单片机中断的一个小疑点
新人~关于51单片机中断的一个小问题我把51单片机的P3^3口也就是INT1,连着一个按键,我想按键按下LED灯走一
新人~关于51单片机中断的一个小问题
我把51单片机的P3^3口也就是INT1,连着一个按键,我想按键按下LED灯走一次马灯。(低电平触发)
现在中断执行什么的都没问题,但我想在中断例程结束前判断按键有没有放开,没放开的话,程序就停滞,那么问题来了,我一开始想直接判断P3^3口是否是0,如果是就循环,但我发现一点用都没有,然后我改变方法变成去判断中断标志位IE1是否为1,这下就有效果了,不知道为什么?求大家解答
这段是没有效果的中断代码(低电平触发):
void my_int1(void) interrupt 2
{
int i=0,scan=0xfe;
for(i=0;i<8;i++)
{
LED=scan;
scan=scan<<1|0x01;
delay(10);
}
while((P3^3)==0);
delay(10);
}
这段是有效果的中断代码(低电平触发)
void my_int1(void) interrupt 2
{
int i=0,scan=0xfe;
for(i=0;i<8;i++)
{
LED=scan;
scan=scan<<1|0x01;
delay(10);
}
while(IE1==1);
delay(10);
}
[最优解释]不给出答案。
什么是中断?中断比查询方式的优势是什么?中断函数的基本规则是什么? -- 从楼主的代码可以看到,你不懂中断。
while(1)
{
if(Key_Flag)
{
Key_Flag = 0;
//run_led(); --自己封装成函数
}
}
void my_int1(void) interrupt 2
{
IF1 = 0;
Key_Flag = 1;
}
你上面代码问题:
1、中断函数不简洁,中断里面while(键状态); -- 这个史无前例
中断里面延时函数,这个违背了中断的意义。
中断不清楚标志位,这个能出中断吗?
2、既然是中断,你一定是配置了电平变化中断或者是边沿触发中断,符合条件的动作出现,进中断一次,没有必要检测按键是否松开,画蛇添足。
3、LED操作,请封装成函数,调用。
[其他解释]这个,我觉得在中断外面做比较好。。。
中断里置一个标志比如:Isign == T;
main里
if Isign
//禁外中断
//等IO变位
//恢复标志
//开外中断
循环以上
[其他解释]人工置顶
[其他解释]万分感谢楼上两位高人给小弟的指点,你们太好了~~!!!