📄 main.c
字号:
//////////////////////////////////////////
///////////UartVesion 1.0/////////////////////
//////////////////////////////////////////
///////////headers ///////////////////////
#include "crc.H"//included device lib////
/////function////////////////////////////
//Timeout
// control the timeout
#define TimeOut 3 //3ms timeout
#define MaxLength 100 //max data length
#define Time 2500//2.5s
//computer
/////pc_send_flag=0..enable receive data from pc
/////pc_send_flag=1..disable receive data from pc
bit Pc_Send_flag;//0 enable receive 1 enable send
bit Pc_flag;//receive pc right data flag
bit Pc_err_flag;// receive pc error data flag
uchar Pc_ctr;//pc data counter
uchar xdata Pc_Message[100];//receive pc data buffers
uchar Pc_length;//receive pc data length
//radio
/////radio_send_flag=0..enable receive data from radio
/////radio_send_flag=1..disable receive data from radio
bit Radio_Send_flag;//
bit Radio_flag;//receive pc data flag
bit Radio_err_flag;//receive radio error flag
uchar Radio_ctr;//pc data counter
uchar xdata Radio_Message[100];//receive pc data buffers
uchar Radio_length;//receive pc data length
///////////for store the messages for car
uchar store_right;
uchar store_error;
uchar xdata Truck_Right[400];
uchar xdata Truck_Error[100];
bit Syn_flag;//SYN_FLAG=1 表示已经收到了同步信号 syn_flag=0
bit flag1;
bit flag2;//indicate have done analgy the messages
uchar TimePiece;//counter the receive data time
//////////////
uchar xdata Message[500];//the messages be send to pc
//timer1
uint timer0;//count the time when received data from radio
//timer2
uchar timer2;//count the time for control uart0 timeout
//timer3
uchar timer3;//count the time for control uart1 timeout
///////////////////////////////////////////////////////////
void Uart0_TimeOut(void); //uarto receive data timeout
void Uart1_TimeOut(void); //uart1 receive data timeout
void Uart0_Message_Analgy(void);//analgy the uart0 message
void Uart1_Message_Analgy(void);//analgy the uart1 message
void Coventer_Time(void);//coventer the count time to timepiece
/////////////////////////////////////////////////////////
void Coventer_Time(void)
{
uchar n;
for(n=0;n<50;n++)
{
if(timer0>155+45*n&&timer0<155+45*(n+1))//count time
{
TimePiece=n;
break; // have find timepiece break
}//end if
}//end for
}
//////////////////////////////////////////////////////////
void Uart0_TimeOut(void)
{
if(timer2>3)//uart0 has timeout 3ms
{
TMR2CN=0x00;//disable timer2 for uart0 timeout
timer2=0;//clear timer2
Radio_err_flag=1;//error flag for timeout
}
}
/////////////////////////////////////////////////////////
void Uart1_TimeOut(void)
{
if(timer3>3)//uart0 has timeout 3ms
{
TMR3CN=0x00;//disable timer2 for uart0 timeout
timer3=0;//clear timer2
Pc_err_flag=1;//error flag for timeout
}
}
////////////////////////////////////////////////////////
void Uart0_Message_Analgy(void)
{
uchar len;
uint crc;
uchar crc_l;
uchar crc_h;
crc=0;crc_l=0;crc_h=0;//clear crc data
if(Syn_flag==1)//has receive syn signal 在收到同步信号的时候,解析收到的终端按键信息
{ //把错误和正确的卡车信息储存起来
if(Radio_flag==1)//received right message from radio
{
///有按键的时候 且正确的 储存信息 的情况 // 登陆 确认 功能
if(Radio_Message[4]==16||Radio_Message[4]==17||Radio_Message[4]==18)//接收到的信息有按键的时候 先假如FLAG=21
{
if(Radio_Message[0]==0xAA&&Radio_Message[1]==0x55&&Radio_Message[Radio_length-1]==0x01)//receive right data
{ //check crc
crc=table_crc(Radio_Message+2,Radio_length-5);
crc_l=crc&0x00ff;
crc_h=(crc&0xff00)>>8;
if(crc_l==Radio_Message[Radio_length-3]&&crc_h==Radio_Message[Radio_length-2])//crc check right
{
Coventer_Time();// transfer timer0 to timepiece
Truck_Right[store_right]=Radio_Message[Radio_length-7];//truck id low
Truck_Right[store_right++]=Radio_Message[Radio_length-6];//truck id hight
Truck_Right[store_right++]=Radio_Message[4];//key
Truck_Right[store_right++]=TimePiece;//store the timepiece
store_right=store_right+4;//pointer added
flag1=1;
}
else //crc check error
{
Coventer_Time();//transfer timer0 to timepiece
Truck_Error[store_error]=TimePiece;//store the error truck
store_error=store_error+1;//pointer add
flag2=1;
}
//clear all messages
Radio_Send_flag=0;//enable receive the messages from uart0
Radio_ctr=0;
Radio_err_flag=0;
Radio_flag=0;//clear the right message flag
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
}//end the header is right
}//end Radio_Message[4]==21
///其他信息的情况,直接转发给PC 接收的信息没有KEY FLAG
else
{
for(len=0;len<Radio_length;len++)
{
SBUF1=Radio_Message[len];
while(SCON1!=0x32);
SCON1&=~0x02;
}
/////
Radio_Send_flag=0;//enable receive the messages from uart0
Radio_ctr=0;
Radio_err_flag=0;
Radio_flag=0;//clear the right message flag
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
}//end else
}//end radio flag=1
if(Radio_err_flag==1)//receivd error message for uart0 timeout
{
///错误的情况 有按键的情况下
// if(Radio_Message[4]==21)//
// {
timer0=timer0-3;//because the timeout is 3 ms
Coventer_Time();//transfer timer0 to timepiece
Truck_Error[store_error]=TimePiece;//store the error truck
store_error=store_error+1;//pointer add
flag2=1;
////clear all
Radio_err_flag=0;//clear the error flag
Radio_flag=0;
Radio_Send_flag=0;
Radio_ctr=0;
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
//}
////错误的情况 没有按键的情况下
/* else
{
for(len=0;len<Radio_length;len++)
{
SBUF1=Radio_Message[len];
while(SCON1!=0x32);
SCON1&=~0x02;
}
/////
Radio_Send_flag=0;//enable receive the messages from uart0
Radio_ctr=0;
Radio_err_flag=0;
Radio_flag=0;//clear the right message flag
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
}//end else*/
}//end radio error flag=1
}//end syn_flag=1
else // syn_flag=0 没有收到同步信号的情况下
{ //直接转发数据给PC
if(Radio_flag==1)//接收情况正确的情况下
{
Radio_flag=0;
for(len=0;len<Radio_length;len++)
{
SBUF1=Radio_Message[len];
while(SCON1!=0x32);
SCON1&=~0x02;
}
//////////////////////
Radio_err_flag=0;//clear the error flag
Radio_flag=0;
Radio_Send_flag=0;
Radio_ctr=0;
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
}
if(Radio_err_flag==1)//接收超时的情况下
{
Radio_err_flag=0;
for(len=0;len<Radio_length;len++)
{
SBUF1=Radio_Message[len];
while(SCON1!=0x32);
SCON1&=~0x02;
}
//////////////////////
Radio_err_flag=0;//clear the error flag
Radio_flag=0;
Radio_Send_flag=0;
Radio_ctr=0;
for(len=0;len<Radio_length;len++) Radio_Message[len]=0;
Radio_length=0;
Reset_Wdt();
}
}//end else
}
////////////////////////////////////////////////////////
void Uart1_Message_Analgy(void)
{
uchar len;
uint crc;
uchar crc_l;
uchar crc_h;
len=0;//clear data len for send data to radio
crc=0;crc_l=0;crc_h=0;//clear crc data
if(Pc_flag==1)//received right message from pc
{
if(Pc_Message[4]==0x06||Pc_Message[4]==0x02)//SYN signal and SYN2 signal
{ // start timer0 for count the time piece
TR0=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -