中级会员
 
- 积分
- 302
- 金钱
- 302
- 注册时间
- 2016-10-1
- 在线时间
- 77 小时
|
本帖最后由 chenghuayou 于 2016-11-10 08:38 编辑
首先,我想用USART中断接受两组数据,第一组:0x00,0xa5,0x00,0x00,0x00,0x02,0x03,0x81;第二组:0xa5,0x00,0x00,0x00,0x02,0x03,0x81;在中断程序里的两个判断中,第一组的数据可以识别接受,第二组的无法识别,请各位大神看看,给点套路。红色字体无法进入。蓝色字体可以进入。。。。。。。。。跪求了。
void USART1_IRQHandler()//接收数据中断函数
{
u8 Res=0;
if(USART_GetITStatus(USART1, USART_IT_RXNE))
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
Res =USART_ReceiveData(USART1);
PBout(5)=~PBout(5);
//while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != 1);
// USART_ClearFlag( USART1,USART_FLAG_RXNE);
if(i<8)//先接受前8个十六进制数,判断符不符合应答格式
{
Initial_response = Res;
i++;
}
else
{
if((Initial_response[0] == 0xa5)&&(Initial_response[6] == 0x81))
{
PBout(5)=~PBout(5);
Abolish=1;
}
if((Initial_response[0] == 0x00)&&(Initial_response[1] == 0xa5)&&(Initial_response[7] == 0x81))//判断应答格式
{
USART_RX_BUF[t] =Res;
//while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != 1);
t++;
if(t == 1804)//接受360*5=1800个字节
{
if((USART_RX_BUF[1800]==0xaa)&&(USART_RX_BUF[1801]==0xbb)&&(USART_RX_BUF[1802]==0xcc)&&(USART_RX_BUF[1803]==0xdd))
{
t = 0;
i = 0;
flag = 1;//扫描一圈完成标志位
}
else
{
Abolish=1;
}
}
}
}
}
}
|
|