串口接收数据,如何只把SBUF中的第一个字节给Data

unsigned char Recive()     
{
    unsigned char  date;
    while(RI == 0);
        RI = 0;
    date = SBUF;
    return date;

}
 

参考GPT和自己的思路:

根据你的问题,如果你只想接收串口数据中的第一个字节,可以在while循环之前添加一个if语句,判断SBUF寄存器是否已经有数据,并且只取出第一个字节。修改后的代码如下所示:

unsigned char Recive()

{

unsigned char date; 

while(RI == 0); 

RI = 0; 

if(SBUF & 0x01)  // 判断 SBUF 中是否有数据,并且只取出第一个字节
{
  date = SBUF & 0xff;
}

return date; 

}

通过这样的修改,只有串口接收到数据时,才会取出SBUF寄存器中的第一个字节,并返回给调用者。