89C52RC单片机,串口通讯的问题

请教各位L师 ,为啥我下面的这段代码不用中断不能收发? 就是有信号51单片机也全部是00 00 00


#include 
void URET_TX(unsigned int key)

{    
        SBUF=key;//写入数据进SBUF缓存器
        while(TI==0)//检测标志位,是否置1,如果置1,表示数据传输完成
            {TI=0;}//重置标志位位0
            if(RI==1)//检测是否接收完成
            {P2=SBUF;//读取发送过来的SBUF数据
       RI=0;}//重置标志位
}
void URET_Tu(void)
 
{     
  PCON |= 0x80;        //使能波特率倍速位SMOD
    SCON = 0x50;        //8位数据,可变波特率
    TMOD &= 0x0F;        //设置定时器模式
    TMOD |= 0x20;        //设置定时器模式
    TL1 = 0x15;        //设置定时初值
    TH1 = 0x15;        //设置定时重载值
  ET1 = 0;        //
    TR1 = 1;         //定时器1中断

     
}
void main(void)
{ 
    URET_Tu();
while(1)
{
    URET_TX(SBUF);
}
}

参考GPT和自己的思路:

根据你提供的代码来看,UART通讯需要中断模式才能够正常收发数据。可能是因为你没有开启中断,导致无法正常收发数据。你可以尝试在注册中断服务函数后,在URET_Tu()函数中打开串口中断开关,即ES = 1;,或者在main()函数中打开中断,即EA = 1;,这样就可以进入中断处理程序,正常收发数据。此外,你的URET_TX()函数中,第8行应该是TI=0;,而不是{TI=0;}