问题已经解决
void USART2_IRQHandler(void) //串口2中断服务程序
{
u8 Res;
#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
{
Res =USART_ReceiveData(USART2);//(USART2->DR); //读取接收到的数据
if((Res==0x55)&&(USART2_begin==0))//接收到了包头0x55
{
USART2_len=0;
USART2_begin=1;
}
if((Res==0xaa)&&(USART2_len<USART_REC_LEN)&&(USART2_begin==1)) //接收到了包尾0xaa
{
USART2_end=1;
USART2_begin=0;
}
if(USART2_len>(USART_REC_LEN))
{
USART2_end=1;
USART2_begin=0;
USART2_overflow=1;
}
USART_RX_BUF[USART2_len]=Res ;
USART2_len++;
}
////////////////////////////RFID地标读取模块///////////////////////////////////////////////
if((USART2_end==1)) //串口数据接收完成
{
unsigned char dq[USART_REC_LEN]; //定义读取的数组
unsigned char flag=0; //射频标记
unsigned char flag1=0;
USART2_end=0; //串口2包尾标记复位
len=(USART2_len-1); //得到此次接收到的数据长度((USART2_len-1)排除包尾)
memcpy(dq,USART_RX_BUF,len); //
if(USART_RX_BUF[1]+1!=len) //长度校验
{
  OINT_COLOR=RED;
Show_Str(160,36,200,16,"读卡失败 长度",16,0);
//Show_Str(325,167.5,200,16,"故障停车",16,0);
goto jjstop;
}
else if(motor==1)
{
LCD_ShowString(40,36,200,16,16," ");
}
if(USART_RX_BUF[len-1]!=bcc_cal(len-1,USART_RX_BUF))
{
  OINT_COLOR=RED;
Show_Str(160,36,200,16,"读卡失败 校验码",16,0);
//Show_Str(325,167.5,200,16,"故障停车",16,0);
goto jjstop;
}
else if(motor==1)
{
LCD_ShowString(40,36,200,16,16," ");
}
////////////////////////////////////当前站点////////////////////////////////////////////////////////
for(q=0;q<20;q++)
{
for(t=4;t<len-1;t++) //t=4除去包头、长度、命令码、状态标记
{
if(SD[q][t-4]!=dq[t]) //二维数据组和读取数据组比较
{
flag1=0;
break;
}
else
{
flag1=1;
}
}
if(flag1==1)
{
num1=q+1;
flag1=0;
}
}
POINT_COLOR=BRED;
//Show_Str(40,140,200,16,"前一站点:",16,0);
POINT_COLOR=BLUE;
LCD_ShowxNum(85,75,num1,3,16,0);
///////////////////////////////////////站点比较////////////////////////////////////////////////////////
for(t=4;t<len-1;t++) //t=4除去包头、长度、命令码、状态标记
{
//memcpy(dq,USART_RX_BUF,len); //
if(SD[num-1][t-4]!=dq[t]) //二维数据组和读取数据组比较
{
flag=0;
break;
}
else
{
flag=1;
}
}
if(flag==1)
{
flag=0;
POINT_COLOR=RED;
Show_Str(325,167.5,200,16,"停车 ",16,0); //小车停止
goto stop;
}
USART2_end=0;
}
|