52单片机接收0x0d 0x0a缺失,发送端发送了0x0d 0x0a,能收到0x0d但是收不到0x0a,Receive_State总是被置0

使用proteus8.9仿真时,遇到一个奇怪的Bug:发送端发送了0x0d 0x0a,能52只收到0x0d但是收不到0x0a,当校验是否收到
0x0a时Receive_State总是被置0,导致无法接收到完整字符串,如果屏蔽掉校验就能正常使用,很费解。

unsigned char Receive_State=0; //0-5位:长度位  第7位:接受完成标志位  第6位:\r0x0d接受完成标志位
unsigned char Receivr_Buff[30];// 串口接受缓存,最多接受30个字符

void Usart_Serial() interrupt 4
{
    unsigned char Buff_byte;
    ES = 0; //关闭串行中断
    if(RI == 1)
    {
        RI = 0; //清除串行接受标志位
        Buff_byte = SBUF; //从串口缓冲区接收数据
        if((Receive_State&0x80) == 0) // 接收未完成
        {
            if((Receive_State&0x40)) // 接收到了0x0d
            {
//                if(Buff_byte != 0x0a) // 接收错误重新接收  /*Bug发送端发送了0x0d 0x0a,但是收不到0x0a,Receive_State总是被置0*/
//                    Receive_State=0;
//                else
                {
                    Receive_State|=0x80; // 接收完成
                    Receivr_Buff[Receive_State&0X3F] = '\0';
                }
                
            }
            else // 未接收到0x0d
            {
                if(Buff_byte == 0x0d)
                    Receive_State|=0x40;
                else
                {
                    Receivr_Buff[Receive_State&0x3F] = Buff_byte;
                    Receive_State++;
                }
            }
        }
    }
    ES = 1; // 允许串口中断
}