首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > Wireless >

关于串口数据的采集和分离(高分)

2012-04-06 
关于串口数据的采集和分离(高分求助)小弟现在正在用SIM300 GPRS模块在做一些开发,用的是430的单片机。GPRS

关于串口数据的采集和分离(高分求助)
小弟现在正在用SIM300 GPRS模块在做一些开发,用的是430的单片机。GPRS模块和单片机是通过串口进行数据通信的。在写程序的时候遇到了一个很大的麻烦。首先GPRS模块返回数据(向单片机发送数据)具有很大的随机性,什么时候有数据过来时不确定的。在程序中数据接收用的是中断处理,于是问题来了。
比如我想在向SIM300发一个AT指令,指令正确的话应该向单片机返回AT</r></n>OK</r></n>我现在想要对返回的数据进行采集,以便进行分析。但是我该从什么时候开始采集,又该怎么判断采集结束呢,用</r></n>肯定不行,不是因为数据是以</r></n>开始,又是以</r></n>结束,而是假如在向SIM300发完指令,而SIM300还没来得及返回AT</r></n>OK</r></n>时,突然收到一条短信(收到短信,模块也会向单片机返回数据进行提示,这些数据都是以</r></n>开始和</r></n>结束的),这样的话很定会发生误判。又不能采用一直等的方式,这样很容易产生死循环。试了好多方法都不是太理想,比如以有数据发过来,且多长时间没有数据继续发过来作为判结束。这些方法都能判断一帧数据结束,但是不能解决我上面提到的问题,也就是这帧数据是不是之前所发指令所回应的数据。说白了问题的根本就是,可以判断一帧数据结束,但是无法判断着帧数据是不是之前所发指令回应数据,如果就此判断肯定会发生误判。
怎样对串口的数据进行提取才比较安全有效啊,有哪位大虾做过相关开发没,指点指点小弟啊。小弟也写了一些demo程序,也能跑的起来,但是不是太健壮,程序跑飞的情况时有发生。主要就是在串口数据采集过程中存在问题,SIM300模块返回的数据不是误判了,就是没采集到。

[解决办法]
帮顶, 楼主加油啊,小弟也要开始做短信控制方面的了,本人Q: 582237371
[解决办法]
晕死,没人了么。100分啊,别浪费了。
其实我觉得要是只做短信控制方面的话,要简单的多。
[解决办法]
1、程序跑飞和你描述的问题没有关系,肯定是你数组越界或者指针乱指之类的问题
2、我没有使用过GPRS,向你问一个问题,你发送AT指令,GPRS模块返回AT</r></n>OK</r></n>,那么收到短信也是AT</r></n>OK</r></n>吗?如果不是,那么我认为还是可以区分的。
3、你提到的“比如以有数据发过来,且多长时间没有数据继续发过来作为判结束”,这个是超时判断,是必须的
[解决办法]
楼主,我也在调试GPRS模块,而且我也是用430单片机在做。
一起研究哈,加我QQ:279804250。
至于你说的问题,我见人家有这样处理的:
利用字符串函数strstr(char *str1, char *str2)。
strstr(recieve_data,"OK")
receive_data为串口接收数据存放的数组
strstr()函数具体用法你可以百度下就知道了
不知道这个回答你满意不,呵呵

热点排行