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的话,上面的程序就执行 |