三个while函数

[复制链接]
楼主: jiajs
手机看帖
扫描二维码
随时随地手机跟帖
wuhany| | 2018-12-23 17:08 | 显示全部楼层
判断串口3接收SIM900A反馈的数据已经完成

使用特权

评论回复
jlyuan| | 2018-12-23 17:13 | 显示全部楼层
接收“\r\n”来判断接收完成

使用特权

评论回复
zhaoxqi| | 2018-12-23 17:16 | 显示全部楼层
没有结束的标志位吗?

使用特权

评论回复
huangchui| | 2018-12-23 17:19 | 显示全部楼层
应该有间隔吧。

使用特权

评论回复
wuhany| | 2018-12-23 17:24 | 显示全部楼层
不行,因为如果碰到多行反馈的话会出现多次的“\r\n”

使用特权

评论回复
yszong| | 2018-12-23 17:26 | 显示全部楼层
你现在用的啥

使用特权

评论回复
wuhany| | 2018-12-23 17:31 | 显示全部楼层
一开始判断数据长度,再延时50ms在判断一次,如果两个长度相等也不等于0表示数据接收完成

使用特权

评论回复
jiaxw| | 2018-12-23 17:35 | 显示全部楼层
可以啊

使用特权

评论回复
wuhany| | 2018-12-23 17:38 | 显示全部楼层
这种方法虽然现在没出现问题,但终归不靠谱,撇开效率问题不讲,光这个延时就不一定可靠。。。

使用特权

评论回复
wuhany| | 2018-12-23 17:41 | 显示全部楼层
虽然转发没有什么问题,问题是出在我想判断接收的数据是否是我需要的数据,如果不是就丢弃,是的话再转发,现在的状况是接收一行就直接把一行转发了,我都无法判断是否是我要的数据。

使用特权

评论回复
yszong| | 2018-12-23 17:44 | 显示全部楼层
你做的这个,在GPRS接收时,是叫串口消抖。如下:

Glast_r为GPRS收到的长度,
_pRecBuf0为串口中断的时_pRecBuf0++
每次收到GPRS数据时,先消抖,再进行转发操作。
if(_pRecBuf0>0)
{
   RecVary0();
   …………
   ……
   ……
}
void RecVary0()
{
while(1)
   {
    Glast_r = _pRecBuf0; Delay_ms(20);  
    if(Glast_r == _pRecBuf0) break;   
   }                                 
}
其中这个Delay_ms(20);  通过波特率是多少,来算,9600bit/s=9.6bit/ms 约等于1Byte/ms,你就可以大致算一下,20ms能收到几个字节,一般以10个以上的字节为准。
这个时间需要你自己测试来改,
以Delay_ms(10),
Delay_ms(20),
Delay_ms(30),

使用特权

评论回复
dengdc| | 2018-12-23 17:46 | 显示全部楼层
sim900 回复:"OK"  900A没用过

使用特权

评论回复
jiajs|  楼主 | 2018-12-23 17:48 | 显示全部楼层
这个也可以通过接收延时来处理的啊,这个需要先根据所需要接收的信息的数据长度的估计所需要的时间的,然后给出时间余量的

使用特权

评论回复
jiajs|  楼主 | 2018-12-23 17:51 | 显示全部楼层
SIM900发送有分节符的。
一般都是回车键结束。

使用特权

评论回复
zhanghqi| | 2018-12-23 17:59 | 显示全部楼层
你可以通过\r\n来判断。

使用特权

评论回复
zhenykun| | 2018-12-23 18:02 | 显示全部楼层
正常有分隔符,就是sim900的驱动程序。

使用特权

评论回复
wyjie| | 2018-12-23 18:08 | 显示全部楼层
不能判断的话,可以中断直接转发掉就行。

使用特权

评论回复
jlyuan| | 2018-12-23 18:11 | 显示全部楼层
上位机可以通过结束符号进行判断。

使用特权

评论回复
huangchui| | 2018-12-23 18:12 | 显示全部楼层
应该是可以判断\r\n的
“\r\n”应该有ascii码的,可以用来判断的吧

使用特权

评论回复
zhuhuis| | 2018-12-23 18:14 | 显示全部楼层
结束都是结束符号

使用特权

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

本版积分规则