标题: 关于51单片机串口接受缓存的问题 [打印本页]

作者: 卢森    时间: 2019-2-19 11:15
标题: 关于51单片机串口接受缓存的问题
我想自定义一个字符缓存数组,把单片机从串口调试助手接收到的数据存起来。问题是我从串口助手发送第一组字符,单片机存起来后,我该怎么清空缓存数组来接收下一组字符。

作者: 凤姐438    时间: 2019-2-19 11:15
可以使用如下思路《添加结束符》
1.接收到新数据 存入 缓存
2.接收到 结束符号 如‘!’  将缓存中的数据处理  处理完成后 通过for循环清空缓存
3.继续等待 新的串口数据
作者: xuyaqi    时间: 2019-2-19 11:41
既然用了数组,数组就有下标,接收到的数据一直往数组存,下标一直增加,直到数组使用后数组下标再从“0”开始存。
作者: gd2051    时间: 2019-2-19 12:25
不用手动清空,当接收下一组字符时,原来的缓存数组会自动清空。
作者: struct00    时间: 2019-2-19 13:38
数组接收,数据一直往数组里存
作者: CZP1234    时间: 2019-2-19 13:43
直接覆盖就行
作者: CZP1234    时间: 2019-2-19 13:44
直接覆盖就行,反正数据你已经存起来了
作者: 卢森    时间: 2019-2-19 14:13
xuyaqi 发表于 2019-2-19 11:41
既然用了数组,数组就有下标,接收到的数据一直往数组存,下标一直增加,直到数组使用后数组下标再从“0” ...

不太行啊,如果不使用的话,岂不是一直往下存,都乱了
作者: 卢森    时间: 2019-2-19 14:14
gd2051 发表于 2019-2-19 12:25
不用手动清空,当接收下一组字符时,原来的缓存数组会自动清空。

不啊,主要就是怎么判断是不是下一组数据,串口助手发的一组字符是没有结束标志的
作者: yaoji123    时间: 2019-2-19 21:49
一般后面读入数值会将前面的覆盖的,也可以在存入后,将缓存数组清零。
作者: 笨笨兔    时间: 2019-2-20 13:38
你就不能加一个计数器,来计数你的数组里面的个数?
作者: xiongjb    时间: 2019-2-20 14:39
设置一个时间,如果两个字符间隔时间长,直接就认为下一个字符串
作者: zjjhtony    时间: 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函数的使用说明。
作者: CrlikenNN    时间: 2019-2-20 16:26

直接覆盖吧,这样应该可以
作者: struct00    时间: 2019-2-20 17:44
这也不是很难,像LCD12864就有自定义自符数组,就看你玩不玩的开
作者: 卢森    时间: 2019-2-22 11:02
凤姐438 发表于 2019-2-19 13:17
可以使用如下思路《添加结束符》
1.接收到新数据 存入 缓存
2.接收到 结束符号 如‘!’  将缓存中的数据 ...

最后还是采用自定义起始结束标志了,memset清空,还是这样最为方便一些,把你这个设为最佳了
作者: xixi2006    时间: 2019-3-5 23:43
看看,学习下;
作者: lele5211314    时间: 2019-5-19 18:17
添加结束符只是一种简单的办法,对于有的买的模块是不定长度字符串,而且往往正常的字符串后面都没有结束符号,这个时候就要借助于定时器来检测一帧不定长的数据,这个方法比较高效,具体的办法,你可以加我的QQ 1014461948,我把原工程文件发给你




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1