打印

PIC单片机中奇怪现象

[复制链接]
1130|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ahwt1990|  楼主 | 2014-7-9 19:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
其中一个串口接收函数,我初始化时flag1=0;安装协议给数据,可是灯不亮,,但是我把   if(flag1==1)     if(flag1==2)   if(flag1==3)      屏蔽掉后,给数据,灯就亮了,求高手指点哪里错了



/*从上位机接受到的数据*/
void  GetData232(void )
{   
        int i,jy;
  if(r==1&&Com232[0]==0x43&&Com232[1]==0x54&&Com232[2]==0x07)
  {
          if((jiaoyan())==1)
         {
                         
                  if(Com232[3]==0x85)
           {
                 RB1=1;RB2=0;RG4=0;      //停止状态绿灯灯亮
           }
            if (Com232[3]==0x02)
           {
               RB1=0;RB2=1;RG4=1;   //上升状态绿灯灯亮
           }
            if (Com232[3]==0x84)
           {
               RB1=0;RB2=0;RG4=1;  // 下降状态绿灯亮
           }
            if (Com232[3]==0xA3)
           {
               RB1=0;RB2=1;RG4=0;  //上升限位红灯亮
           }  
            if (Com232[3]==0xC5 )
           {
               RB1=0;RB2=0;RG4=0; //下降限位红灯亮
           }
            if(flag1==1)                                            //行车
              {
                     flag1=0;
                    if((H>H_M)&&(Com232[3]==0x92))
                     {RB1=0;RB2=0;RG4=1;}                             // 下降状态绿灯亮         
                    if((H<H_M)&&(Com232[3]==0x92))
                     { RB1=0;RB2=1;RG4=1;}                           //上升状态绿灯灯亮   
                if (Com232[3]==0x83)
                 { RB1=1;RB2=1;RG4=1;}                           //行车灯亮
               
             }
            if(flag1==2)                                            //驻车
            {
               flag1=0;
               RB1=0;                                         //上升状态绿灯灯亮
               RB2=1;
               RG4=1;
               if(Com232[3]==0xA3)
               {RB1=1;RB2=0;RG4=1;}                          //驻车工作灯亮
            }
           if(flag1==3)                                      //撤收   
            {
              flag1=0;
              RB1=0;                                          // 下降状态绿灯亮
              RB2=0;
              RG4=1;
              if(Com232[3]==0xC5)
               {RB1=1;RB2=1;RG4=0;}  
            }   

     H=(Com232[4]<<8)|Com232[5];
     }
   }            
}


沙发
wangch_sh| | 2014-7-9 21:28 | 只看该作者
flag1=1、2或者3时,灯才亮。给0当然不亮了。

使用特权

评论回复
板凳
yewuyi| | 2014-7-10 08:46 | 只看该作者
这是PIC是什么关系?

奇怪的不是PIC,而是你的那乱糟糟的代码而已。

使用特权

评论回复
地板
原野之狼| | 2014-7-10 09:00 | 只看该作者
So Many Magic Number!

使用特权

评论回复
5
diweo| | 2014-7-10 11:23 | 只看该作者
好多 if 啊

使用特权

评论回复
6
ahwt1990|  楼主 | 2014-7-10 11:24 | 只看该作者
wangch_sh 发表于 2014-7-9 21:28
flag1=1、2或者3时,灯才亮。给0当然不亮了。

Com232[3] 元素中放的是串口发过来的状态元素,我的if语句都是平行状态的,不是嵌套的,

使用特权

评论回复
7
ahwt1990|  楼主 | 2014-7-10 11:26 | 只看该作者
yewuyi 发表于 2014-7-10 08:46
这是PIC是什么关系?

奇怪的不是PIC,而是你的那乱糟糟的代码而已。

你没好好看,代码不乱的,我换成switch语句也是一样不行

使用特权

评论回复
8
ahwt1990|  楼主 | 2014-7-10 11:26 | 只看该作者
原野之狼 发表于 2014-7-10 09:00
So Many Magic Number!

那是从上位机接受到的状态位,不同状态亮不同的灯

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

68

帖子

0

粉丝