打印

关于C8051程序运行不正常问题求助

[复制链接]
769|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
逛逛看看学学|  楼主 | 2015-12-16 18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void main()
{
                 int i,j;          //i发送timetable数据
        WDTCN = 0XDE;
        WDTCN = 0XAD; //关闭看门狗
        Timer0_1_Init();
                 PCA0_Init();
        Timer2_Init();            //升降步进电机
        Timer4_Init();      //加载步进电机
            UART_Init();
                 Port_IO_Init();
                 Oscillator_Init();
        AD7606Initialization();
                 EA      =     1;
        ES0     =     1;
        SFRPAGE = LEGACY_PAGE;        //极易忽略

        while(1)
        {
          BEEP = 0;
          distance();
          Send_data();       
          AD7606Read_V1();
/*******************************************************************************************************************************/                                 
          if(RCVDATA==0x03)
           {
                           RCVDATA = 0;
                        STEPM_UP();
               
           }               
           if(RCVDATA==0x04)
           {
                        RCVDATA = 0;
                        STEPM_STOP();
                       
           }
           if(RCVDATA==0x05)
           {
                        RCVDATA = 0;
                        STEPM_DOWN();
                       
           }
           if(RCVDATA==0x06)
       {
                  RCVDATA = 0;
                  Send_Inquire_data();         // 标尺查询
                  delay_nms(500);                   //
                  Send_time_data();            // 饱荷时间查询
                  delay_nms(500);
                     if(scale==0x01)
                  {
                          while(position<5800)
                          {
                                   distance();
                         Send_data();
                                 STEPM_UP();
                          }
                          STEPM_STOP();
                                    for(i= holdtime;i>-1;i--)
                        {
                                timetable[7]= holdtime;
                                for(j=0;j<8;j++)
                                {
                                        SBUF0 = timetable[j];          //发送“I GET”
                                    while(!TI0);                  //判断是否发送结束(结束TI0为1)
                                        TI0 = 0;
                                }
                                holdtime--;
                                delay_nms(1000);
                        }
       
                  }                   
           }                  
        }       
}
if判断里面是串口接收到的数据,现在的问题是:当如果先收到0x03,0x04或0x05,这里面的程序运行没有问题,再接收0x06的话,这里面的程序while(position<5800)
                          {
                                   distance();
                         Send_data();
                                 STEPM_UP();
                          }
                          STEPM_STOP();
会跳过不执行,而上电之后先接收到0x06的话,上面的程序就执行

相关帖子

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

本版积分规则

15

主题

82

帖子

2

粉丝