串口通信 如果单片机发送方发送完毕数据后,接收方接收数据没有来得及 怎么办?

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:29:16
如果单片机发送数据,发送完过后,接收方的SUBF里就有了刚接受到的数据,同时接收方的RI置1,然后由于接收方在执行其他程序没有执行完,没有把RI软件清零,那么发送方此时又要发送数据,那么怎么办呢?此时发送方还可以发送数据吗?假如可以,接收方还接受吗?
如果要是接受方软件把RI清零后,接收方才可以接受数据,那么假如在它没有把RI清零之前,发送方发的数据就会丢失吗?还是发送方不会发送数据呢?
要是前者数据丢失怎么办了呢?
另外要是要是接收方把RI清零过后,还没有来得及把SUBF里面的数据转移出去,接受方又发来数据,那又怎么办呢??

有没有好心人告诉我一下啊 ?
有没有谁告诉我怎么知道发送方跟接收方的串口通信时序关系啊 ?

是这样的,串口之间要能很好的互相通信,就要有比较严格的波特率,约好用什么样的校验,等等就是所说的协议
你所担心的是这样的,串口能信发送方在发送之前它会呼叫接收方,看对方是否准备好接收,那发送方发送一个应答信号,发送方才会发送数据,不会有像人担心的那样,接收方没有准备好就发送
同样在接收完以后,接收方也会发出一个信号,请求对方发送,这也就是采用中断来进行串口通信,那么要是用查讯的方法的话,cpu会在每个机器周期对这个信号进行查讯,以做出相应的动作
像你说的接收方将RI清零之前,发送方的数椐会不会丢,那cpu先会检测看你的ri是不己经允许接收,是不己经准备好,等允许后才会发送数据,

解决办法就是编个协议,甲方发送的数据乙方收到后回复一个指令,比如甲发:0x2a 乙收到了就返回个数 比如0x0d

在发送前可以先询问乙的状态,如果正忙则继续询问,直到乙端可以接收数据

这个要看你中断的优先级了,如果发送不成功,这时候协议就起作用了,协议会给一个接受不成功的信号,要求重发