ggbond33
ggbond33
采纳率66.7%
2018-07-17 04:25 阅读 668
已采纳

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

5

在单片机中我用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;
        }

}

}
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • 已采纳
    ailaillia ailaillia 2018-07-17 04:49

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

    点赞 3 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-07-17 04:29

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

    点赞 2 评论 复制链接分享
  • qq_39743252 qq_39743252 2018-07-20 10:06

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

    点赞 2 评论 复制链接分享
  • abc4764 BaiTianio 2018-07-17 06:50

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

    点赞 1 评论 复制链接分享
  • dldza dldza 2018-07-18 01:36

    n值 初始化成0了没有

    点赞 评论 复制链接分享
  • baidu_41911715 baidu_41911715 2018-08-08 01:06

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

    点赞 评论 复制链接分享
  • xmetoo xmetoo 2018-08-08 01:14

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

    点赞 评论 复制链接分享

相关推荐