求助~单片机外中断1,程序进入死循环
时间:10-02
整理:3721RD
点击:
void out1() interrupt 2
{
if (!magswitch){
delay (5);
if (!magswitch){
led1 = ~ led1;
m ++ ;
if (m == 999999)
m = 0;
n ++ ;
while(!magswitch);
}
}
}
这是自己写的程序的一部分,单片机外中断1引脚外接干簧管,低电平触发,用magswitch代表干簧管的通断,干簧管通断时,程序基本能正常运行,但是有时程序直接就停在while(!magswitch)这里,应该如何改进呢,望高人指点,小弟刚学单片机,一些地方不懂
{
if (!magswitch){
delay (5);
if (!magswitch){
led1 = ~ led1;
m ++ ;
if (m == 999999)
m = 0;
n ++ ;
while(!magswitch);
}
}
}
这是自己写的程序的一部分,单片机外中断1引脚外接干簧管,低电平触发,用magswitch代表干簧管的通断,干簧管通断时,程序基本能正常运行,但是有时程序直接就停在while(!magswitch)这里,应该如何改进呢,望高人指点,小弟刚学单片机,一些地方不懂
while(!magswitch)为单条语句死循环,当你通低电平时,while为真,一直在这条语句循环。有错的地方望高手指正
對我來說
太難了~~
我是汇编高手,但是c不懂
对,我知道问题出在这里,我试着将程序改为
while(!magswitch){
delay(200);
magswitch = 1;
}
也就是同低电平以后,稍微延时将magswitch改为高电平,但效果还是一样,基本上陷入死循环,后来想到,虽然软件将magswitch 置为高电平,但干簧管还处于接通的状态,所以程序仍处于死循环中
。
if (magswitch==0)
delay (5);
if (magswitch==0)
{
led1 = ~ led1;
m ++ ;
if (m == 999999)
m = 0;
n ++ ;
while(!magswitch);
}
不好使,呵呵,不过还是谢谢你
if (magswitch==0)
delay (5);
if (magswitch==0)
led1 = ~ led1;
m ++ ;
if (m == 999999)
m = 0;
n ++ ;
while(!magswitch);
最好是把全部程序都弄出来,也有可能是硬件的问题!