📄 elevator.c
字号:
load=1;
begin[3]=0xc8;
}
else if(container&&0x40)
{
unload=1;
begin[3]=0xc9;
}
else
{
normalload=1;
begin[3]=0xc4;
}
}
void handshake(void)
{
state=0;
while(!instruction1)
{;}
if(store13[0])
{
send_buf1[2]=0xcc;
send_buf1[3]=0xac; //发送握手指令
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
instruction1=0;
store13[0]=0;
}
while(!instruction1)
{;}
send_buf0[1]=0x01; //暂时先用0x01代表内呼板地址
send_buf0[3]=0xef;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
while(!instruction0)
{;}
if(store03[0]==1)
{
instruction0=0;
send_buf1[2]=0x01;
send_buf1[3]=0x1c;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
store03[0]=0;
}
else
{
instruction0=0;
send_buf1[2]=0x01;
send_buf1[3]=0x3c;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
v=0x21;
for(u=0;u<=floor-1;u++)
{
send_buf0[1]=v; //暂时先用0x01代表内呼板地址
send_buf0[3]=0x03;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
while(!instruction0)
{;}
if(store03[1]==1)
{
instruction0=0;
good++;
}
else
{
instruction0=0;
good=0x4c;
send_buf1[2]=v;
send_buf1[3]=0x4c;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
v++;
}
if(good==floor)
{
send_buf1[2]=0x21;
send_buf1[3]=0x2c;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
for(u=0;u<=3;u++)
{
send_buf1[2]=0xcc;
send_buf1[3]=begin[u];
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
state=1;
}
void sample()
{
if(container&&0x04) //判断是司机还是自动
{
if(!motorman)
{
send_buf1[2]=0xcc;
send_buf1[3]=0xc5;//司机钮有效
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
motorman=1;
motor=0;
}
}
else
{
if(!motor)
{
send_buf1[2]=0xcc;
send_buf1[3]=0xc6; //自动钮有效
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
motor=1;
motorman=0;
}
}
if(motorman)//直驶按钮
{
if(container&&0x08)
{
if(!straight)
{
send_buf1[2]=0xcc;
send_buf1[3]=0xc7;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
straight=1;
}
}
else
{
straight=0;
}
}
//判断载重情况
if(container&&0x10)
{//超载
if(!overload)
{
outp(0xa0,PORTC);
overload=1;
load=0;
unload=0;
normalload=0;
}
}
else if(container&&0x20)
{//满载
if(!load)
{
outp(0x40,PORTC);
overload=0;
load=1;
unload=0;
normalload=0;
send_buf1[2]=0xcc;
send_buf1[3]=0xc8;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
else if(container&&0x40) //轻载
{
if(!unload)
{
outp(0x00,PORTC);
overload=0;
load=0;
unload=1;
normalload=0;
send_buf1[2]=0xcc;
send_buf1[3]=0xc9;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
else //常载
{
if(!normalload);
{
outp(0x00,PORTC);
overload=0;
load=0;
unload=0;
normalload=1;
send_buf1[2]=0xcc;
send_buf1[3]=0xc4;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
//判断开关门按钮
if(container&&0x02)
{
if(!openbutton)
{
openbutton=1;
closebutton=0;
send_buf1[2]=0xcc;
send_buf1[3]=0xc3;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
else if(container&&0x01)
{
openbutton=0;
closebutton=1;
shutdown();
}
else
{;}
container=PINF;
if(container&&0x08) //判断门的情况
{ //关门到位
if(!closetip)
{
closetip=1;
opentip=0;
unclose=0;
unopen=0;
send_buf1[2]=0xcc;
send_buf1[3]=0xc1;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
else
{ //关门不到位
if(!unclose)
{
closetip=0;
opentip=0;
unclose=1;
unopen=0;
send_buf1[2]=0xcc;
send_buf1[3]=0x8c;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
if(container&&0x40) //开门到位
{
if(!opentip)
{
closetip=0;
opentip=1;
unclose=0;
unopen=0;
send_buf1[2]=0xcc;
send_buf1[3]=0xc0;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
else
{ //开门不到位
if(!unopen)
{
closetip=0;
opentip=0;
unclose=0;
unopen=1;
send_buf1[2]=0xcc;
send_buf1[3]=0xc0;
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf1,6);
}
}
if(container&&0x20)
{
if(!light)
{
light=1;
opendoor();
}
else
{light=0;}
}
}
void handle1()
{
inroom=*(*takeout1+0);
inroom=inroom<<8;
inroom=inroom|*(*takeout1+1);
if(inroom==0xccd0)
{
opendoor();
takeout1++;
c1++;
}
else if(inroom==0xccd1)
{
shutdown();
takeout1++;
c1++;
}
else if(inroom==0xccd2)
{
PORTC=PORTC|0x04;
takeout1++;
c1++;
}
else if(inroom==0xccd3)
{
PORTC=PORTC&0xfb;
takeout1++;
c1++;
}
else if(inroom==0xccd4)
{
PORTC=PORTC|0x08;
takeout1++;
c1++;
}
else if(inroom==0xccd5)
{
PORTC=PORTC&0xf7;
takeout1++;
c1++;
}
else if(inroom==0xccd6)
{
PORTC=PORTC|0x10;
takeout1++;
c1++;
for(n=0;n<=255;n++)
{
for(m=0;m<=255;m++)
{;}
}
PORTC=PORTC&0xef;
}
else if(inroom==0xccde)
{
send_buf0[1]=0x01;
send_buf0[3]=0xe8;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
c1++;
takeout1++;
}
else if(inroom==0xccdf)
{
send_buf0[1]=0x01;
send_buf0[3]=0xe9;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
c1++;
takeout1++;
}
/*else if(inroom==0xcc3d) //故障态
{
PORTC=PORTC|0x80;
for(n=0;n<=255;n++)
{
for(m=0;m<=255;m++)
{;}
}
PORTC=PORTC&0x7f;
send_buf0[1]=0x01;
send_buf0[3]=0xea;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xf6;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xd8;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0x26;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
fault(); 故障态子程
c1++;
takeout1++;
}
else if(inroom==0xcc0d) //检修
{
send_buf0[1]=0x01;
send_buf0[3]=0xea;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xf6;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xd8;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0x26;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
repair=1; //检修子程
c1++;
takeout1++;
}
else if(inroom==0xcc1d)
{
fire(); //消防子程
c1++;
takeout1++;
}*/
else if(inroom&0x005d=0x005d) //熄灭呼梯指令
{
send_buf0[1]=inroom>>8;
send_buf0[3]=0x5d;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
c1++;
takeout1++;
}
else if(inroom==0xcc6d) //锁梯态指令
{
send_buf0[1]=0x01;
send_buf0[3]=0xea;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xf6;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0xd8;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
send_buf0[1]=0xdd;
send_buf0[3]=0x26;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
UCSR0B=(0<<RXEN)|(0<<TXEN);
c1++;
takeout1++;
}
else if(inroom==0xcc8d) //允许开门指令
{
opendoor();
c1++;
takeout1++;
}
else if(inroom&&0x009d==0x9d) //内呼外闪
{
send_buf0[1]=inroom>>8;
send_buf0[3]=0x9d;
change0();
send_buf0[4]=crc_gen(byt0,3);
USART_Transmit0(send_buf0,6);
c1++;
takeout1++;
}
else
{;}
if(c1>=50)
{
c1=0;
takeout1=store2;
}
}
int main(void)
{
DDRC=0xff;
DDRB=0x00;
DDRF=0x00;
u16 rate=UART_BAUD_SELECT;
USART_Init1(rate);
USART_Init0(rate);
sei();
ok1=0;
err1=0;
ok0=0;
err0=0;
r1=0;
r0=0;
state=0;
k=0;
wrong1=0;
wrong0=0;
good=0;
opentip=0;
closetip=0;
unopen=0;
unclose=0;
motorman=0;//
motor=0;//
load=0;
unload=0;
normalload=0;
overload=0;
container=0;
light=0;
openbutton=0;
closebutton=0;
straight=0; //
inevenfloor=0;
outevenfloor=0;
evenfloor=0;
repair=0;
takeout1=store2;
timef=1;
c1=0;
DDRC=0x00;
outp(0xf0,TCNT1H);
outp(0xbe,TCNT1L);
outp(5,TCCR1B);
//outp((1<<TOIE1),TIMSK);
sei();
putin1=store2;
takeout1=store2;
examself();//还有平层中断的处理程序
handshake();
for(;;)
{
if(store13[1]||store13[6]) //电梯自动态和自学习态
{
sample();
if(instruction1!=0)
{
handle1();
}
}
}
}
SIGNAL(SIG_INTERRUPT4)
{
send_buf1[1]=0xbb;
send_buf1[3]=0xca; //平层入信号
change1();
send_buf1[4]=crc_gen(byt1,3);
USART_Transmit1(send_buf0,6);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -