我觉的你的代码不行,我觉的你还没有建立起来内存中数据的概念
51 的 sbuf 是 8 位的寄存器,可是你的 tab 变量数组,是 u16 类型,16位的数据, sbuf= tab[] 你这一个赋值语句,把 16 位的数据装到 8 位的寄存器中,已经丢了 tab[] 高 8 位的数据了,怎么可能正确?
建议你参考一下 51 单片机教程,串口发送的程序,找个简单代码看看,消化吸收一下再说