找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6412|回复: 17
打印 上一主题 下一主题
收起左侧

关于51单片机串口接受缓存的问题

  [复制链接]
跳转到指定楼层
楼主
ID:125016 发表于 2019-2-19 11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3黑币
我想自定义一个字符缓存数组,把单片机从串口调试助手接收到的数据存起来。问题是我从串口助手发送第一组字符,单片机存起来后,我该怎么清空缓存数组来接收下一组字符。

最佳答案

查看完整内容

可以使用如下思路《添加结束符》 1.接收到新数据 存入 缓存 2.接收到 结束符号 如‘!’ 将缓存中的数据处理 处理完成后 通过for循环清空缓存 3.继续等待 新的串口数据
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:69072 发表于 2019-2-19 11:15 | 只看该作者
可以使用如下思路《添加结束符》
1.接收到新数据 存入 缓存
2.接收到 结束符号 如‘!’  将缓存中的数据处理  处理完成后 通过for循环清空缓存
3.继续等待 新的串口数据
回复

使用道具 举报

板凳
ID:94031 发表于 2019-2-19 11:41 | 只看该作者
既然用了数组,数组就有下标,接收到的数据一直往数组存,下标一直增加,直到数组使用后数组下标再从“0”开始存。
回复

使用道具 举报

地板
ID:77479 发表于 2019-2-19 12:25 | 只看该作者
不用手动清空,当接收下一组字符时,原来的缓存数组会自动清空。
回复

使用道具 举报

5#
ID:477934 发表于 2019-2-19 13:38 | 只看该作者
数组接收,数据一直往数组里存

评分

参与人数 2黑币 +20 收起 理由
static + 12 回帖助人的奖励!
春风十里吹 + 8

查看全部评分

回复

使用道具 举报

6#
ID:217820 发表于 2019-2-19 13:43 | 只看该作者
直接覆盖就行
回复

使用道具 举报

7#
ID:217820 发表于 2019-2-19 13:44 | 只看该作者
直接覆盖就行,反正数据你已经存起来了
回复

使用道具 举报

8#
ID:125016 发表于 2019-2-19 14:13 | 只看该作者
xuyaqi 发表于 2019-2-19 11:41
既然用了数组,数组就有下标,接收到的数据一直往数组存,下标一直增加,直到数组使用后数组下标再从“0” ...

不太行啊,如果不使用的话,岂不是一直往下存,都乱了
回复

使用道具 举报

9#
ID:125016 发表于 2019-2-19 14:14 | 只看该作者
gd2051 发表于 2019-2-19 12:25
不用手动清空,当接收下一组字符时,原来的缓存数组会自动清空。

不啊,主要就是怎么判断是不是下一组数据,串口助手发的一组字符是没有结束标志的
回复

使用道具 举报

10#
ID:432823 发表于 2019-2-19 21:49 | 只看该作者
一般后面读入数值会将前面的覆盖的,也可以在存入后,将缓存数组清零。
回复

使用道具 举报

11#
ID:158375 发表于 2019-2-20 13:38 | 只看该作者
你就不能加一个计数器,来计数你的数组里面的个数?
回复

使用道具 举报

12#
ID:478484 发表于 2019-2-20 14:39 | 只看该作者
设置一个时间,如果两个字符间隔时间长,直接就认为下一个字符串
回复

使用道具 举报

13#
ID:18297 发表于 2019-2-20 15:19 | 只看该作者
数组清零2个方法:
数组data[20];
方法1,
for(i=0;i<20;i++)
{
     data[i]=0       ; /清0;
}
方法2
使用memset函数
memset(data,0,20);
具体使用可以参看百度查找memset函数的使用说明。
回复

使用道具 举报

14#
ID:385318 发表于 2019-2-20 16:26 | 只看该作者

直接覆盖吧,这样应该可以
回复

使用道具 举报

15#
ID:477934 发表于 2019-2-20 17:44 | 只看该作者
这也不是很难,像LCD12864就有自定义自符数组,就看你玩不玩的开

评分

参与人数 2黑币 +31 收起 理由
sheng7533967 + 15
站着说话不腰疼 + 16

查看全部评分

回复

使用道具 举报

16#
ID:125016 发表于 2019-2-22 11:02 | 只看该作者
凤姐438 发表于 2019-2-19 13:17
可以使用如下思路《添加结束符》
1.接收到新数据 存入 缓存
2.接收到 结束符号 如‘!’  将缓存中的数据 ...

最后还是采用自定义起始结束标志了,memset清空,还是这样最为方便一些,把你这个设为最佳了
回复

使用道具 举报

17#
ID:367803 发表于 2019-3-5 23:43 | 只看该作者
看看,学习下;
回复

使用道具 举报

18#
ID:93224 发表于 2019-5-19 18:17 | 只看该作者
添加结束符只是一种简单的办法,对于有的买的模块是不定长度字符串,而且往往正常的字符串后面都没有结束符号,这个时候就要借助于定时器来检测一帧不定长的数据,这个方法比较高效,具体的办法,你可以加我的QQ 1014461948,我把原工程文件发给你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表