一是:如果串口收到数据,产生中断后。我先处理其它程序没有给RI归0时。那么发送方是会继续按时钟发送数据呢。还是等到我接收方软件RI归位后才接着发送呢。
二是:如果双方同时发大量(不止一个字节)数据时,会怎么样?因为我单片机每发送一个字节都会while(!TI);TI=0;这里有循环。假如我发5个字节,就会有5个循环在处理,那么对方发数据来时。会产生中断。去执行接收处理程序了。这里的发送循环是不是就被中断了,那么对我的发送就会产生影响吧。但是我上机测试,发现结果是,发送循环一直正常。倒是对方发来的数据丢掉了中间5个字节。这是怎么回事。
如果我想双方都同时发送接收数据。单片机里应该怎么写。是不是应该软件里设置个结束符(比如0x0d),比如收到对方发来的结束符,表示上位机命令发送完了。然后我根据这个判断。再将结果发送回去。发送完了再加一个结束符,上位机才知道可以发送一条命令了。
主要就是发送接收同时进行的问题。我迷糊好久了。麻烦指导一下。按理说,如果上位机发查询命令,下位机收到规定的结束符后再发送结果,这样是不会有什么问题的。但这只适用于双方有规定的查询命令协议(一人说一句话的来)时。
如果双方都有可能不定期发送数据怎么办。比如。上位机可以随时查询下位机温度。随时可以下发查询命令。但下位机每隔60秒又定时在向上位机报告温度。不管上位机请求没有。这种情况就有可能数据线上同时在发送和接收多字节数据(如果刚好时间巧合的话)。那么这种情况会造成什么样的数据丢失?我上机试了,确实不正常,但我搞不懂原理。
麻烦各位指教一下