📄 main.c
字号:
Syn_flag=1;//indicate have recive syn flag
timer0=0;}//clear
if(Pc_Message[4]!=0x06&&Pc_Message[4]!=0x02)//SYN signal and SYN2 signal
{ // start timer0 for count the time piece
TR0=0;
Syn_flag=0;//indicate have recive syn flag
timer0=0;}//clear
//retransfer data to radio send messsges to radio
len=0;
for(len=0;len<Pc_length;len++)
{
SBUF0=Pc_Message[len];
while(!TI0);
TI0=0;
}
// send over data by uart0 clear the pc_messages
for(len=0;len<Pc_length;len++) Pc_Message[len]=0;
//clear the pc flag enable uart1 receive data
Pc_Send_flag=0;//enable receive data from uart1
Pc_flag=0;
Pc_err_flag=0;
Pc_ctr=0;
Pc_length=0;
Reset_Wdt();
}
if(Pc_err_flag==1)//received error message for uart1 timeout
{ //clear all recevie messages from uart1 from pc
len=0;
for(len=0;len<100;len++) Pc_Message[len]=0;
//clear pc err flag
Pc_Send_flag=0;
Pc_err_flag=0;
Pc_flag=0;
Pc_ctr=0;
Pc_length=0;
Reset_Wdt();
}
}
////////////////////////////////////////////////////////
void Time_Poll(void)//poll the time if time is bigger than
// time then send analgyed messages to pc
{
uint len;
uint len2;
uint crc;
crc=0;//clear crc data
if(timer0>=Time)//bigger than 时间片2500ms
{
TR0=0;//stop the timer0
timer0=0;//clear
Reset_Wdt();
if(flag1==1&&flag2==1)//have analgy the right message and error message
{
Message[0]=0xAA;Message[1]=0x55;Message[2]=0x00;Message[3]=0x00;Message[4]=0x00;
///////// aa 55 00 00 00(flag)
Message[5]=2+ store_error+store_right;//all data length
for(len=6;len<6+store_right;len++)
Message[len]=Truck_Right[len-6];//copy data to message
Message[6+store_right]=0x00;//
Message[7+store_right]=0x00;//the data
for(len=8+store_right;len<8+store_right+store_error;len++)
Message[len]=Truck_Error[len-8+store_right];
/////check crc
crc=table_crc(Message+2,Message[5]+4);
Message[Message[5]+6]=crc&0x00ff;
Message[Message[5]+7]=(crc&0xff00)>>8;
Message[Message[5]+8]=0x01;//end
///////////// send message to pc
for(len2=0;len2<Message[5]+8;len2++)
{
SBUF1=Message[len2];
while(SCON1!=0x32);
SCON1&=~0x02;
}
flag1=0;flag2=0;
}
//////////////////////////
if(flag1==1)//only have analgy the right message
{
Message[0]=0xAA;Message[1]=0x55;Message[2]=0x00;Message[3]=0x00;Message[4]=0x00;
///////// aa 55 00 00 00(flag)
Message[5]=store_right;//all data length
for(len=6;len<6+store_right;len++)
Message[len]=Truck_Right[len-6];
/////check crc
crc=table_crc(Message+2,Message[5]+4);
Message[Message[5]+6]=crc&0x00ff;
Message[Message[5]+7]=(crc&0xff00)>>8;
Message[Message[5]+8]=0x01;
///send data
for(len2=0;len2<Message[5]+8;len2++)
{
SBUF1=Message[len2];
while(SCON1!=0x32);
SCON1&=~0x02;
}
flag1=0;//clear
}
//////////////////////////////////
if(flag2==1)//only have analgy the error message
{
Message[0]=0xAA;Message[1]=0x55;Message[2]=0x00;Message[3]=0x00;Message[4]=0x00;
///////// aa 55 00 00 00(flag)
Message[5]=2+ store_error;//all data length
for(len=8;len<8+store_error;len++)
Message[len]=Truck_Error[len-8];
/////check crc
crc=table_crc(Message+2,Message[5]+4);
Message[Message[5]+6]=crc&0x00ff;
Message[Message[5]+7]=(crc&0xff00)>>8;
Message[Message[5]+8]=0x01;
///end
for(len2=0;len2<Message[5]+8;len2++)
{
SBUF1=Message[len2];
while(SCON1!=0x32);
SCON1&=~0x02;
}//end for
flag2=0;//clear
}//end if
////////////////////////////////////////////
//clear all send messages
for(len2=0;len2<500;len2++) Message[len2]=0;
Reset_Wdt();
for(len2=0;len2<400;len2++) Truck_Right[len2]=0;
Reset_Wdt();
for(len2=0;len2<100;len2++) Truck_Error[len2]=0;
Reset_Wdt();
store_right=0;
store_error=0;
flag1=0;
flag2=0;
Syn_flag=0;//not syn signal
}
//clear all flags and messages for next receive message
}
///////////////////////////////////////////////////////////
/////main function///////////////////////
void main(void)
{
Init_System();//initlized system
while(1)
{
Reset_Wdt();//reset watchdog
//////////////////////////////////////
Uart0_TimeOut();//uarto timeout control
Uart0_Message_Analgy();//analgy uart0 message
///////////////////////////////////////
Uart1_TimeOut();//uart1 timeout control
Uart1_Message_Analgy();//analgy uart1 message
///////////////////////
Time_Poll();//poll the timepiece
}
}
////////ISR Routine///////////////////////
///Timer0 ISR fuction////////////////////
void Timer0_ISR(void) interrupt 1
{ TF0 = 0;
TH0=0XF4;
TL0=0X48;//1ms
timer0=timer0+1;
}
///Uart0 ISR//////////////////////////////
void Uart0_ISR(void) interrupt 4
{
if(RI0)//with timeout controll
{ //receive data from radio
RI0=0;
if(Radio_Send_flag==0)//enable receive data from radio
{
if(Radio_ctr<MaxLength)//data lenght must be small MaxLength
{
TMR2CN = 0x04; //enable time2 FOR controll uart0 timeout
timer2=0;//clear
Radio_Message[Radio_ctr]=SBUF0;
Radio_ctr=Radio_ctr+1;//count
if(Radio_ctr==6) Radio_length=9+Radio_Message[5];//data length
if(Radio_ctr==Radio_length)//receive the length data
{
if(Radio_Message[0]==0xAA&&Radio_Message[1]==0x55&&Radio_Message[Radio_length-1]==0x01)//right data
// set has received data flag from radio
{
TMR2CN=0X00;//disable timer2 for uart0 timeout
timer2=0;//clear timer2
Radio_flag=1;//mean have received data from radio
Radio_Send_flag=1;//disable receive data from radio
Radio_ctr=0;//clear the counter
}
}
}
}
}
// if(TI0)
// { //send data to radio
// TI0=0;
// }
}
///timer2 isr///////////////////////////////
//controll uart0 timeout
void Timer2_ISR (void) interrupt 5
{
TF2H = 0;
timer2=timer2+1;// increduce by 1ms
}
///TIMER3 ISR///////////////////////////////
//controll uart1 timeout
void Timer3_ISR (void) interrupt 14
{
TMR3CN &=0x7F;
timer3=timer3+1;//added by 1ms
}
///Uart1 ISR////////////////////////////////
void Uart1_ISR(void) interrupt 16
{
if(SCON1&0x01==0x01)
{ //receive data from pc
SCON1&=~0x01;
if(Pc_Send_flag==0)//enable receive data from pc
{
if(Pc_ctr<MaxLength)//data lenght must be smaller compare MaxLength
{
TMR3CN = 0x04; //enable timer3 for controll uart1 timeout
timer3=0;//clear
Pc_Message[Pc_ctr]=SBUF1;
Pc_ctr=Pc_ctr+1;//count
if(Pc_ctr==6) Pc_length=9+Pc_Message[5];//data length
if(Pc_ctr==Pc_length)//receive the length data
{
if(Pc_Message[0]==0xAA&&Pc_Message[1]==0x55&&Pc_Message[Pc_length-1]==0x01)//receive right data
{
TMR3CN=0X00;//disable timer3
timer3=0;//clear timer3 for uart1 timeout
Pc_flag=1;//mean have received data from pc
Pc_Send_flag=1;//
Pc_ctr=0;
}
}
}
}
}
// if(SCON1==0x32)
// { //send data to pc
// SCON1&=~0x02;
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -