关于单片机串口通讯问题

大家好 我在做一个单片机串口通讯控制流水灯 效果是:当我输入0时 第一个流水灯亮,返回数据是0xfe,输入1时,第二个流水灯亮,返回数据是0xfd,以此类推....... 但是我的程序达不到那个效果,请高手些解释一下 具体程序如下:
#include<reg52.h> //包含头文件
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xfe,0xfd,0xfb,
0xf7,0xef,0xdf,
0xbf,0x7f};

/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(uchar *s);
void SendByte(unsigned dat);
void delay(uint z);
//void fangshi_scan();
unsigned char Temp,s;
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{

SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断

}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
P1=0xff;
delay(1024);
InitUART();

SendStr("");

ES = 1;
//打开串口中断
while (1)
{

}
}

/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned dat)
{
SBUF=dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}
/*------------------------------------------------
串口中断程序
------------------------------------------------*/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) // 判断是否接收到中断
{

RI=0;
Temp=SBUF;
P1=table[Temp];
delay(1024);
//P1=Temp;
SBUF=table[Temp];
while(!TI)
TI=0;
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
那请问该怎么修改
SBUF=temp;
while(TI == 0); //等待发送完毕
TI = 0; //清除罩伏顷标志
SBUF=0x0D;
while(TI == 0); //等待发送完物陆毕
TI = 0; //清厅裂除标志
……
每发送一个字节,都需要等待发送完毕。
串口中断有问题