请教各位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;}
。