📄 comm.c
字号:
#include "comm.h"
#include <avr/eeprom.h>
#include <avr/wdt.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
//uint8_t Right_Door(void);
void COM0_RX_process(void);
void COM0_TX_process(void);
void COM1_RX_process(void);
void COM1_TX_process(void);
uint32_t fourx(uint8_t *pppp, uint8_t p);
uint8_t test;
void COMM(void)
{
asm("nop");
COM0_RX_process();
asm("nop");
COM0_TX_process();
asm("nop");
COM1_TX_process();
asm("nop");
COM1_RX_process();
asm("nop");
}
void COM0_RX_process(void)
{
uchar i,j,k,mm;
asm("nop");
if((Recv_buff[2]==0x01) && (Recv_number ==6))
{
asm("nop");
mm=0;
for(i=0; i<6;i++)
{
asm("nop");
mm ^=Recv_buff[i];
}
asm("nop");
if(mm)
{ asm("nop");
return;
}
asm("nop");
IO_data[0] = Recv_buff[3];
IO_data[1] = Recv_buff[4];
Recv_number=0;
Rs232_LED=1;
}
else if((Recv_buff[2]==0x02) && (Recv_number ==10))
{
asm("nop");
k=0;
Recv_number=0;
mm=0;
for(i=0; i<10;i++)
{
asm("nop");
mm ^=Recv_buff[i];
}
if(mm)
{ asm("nop");
return;
}
Rs232_LED=1;
for(i=3; i<9; i++)
{
asm("nop");
if(Recv_buff_B[i] != Recv_buff[i])
{
asm("nop");
k=1;
Recv_buff_B[i]= Recv_buff[i];
}
}
if(!k)
{
asm("nop");
return;
}
for(i=0; i<3; i++)
{
asm("nop");
if(Recv_buff[i*2+3] >0xF8)
{
asm("nop");
Recv_buff[i*2+3] =0xF8;
}
M_0_position[i] = Recv_buff[i*2+3];
M_0_speed[i] = Recv_buff[i*2+4];
}
//for(i=3; i<9; i++)
//{
// Recv_buff_B[i]= Recv_buff[i];
//}
}
else if((Recv_buff[2]==0x03) && (Recv_number ==5))
{
//Reset_sys=1;
asm("nop");
Recv_number=0;
mm=0;
for(i=0; i<5;i++)
{
asm("nop");
mm ^=Recv_buff[i];
}
if(mm)
{
asm("nop");
return;
}
asm("nop");
Rs232_LED=1;
if(!(Reset_data &0x01))
{
asm("nop");
M_c_direct[0]=0;
Start_data[0] =63000;
TCCR3A = 0x40;
TCCR3B =0x0B;
OCR3A = 60;
Const_T[0]=0x20;
}
if(!(Reset_data &0x02))
{
asm("nop");
M_c_direct[1]=0;
Start_data[1] =63000;
TCCR2 = 0x1B;
OCR2 = 60;
Const_T[1]=0x20;
}
if(!(Reset_data &0x04))
{
asm("nop");
M_c_direct[2]=0;
Start_data[2] =63000;
TCCR1A = 0x40;
TCCR1B =0x0B;
OCR1A = 60;
Const_T[2]=0x20;
}
// power0=1; power1=1;power2=1;power3=1;
// power_count1=0;
// power_count2=0;
// power_count3=0;
}
else
asm("nop");
}
void COM0_TX_process(void)
{
uchar i,mm;
asm("nop");
if(System_ON_Start)
{
asm("nop");
return;
}
if(!data_change)
{
asm("nop");
Trans_buff_C[2]=PC_off_data;
Trans_buff_C[3]=Input_driver;
Trans_buff_C[4]=Input_speeder;
Trans_buff_C[5]=Coin_data;
Trans_buff_C[6]=AD1_driver;
Trans_buff_C[7]=AD2_driver;
Trans_buff_C[8]=AD1_speeder;
Trans_buff_C[9]=AD2_speeder;
Trans_buff_C[10]=Reset_data;
Trans_buff_C[11]=Comm_status;
for(i=2; i<12; i++)
{
asm("nop");
if(Trans_buff_B[i] != Trans_buff_C[i])
{
asm("nop");
data_change=1;
}
}
asm("nop");
if(Coin_data)
{
asm("nop");
data_change=1;
}
}
if(data_change)
{
asm("nop");
//PORTD |=0x20; // led1 off
data_change=0;
if((RS485_timer < 60) || TX0_flag)
{
asm("nop");
return;
}
TX0_flag=1;
Trans_buff[0]=0x55;
Trans_buff[1]=03;
Trans_buff[2]=PC_off_data;
Trans_buff[3]=Input_driver;
Trans_buff[4]=Input_speeder;
Trans_buff[5]=Coin_data;
Trans_buff[6]=AD1_driver;
Trans_buff[7]=AD2_driver;
Trans_buff[8]=AD1_speeder;
Trans_buff[9]=AD2_speeder;
Trans_buff[10]=Reset_data;
Trans_buff[11]=Comm_status;
mm=0xaa;
for(i=0; i<12; i++)
{
asm("nop");
mm ^= Trans_buff[i];
}
Trans_buff[12]=mm;
UDR0 =0xAA;
Trans_number=0;
for(i=2; i<12; i++)
{
asm("nop");
Trans_buff_B[i]=Trans_buff[i];
}
}
else
{
asm("nop");
//PORTD |=0x20;
if((idle_count < 10) || TX0_flag)
{
asm("nop");
return;
}
TX0_flag=1;
idle_count=0;
Trans_buff[0]=0x55;
Trans_buff[1]=03;
Trans_buff[2]=PC_off_data;
Trans_buff[3]=Input_driver;
Trans_buff[4]=Input_speeder;
Trans_buff[5]=Coin_data;
Trans_buff[6]=AD1_driver;
Trans_buff[7]=AD2_driver;
Trans_buff[8]=AD1_speeder;
Trans_buff[9]=AD2_speeder;
Trans_buff[10]=Reset_data;
Trans_buff[11]=Comm_status;
mm=0xaa;
for(i=0; i<12; i++)
{
asm("nop");
mm ^= Trans_buff[i];
}
Trans_buff[12]=mm;
UDR0 =0xAA;
Trans_number=0;
for(i=2; i<12; i++)
{
asm("nop");
Trans_buff_B[i]=Trans_buff[i];
}
}
}
void COM1_TX_process(void)
{
uchar i=0;
asm("nop");
if(RS485_timer <100)
{
asm("nop");
return;
}
if(!colin)
{
asm("nop");
return;
}
RS485_timer=0;
RS485_RCV_OK=0;
RS485_RCV_number=0;
TX0_flag=0;
send485;
if(RS485_alt)
{
asm("nop");
RS485_alt=0;
RS485_send[0]= 0x02;
RS485_send[1]= output[0];
i = RS485_send[0];
i ^= RS485_send[1];
RS485_send[2]=i;
RS485_send[3]=0x0d;
RS485_count=4;
RS485_number =0;
UDR1=0x01;
}
else
{
asm("nop");
RS485_alt=1;
RS485_send[0]= 0x03;
RS485_send[1]= 0;
i = RS485_send[0];
i ^= RS485_send[1];
RS485_send[2]=i;
RS485_send[3]=0x0d;
RS485_count=4;
RS485_number =0;
UDR1=0x01;
}
}
void COM1_RX_process(void)
{
uchar i,j;
asm("nop");
if(Comm_DRV_count > 3)
{
asm("nop");
Comm_status &= 0x02;
}
if(Comm_SPD_count > 3)
{
asm("nop");
Comm_status &= 0x01;
}
if(!RS485_RCV_OK)
{
asm("nop");
return;
}
RS485_RCV_OK=0;
j=0;
for(i=1; i<5; i++)
{
asm("nop");
j ^= RS485_RCV_buff[i];
}
if(j != RS485_RCV_buff[5])
{
asm("nop");
return;
}
if(RS485_RCV_buff[1] ==2)
{
asm("nop");
Input_driver = RS485_RCV_buff[2];
Input_driver &=0xdf; //avoid 0x20
AD1_driver = RS485_RCV_buff[3];
AD2_driver = RS485_RCV_buff[4];
Comm_status |= 0x01;
Comm_DRV_count=0;
}
else
{
asm("nop");
AD1_speeder = RS485_RCV_buff[3];
Comm_status |= 0x02;
Comm_SPD_count=0;
}
}
//uint8_t Right_Door(void)
//void PC_Rd_Data(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -