在单片机中我用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的值吗?