单片机学习过程中遇到的玄学问题

在单片机中我用if(n==2)
程序不进入if,而用if(n>1),就可以进入程序,
还有一次for(i=3;i>0;i--)程序不进入,
而for(i=3;i>-1;i--)就可以进入程序。
eg1
void main(void)
{

   init_t0();
    EA=1;
    IT0=1;
    EX0=1;
    EX1 = 1;
    IT1 = 1;
    InitLCD1602();

LcdShowStr(0, 1, str2);     //液晶初始化显示

LcdShowStr(0, 0, str1);
// P0=0xff;

while(1)
{     
    unsigned int i; 


   forward(L,R);


    if((P1&0X60)==0x60)         //    0110 0000
       {
       flag++;//    P0=P1;
       delay(40);
       }

//

// if((P1&0x90)==0x80) // 1001 0000 1000 0000 向右转
// {
// for(i=0;i<4;i--)
// forward(50,40);
// }
//

// if((P1&0x10)==0x10) // 1001 0000 0001 0000 向左转
// {
// for(i=0;i<4;i--)
// forward(40,50);
// }
//

        if(flag==1) 
        {
         m=1;
         //led0=0;

         continue;
         }

        if(flag==2)
        {

        //led1=0;
         continue;
         }
    //  break;    //遇到第一条线,和第二条线无意义
        if(flag==3)
        {
        //led2=0;
        forward(2,3);
        continue;
        }
        if(flag==4)
        {
    //  led3=0;
        forward(30,34);
        continue;
        }
        if(flag==5)
        {
    //  led4=0;
        continue;
        }

        if(flag==6)
        {
           delay(100);
            n++;
        if(n>1)
          {
           m=0;
           stop();
           while(1);
          }
    //  led5=0;

        for(i=0;i<50000;i++)
        stop(); 
        //P0=0xff;
        for(i=0;i<4300;i++)
        {zhuan();
        flag=0;
        }
        for(i=0;i<50000;i++)
        stop(); 
       // P0=0xff;
        }

}

}
图片说明

可能编译器觉得n在逻辑上不会等于2,被优化掉了

调试下程序,>1不一定是2啊,也可能是3 4 5等等。

直接用keil单步调试,调出变量n的值,看在if之前n的状态。或者看对应的汇编那一步是怎么执行的。

n值 初始化成0了没有

对于n,如果它是一个定时器,或者别的信号控制器反馈的值,由于它和晶振等等有关,反馈的值不精确,例如n==2.00001,不符合n==2要求,但是符合n>>1要求。

n值导出来看下是多少 不等于2大于1 不是很正常嘛

单步调试能看到N的值吗?