51 串口接受数据问题

void serial_int() interrupt 4{ ES = 0; if (RI==1) { RI=0; switch(k) { case 0:if(SBUF==0xff) { value1[k]=SBUF; k++; } else { k=0; } break; case 1:value1[k]=SBUF;k++;break; case 2:value1[k]=SBUF;k++;break; case 3:value1[k]=SBUF;k++;break; case 4:value1[k]=SBUF;k++;break; case 5:value1[k]=SBUF;k++;break; case 6:value1[k]=SBUF;k++;break; case 7:value1[k]=SBUF;k++;break; case 8:value1[k]=SBUF;k++;break; case 9:value1[k]=SBUF;k++;break; case 10:value1[k]=SBUF;k++;break; case 11:value1[k]=SBUF;k++;break; case 12:value1[k]=SBUF;k++;break; case 13:value1[k]=SBUF; if(value1[k]==0xfe) { k=0;send_all();//返回数据 break;// flag=1; } else { k=0; send_all();//返回数据 break; } default: break; } }ES=1;}这个是我的串口接受程序,我用串口调试助手发送FF 01 01 01 01 02 02 02 02 03 03 03 03 FE第一次能正确返回FF 01 01 01 01 02 02 02 02 03 03 03 03 FE,发送第二次就返回FF FF 01 01 01 01 02 02 02 02 03 03 03 03,第三次又正确,第四次有是错误的FF FF 01 01 01 01 02 02 02 02 03 03 03 03这是什么原因啊,大神帮我看看,谢谢。
2026年09月25日 07:27
有1个网友回答
网友(1):

第三次又正确,第四次有是错误的...

--什么是正确?
--原样返回,就是你的程序的目的吗?
--FF、FE,是头尾的标记吗?
=============
试试下面的:
void serial_int() interrupt 4
{
if (RI) {
RI = 0;
if(SBUF == 0xff) k = 0;
value1[k] = SBUF;
k++;
if((k == 14) {
k = 13;
if(value1[13] == 0xfe) { k = 0; send_all();}//返回数据
}
}
}