我来回答你的第一的问题,毕竟比较容易回答,当然我也就是单纯的看看,没有做过实验。
你的问题出现在主函数中的while(1)大循环,当然,里面只有一个子函数,你发现了么,你的子函数一头一尾连起来以后,就是第一个调用结束时的EA=1,没过多少时间,马上到了第二个调用的头,是个EA=0,也就是说你的程序只有很小一段时间比例里总中断是打开的,从而导致中断无效。当然,我个人认为这么点时间中断程序应该也会进入(因为排队)。不管怎么说,你这么写程序还是不对的,你不应该过多的控制EA,不是有串口的中断允许么(应该是ES吧,初始化的时候关上就行了),你用他不就完事了么,哦貌似你已经关上了,那就把你子函数那两个EA删掉把,这里不怕被中断打断的。
至于你的初始化,我实在不高兴查资料比对了。就麻烦你自己再检查检查是不是初始化正确了。
我还是不小心查了下,我认为TMOD应该设置成0x21,呃,貌似你没错,但是最好直接赋值,像你上面那样可能不会错但是不保险。
总之就按你下面那个初始化程序应该就行,而且你不是说你的单片机只发不收么(见你对别人的追问),那你还REN=1干嘛,应该不管或者最好=0 啊。对了,你还ET1=1了,这个是个大问题,定时器1不是波特率发生器么,你应该把他的中断允许关了,说不定这是你程序错误的根源。
许久没碰,本来做过的也不多,希望发现我说错的大虾口下留情。
强烈要求选为最佳,要是哪儿没解决接受追问,反正时间够嘛,我很少回答的~~,呵呵,我正在试试能不能把我的采纳率弄上去。
1、程序烧进去,串口接收显示一个菜单!《如图》A、B、……分别代表一定看样子你是UART口知道怎么发多个字节,但是不知道怎么收多个字节,希望下面