单片机/MCU论坛
直播中

纾寒

4年用户 15经验值
擅长:EDA/IC设计
私信 关注
[问答]

main函数中IF判断语句到底执行几次?用中断,就一次;不用就不断重复判断。

用中断:
#include
#define u16 unsigned int
#define u8 unsigned char
***it SW18=P3^3;
***it led7=P2^0;
***it led9=P2^1;
***it led4=P2^2;
u8 flag=0;
void delay ()
{
        u16 x,y;
        for(x=1000;x>0;x--)
                for(y=115;y>0;y--);
}
void int1 ()
{
        IT1=1;
        EX1=1;
        EA=1;
}
void main ()
{
        int1();
        if(flag)
        {
         while(1)
        {
                led7=0;
                delay();
                led7=1;
                led9=0;
                delay();
                led9=1;
                led4=0;
                delay();
                led4=1;
         }
         }
}
void int_()interrupt 2
{
          flag=1;
}
不用中断:
#include
#define uint unsigned int
***it LED9=P2^0;
***it LED10=P2^1;
***it LED8=P2^2;
***it LED4=P2^3;
***it LED7=P2^4;
***it k1=P3^2;
void delay(uint k)
{
uint i,j;
        for (i=0;i {
        for (j=0;j<121;j++)
        {;}
        }
}
void main (void)
{
        if(!k1)
        {
while(1)

        {
        LED9=0;
        delay(1000);       
        LED9=1;
        LED10=0;
        LED8=0;
        delay(1000);
        LED10=1;
        LED8=1;
        LED4=0;
        LED7=0;
        delay(1000);
        LED4=1;
  LED7=1;               
        }
        }       
}





回帖(2)

阿迪达斯123

2020-10-19 23:06:48

最佳答案

楼主,你这是要跟单片机比手速吗,单片机一上电,main函数就开始运行了,执行到if语句,flag=0;所以不执行里面的内容,main函数也就到头了,后面你进入中断令flag=1,也仅仅是令flag=1了,除非你手速够快使单片机执行到if语句之前按下开关
2 举报
  • 纾寒: 所以,不用中断的时候,为什么会重复判断呢?我用单片机 不论什么时候按键,都可以开启流水灯,但是中断就必须你说的比手速咯  为什么呢
  • 阿迪达斯123 回复 纾寒: 因为你不用中断的那个程序跑飞了!main函数不加while死循环程序执行完后不知道干什么就会乱跑,然后触发单片机软复位,所以你才会看到它会重复判断

阿信509

2020-10-20 16:02:57
请问你是怎么看出来他是重复判断的呢?
1 举报
  • 纾寒: 我在电脑上调试时,就是不断判断,从if判断,不满足,然后到结尾;然后又返回if判断,直到按下键;但是中断就判断一次,不满足就直接退出。
    我用单片机 不论什么时候按键,都可以开启流水灯,但是中断就必须你说的比手速咯

更多回帖

发帖
×
20
完善资料,
赚取积分