打印
[应用相关]

关于串口中断实时接收和发送问题

[复制链接]
696|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bbapple|  楼主 | 2016-12-24 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口中断实时接收:我的理解是设置一个缓存,但是这个缓存一定要大于你发送字节的最大长度,只要SBUF中有数据就往缓存里面装,因为中断的进入是不确定的,只要有数据就进中断,如果缓存中的数据满了就从头再装,(这里可以取余),那么会不会从头再装的数据会不会把前面的数据给覆盖掉呢,有这个想法很好,至少你考虑了接收的过程。再看看我们设的缓存的长度比发送字符串的最大长度还要大,即使接收的是最长的数据串,那么缓存中还有一部分内存可以装数据,这样下一包数据过来就可以装到剩下的内存里面了,如果这一组数据还没有装完呢,接着从头装把前面的数据覆盖掉,此时前面的数据我们已经提取到了或者是已经是处理完了,所以不必担心前面被覆盖的数据。那么话又说回来,怎么提取接收到的数据呢,这个嘛就是缓存里面只要有数据接收就去提取,事先最好判断一下有没有需要提取的数据,这里大概说一下思路,设置一个提取结束指针和中断中的接收指针进行对比,如果这个提取结束指针小于中断接收指针则说明接收缓存里面有数据,就去提取。那么怎么把数据拿出来呢,根据发送结束指针和中断接收指针计算缓存中接收数据的长度,最大长度就是缓存长度。长度计算出来了即开始取数据啦,取出来就可用啦。。。。
串口中断发送:
了解了串口接收的话,那么相信你很容易了解发送,其实发送和接收正好是互逆的过程。
沙发
handleMessage| | 2016-12-24 18:25 | 只看该作者
接收是把SBUF中的数据取出来,发送数把SBUF中的数发出去

使用特权

评论回复
板凳
zhouhuanの| | 2016-12-24 18:29 | 只看该作者
这个写的过程就是接收的逆过程吧。

使用特权

评论回复
地板
渔夫的烟斗| | 2016-12-29 08:43 | 只看该作者
SBUF=0X00;
A=SBUF;
?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

293

主题

1811

帖子

1

粉丝