关于原程序:当选择0xaa时 SBUF=0x12,然后进入中断,此时rdata=subf=0x12,返回,此时没有0x12的选项则不执行操作,依旧是rdata=subf=0x12,TI=0。也就是说每次(没有选择0xaa以前除外)执行完switch语句后TI总是=0,subf始终为0x12。另外当选择0xaa时,如果TI=0则while(!TI)成为死循环。
把TI = 0这一句移到中断里面,Rdata = 0xff;
这句移到TI=0原来的位置,看看如何。
如果还是不行,先确定0xaa有无循环重复发送。如果没有再找问题。
1、把中断中的if(!TI){} 去掉,
2、把“Rdata = SBUF;”加在主循环的“while(!TI);”前面
3、再试试
4、问题解决
程序不够清晰
在case语句中
TI = 0;
后面得加上break;