51单片机串口通讯的一点疑问,如下程序

2024-12-31 18:39:01
推荐回答(5个)
回答1:

关于原程序:当选择0xaa时 SBUF=0x12,然后进入中断,此时rdata=subf=0x12,返回,此时没有0x12的选项则不执行操作,依旧是rdata=subf=0x12,TI=0。也就是说每次(没有选择0xaa以前除外)执行完switch语句后TI总是=0,subf始终为0x12。另外当选择0xaa时,如果TI=0则while(!TI)成为死循环。

回答2:

把TI = 0这一句移到中断里面,Rdata = 0xff;
这句移到TI=0原来的位置,看看如何。
如果还是不行,先确定0xaa有无循环重复发送。如果没有再找问题。

回答3:

1、把中断中的if(!TI){} 去掉,
2、把“Rdata = SBUF;”加在主循环的“while(!TI);”前面
3、再试试
4、问题解决

回答4:

程序不够清晰

回答5:

在case语句中
TI = 0;
后面得加上break;