51单片机C语言编程的几个问题?
以下是我公司的自动化机器的单片机编程,有几个问题求指教!//P1作为读气缸感应器信号,01(直线轴承气缸)02(前面三轴气缸)04(后面直线轴承气缸)
//08(后面三轴气缸)10(产品信号)40(良品信号)80(不良品信号)
#include<reg51.h>
sbit P0_3=P0^3;//皮带控制
sbit P2_0=P2^0;//前面三轴气缸
sbit P2_1=P2^1;//夹嘴气缸
sbit P2_2=P2^2;//直线轴承气缸
sbit P2_3=P2^3;//后面三轴气缸
sbit P2_4=P2^4;//后面夹嘴气缸
sbit P2_5=P2^5;//后面直线轴承气缸
sbit P2_6=P2^6;//阻挡气缸
sbit P2_7=P2^7;//启动信号
void Delay(unsigned char m)
{
unsigned char r;
for(r=m;r>0;r--)
{
TH0=0X3c; //50ms
TL0=0Xb0;
TR0=1;
do{}while(!TF0);
TF0=!TF0;
TR0=0;
}
}
void main(void)
{
unsigned char a=0;//0-255
TMOD=0X01;
P0=0X0F;
P1=0X0F;
P2=0X00;
P3=0X00;//不作任何控制
while(1)
{
if((P0&0X01)!=0X01)
{
for(a=200;a>0;a--);//加延时防误测
if((P0&0X01)!=0X01)
{
do
{
P2_0=1;//前面三轴气缸下
}while((P1&0X02)==0X02); //前面三轴气缸下到位
P2_1=1; //夹嘴气缸
Delay(5);
P2_0=0; //前面三轴气缸上
Delay(5);
do
{
P2_2=1;//直线轴承气缸
}while((P1&0X01)==0X01); //直线轴承气缸到位
P0_3=0; //皮带停止
do
{
P2_0=1;//前面三轴气缸下
}while((P1&0X02)==0X02); //前面三轴气缸下到位
P2_1=0; //夹嘴气缸松
Delay(5);
P2_0=0; //前面三轴气缸上
if((P0&0X02)!=0x02)//不良品信号
{
P2_6=1; //阻挡气缸
P0_3=1; //皮带动
Delay(5);
P2_2=0; //直线轴承气缸回
P2_7=1; //启动信号
Delay(20); //取物与延时的关系
P2_7=0; //启动信号停
do
{
P2_3=1;//后面三轴气缸下
}while((P1&0X08)==0X08); //后面三轴气缸下到位
P2_4=1; //夹嘴气缸
Delay(5);
P2_3=0; //后面三轴气缸上
Delay(5);
P2_6=0; //阻挡气缸回
do
{
P2_5=1;//直线轴承气缸
}while((P1&0X04)==0X04); //直线轴承气缸到位
do
{
P2_3=1;//后面三轴气缸下
}while((P1&0X08)==0X08); //后面三轴气缸下到位
P2_4=0; //夹嘴气缸松
Delay(5);
P2_3=0; //后面三轴气缸上
P2_5=0; //直线轴承气缸回
}
else
{
Delay(5);
P0_3=1; //皮带动
P2_2=0; //直线轴承气缸回
P2_7=1; //启动信号
Delay(10);
P2_7=0; //启动信号停
}
for(;;) //用brdak仅能跳出第一个死循环,而不能跳出第二个。与if嵌套层数无关
{
if((P0&0X06)!=0x06)
{
for(a=200;a>0;a--);//加延时防误测
if((P0&0X06)!=0x06){Delay(3); break;}//启动测试后等待测试完信号,加延时让弹片弹开。
}
}
}
}
}
}
其中的IF语看不懂,求大神指教!
While语句的格式是什么?