单片机uart 数据接收不完整

我通过串口调试工具,向芯片发送数据,但是每次都是接收到数据中的一个或者两个,接收不完整。

void serial () interrupt 4

{
u8 inuartnum = 0;
u8 aa ;
while (1 == RI_0)
{
RI_0 = 0;
aa = SBUF0;

}
ReadFlag = 1;

}
或者:
void serial () interrupt 4

{
u8 inuartnum = 0;
u8 UARTBuf[36]=0;
while (1 == RI_0) {
RI_0 = 0 ;

    UARTBuf[inuartnum]=SBUF0;               
    inuartnum++;             
}
ReadFlag = 1; 

}

这两种方式我都试过了,都是接收一两个数据。咋弄的呀?奔溃了。