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

作者&投稿:邱星 (若有异议请与网页底部的电邮联系)
大家好!有谁遇到过串口调试的时候,单片机只会发送数据,不会接收数据的问题。 刚开始的时候首发都没有问~

1.检查硬件是否有问题。
2.检查单片机接收程序,是中断接收还是查询方式?
3.编写测试程序:1)开机后发送固定数据;2)将接收到的数据马上回送;
问题应该很快解决的

看下了程序,应该是没什么问题的,虽然波特率设置成4800后,在时钟12MHz情况下有3%误差,但不至于影响通信,尤其只是做实验的前提下。如果使用串口调试助手调试,检查一下波特是否设置为4800,数据格式是否为8-N-1,即无校验位,8位数据和1位停止位。看看调试助手是否勾选了自动清除功能。同时可以查看Rx和Tx计数,如果这两个数字都不是0,证明串口收发正常,只是数据没被隐藏了。另外需要检查串口电缆是否损坏。

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

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

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

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


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

阜康市13333636038: 哪位大神知道,单片机串口通信,单片机发送完数据后怎么停止发送,假 -
纳卖灯盏: 设置单片机工作式单片机自识别接收数据起始位停止位取走除掉起始位停止位真数据发送起始位停止位由单片机硬件自加 四吧5数据普通串口电平高低或相位同数据含起始位结束位

阜康市13333636038: 计算机通过串口给51单片机传输文件,51单片机是怎么知道文件已传输完毕 -
纳卖灯盏: 1种方案是计算机上设计1个客户端,接收完成无误,返回一个代码道单片机表示接收完成;2个方案是单片机可以直读取计算机缓冲区的数据以判别完成传输否;3最简单,单片机传输带有校验码的数据,如果没有请求重复数据,则认为传输完成;

阜康市13333636038: 单片机的串口通信中发送了数据到SBUF, 一定要CPU空白while(1);等它发完吗? 可不可以发出就执行其他语句
纳卖灯盏: 不一定,但在下一次发送新数据前一定要检测前面的数据是否发送完成.

阜康市13333636038: 51单片机串口通讯,数据在发送后,上位机没有接收到数据. -
纳卖灯盏: 51单片机,数据在发送后,上位机没有接收到数据.而且,串口中断也没进去,弄了很久不知道是什么问题!---- 既然没有收到,也没有进入串口中断,那么,你怎么就知道,数据发送出去了?既然,你确信是发出去了,应该就是上位机的问题,那么,你换一个上位机,再试试看.

阜康市13333636038: 单片机的串口通信中发送了数据到SBUF, 一定要CPU空白while(TI == 0);等它发完吗? 可不可以发出就执行其他 -
纳卖灯盏: 不可,因为波特率的限制,如果不等待发送完成就清零,很有可能数据没有发送出去,因此必须要等待

阜康市13333636038: 计算机和单片机串口通信 -
纳卖灯盏: 1、 你要发送的数据,经串行口发送后,SCON中的TI会置1,这时候就会有串行口中断,通知单片机数据已经发送成功,单片机就可以进入串行口中断程序(汇编中入口地址0023H),这时候你就可以再一次发送数据,也就是将数据写到SBUF...

阜康市13333636038: 怎样判断主机给单片机发送完一串数据 -
纳卖灯盏: 这就是通信协议的问题,双方规定一次通信传送多少位,那么当单片机从收到第一位数据那一刻起计数,比如说双方规定一次传送8位有效数据,那么当收到第八位有效数据后就认为通信结束,当然还可以在发送结束后加上一位结束标志位用来通知从设备通信结束.这只是简单的串行通信,如果传送的数据是变长的那么就要有专门的标识结束的数据用来通知从设备发送完毕,从设备在接受数据时不停判断是否收到这样的数据,当收到时就认为通信结束.

阜康市13333636038: pc机与单片机串口通信问题 利用串口通信助手将一个字符串发给单片机 单片机返回一个字符串到串口通信助手 -
纳卖灯盏: 问题出在你发送时关掉中断,因为丢掉了数据造成的,解决的办法是:延时一段时间等待接收完毕后再发送,比如检测到有接收数据后,延时10毫秒,之后再发送回PC.

阜康市13333636038: 关于单片机串口发送和接收问题:连续发送过来的数据如何接收? -
纳卖灯盏: 不会的了 设备与设备之间要有一定的通信协议才能有良好的通信过程 比较明显的就是要配置一样的波特率 如用9600的波特率 那代表1S发送9600位也就是9600/8=1200个字节 也就是1S/1200约为1MS左右的时间发送字节 单片机处理速度都是微秒级别的 在接收到第一个字节后完全有时间处理再接收 不过时间不能太长 另外串口接收用中断接收比较保险 中断程序中只做存储数据很简单的判断 接收完整后再处理所有的数据

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网