逻辑上应该没有问题,只是if(rec_temp==0x0a)下面的rec_buf[count]=rec_temp;这句是无意义的,因为在这之前已经赋值到rec_buf数组中了。逻辑上没有问题的话有可能是接收中断处理时间过长导致第还没处理完第一个数据第二个数据已经在SBUF中丢失了。你试试把波特率改低一点看看。
看程序没什么问题,多发几个数据或者多发几次看看数据那里丢了