#include"reg51.h"
void interrupt1();
void time0();
void intt0();
sbit ON=0x80^0;//启动开关
sbit OFF=0xb0^2;//停止开关
sbit MA1=0x90^1;//马达1
sbit MA2=0x90^2;//马达2
sbit MA3=0x90^3;//马达3
sbit MA=0x90^4;//马达电源总开关
sbit OK1=0x90^5;//第一个马达OK时指示灯
sbit OK2=0x90^6;//第二个马达OK时指示灯
sbit OK3=0x90^7;//第三个马达OK时指示灯
sbit NG1=0xa0^0;//第一个马达NG时指示灯
sbit NG2=0xa0^1;//第二个马达NG时指示灯
sbit NG3=0xa0^2;//第三个马达NG时指示灯
sbit IN1=0x80^1;//转到位信号输入
sbit IN2=0x80^2;//转到位信号输入
sbit IN3=0x80^3;//转到位信号输入
sbit ZI=0x90^0;//启动后指示灯
void intt0()
{
int MIN=10,MING=0,MING0=0,MING1=0;//设定标准转十次
P1=0x1F;//马达先通电
IE=0x83;//设置外中断0和定时中断0
TCON=0x11;//设定为各中断输入低电平有效
TMOD=0x02;//定时为第三种模式
TH0=0x9c;//定时器设定固定初始值
TL0=0X9c;//定时寄存器设定初始值
}
minming3()
{
if(IN1=0)//检测第一个马达是否转到位
{
!MA1=MA1;//是马达向相反方向转
!IN1=IN1;
++MING;//计数一次
minming1();
}
else minming1();//否则检查第二个马达
}
minming1()
{
if(IN2=0)//检测第二个马达是否转到位
{
!MA2=MA2;//是马达向相反方向转
!IN2=IN2;
++MING0;//计数一次
minming2();
}
else minming2();//否则检查第三个马达
}
minming2()
{
if(IN3=0)//检测第三个马达是否转到位
{
!MA3=MA3;//是马达向相反方向转
!IN3=IN3;
++MING1;//计数一次
minming3();
}
else minming3();//否则检查返回第一个马达
}
void time0()interrupt 1 using 1
{
while (MIN0=0)
{
--MIN0;
return;
}
while (MIN1=0)
{
--MIN1;
return;//设定工作时间
}
P1=0x01;//所有马达停止工作
if (MING>=MIN)//第一个马达规定时间内是否来回转动了10次
{
OK1=!OK1;//是OK灯亮
NG1=0;
}
else
{
NG1=!NG1;//否则NG灯亮
OK1=0;
}
if (MING0>=MIN)//第二个马达规定时间内是否来回转动了10次
{
OK2=!OK2;//是OK灯亮
NG2=0;
}
else
{
NG2=!NG2;//否则NG灯亮
OK2=0;
}
if (MING1>=MIN)//第三个马达规定时间内是否来回转动了10次
{
OK3=!OK3;//是OK灯亮
NG3=0;
}
else
{
NG3=!NG3;//否则NG灯亮
OK3=0;
}
}
void interrupt1()interrupt 0 using 0
{
void main();//初始化
}
void main(void)
{
int i=1,MIN0=200,MIN1=200;
P1=0;
P0=1;
P2=0;
P3=1;
m4:if (ON=0) //等待按下启动开关
intt0();
else goto m4;
}
30.C(33): warning C276: constant in condition expression
30.C(35): error C213: left side of asn-op not an lvalue
30.C(37): error C202: 'MING': undefined identifier
老是显示这个,我也不知道是哪里错了