Lucky0416xy 2015-04-23 15:28
浏览 1330

keil编译无误,把程序烧到单片机上后,不满足某个else if条件也会执行相应语句

keil编译无误,把程序烧到单片机上后,不满足else if((P2&0x0D)==9)这个条件也会执行相应语句

    #include "C8051F020.h"

/*
P20控制直行,P22控制左行,P23控制右行
*/

void Delay()
{
int i,j;
for(i=1000;i>0;i--)
for(j=1000;j>0;j--)
;
}
void Reset_Sources_Init()
{

WDTCN = 0xDE; //关看门狗
WDTCN = 0xAD;
}
void Timer_Init() //定时器08位重装载
{ //选择系统时钟

CKCON = 0x08;

TCON = 0x10;

TMOD = 0x02;

TL0 = 0x0FA;

TH0 = 0x0FA;

}

void PCA_Init()
{

PCA0CN = 0x40; //使能

PCA0MD = 0x04; //选择系统时钟

PCA0CPM0 = 0x42; //选择8位pwm

PCA0CPH0 = 0x80; //占空比

        PCA0CPM1   =0x42;   //选择8位pwm 
          PCA0CPH1   =0x80; //占空比
   }

void Port_IO_Init()
{

XBR0 = 0x10; //Cex0, Cex1连到P0.0,P0.1

XBR2 = 0x40; //交叉开关使能
P0MDOUT = 0x03; //P0.0,P0.1推挽输出
P2MDOUT = 0x00;
}
void Oscillator_Init()
{

int i=0;
OSCXCN=0x67;
for(i=0;i<3000;i++);
}
void Init_Device(void)
{

Reset_Sources_Init();

Timer_Init();
PCA_Init();

Port_IO_Init();

Oscillator_Init();

}
void main()

{

P2=0xFD; //P21一直是低电平,没用了,用P20,P22,P23这三个脚 Init_Device(); while(1)
{

           if(((P2&0x0D)==12)||((P2&0x0D)==13))             
           {                                                                          

              PCA0CPH0 =0x80;   
                          PCA0CPH1 =0x80;
              P2=0xFD;
//            Delay();

            }
            else if((P2&0x0D)==8)                               
            {
                PCA0CPH0 =0x60;                                                
                PCA0CPH1 =0x0D0;                                    
                P2=0xFD;   
                Delay();
             }
           else if((P2&0x0D)==9)                                    //大幅左转
            {                                                  
               PCA0CPH0 =0x0D0;                                                    
               PCA0CPH1 =0x0D0;
               P2=0xFD;              
               Delay();                    
             }
           else if((P2&0x0D)==4)                            
           {              
                     PCA0CPH0 =0x0D0;                                                            
                       PCA0CPH1 =0x60;  
                       P2=0xFD;
                         Delay();                              
           }
      else if((P2&0x0D)==5)                               //大幅右转
           {     
                    PCA0CPH0 =0x0D0;
                      PCA0CPH1 =0x40;
                      P2=0xFD;
                        Delay();
           }         
     else 
           {
             PCA0CPH0 =0x80;
                     PCA0CPH1 =0x80;
             P2=0xFD;
                    //  Delay();
           }                                                 
         }  
    }

单步调试的时候没发现问题,但是一经烧到单片机后,刚运行时符合预期,但过一小会儿就不符合预期了,后来十分确定的发现是跑到else if((P2&0x0D)==9)里面去了,我就纳闷了,不符合条件这么会进到这条else if语句里去呢?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器