搜索
bottom↓
回复: 11

单片机接收到新短信提示后获取索引号再读短信时出错

[复制链接]

出0入0汤圆

发表于 2010-8-3 15:37:26 | 显示全部楼层 |阅读模式
我用的GPRS模块是MC52i,部分代码如下:
char instuct1[]="AT+CMGR=";
char instuct2[]="AT+CMGD=";
if(message[0]=='+'&&message[1]=='C'&&message[2]=='M'&&message[3]=='T'&&message[4]

=='I'&&message[5]==':'&&message[7]=='"'&&message[8]=='M'&&message[9]=='T'&&message

[10]=='"')  //通过这个判断有无新短信
{
      index[0] = message[12];              //存短信索引号
      index[1] = message[13];              //存短信索引号
      strcpy(readmessage,instuct1);        //字符串拷贝函数
      strcat(readmessage,index);           //字符串连接函数
      strcat(readmessage,"\r\n");
      strcpy(deletemessage,instuct2);     //字符串拷贝函数
      strcat(deletemessage,index);        //字符串连接函数
      strcat(deletemessage,"\r\n");      
      readmessage_flag = 1;
}
经过上面处理后能够获得短信的索引号,而且也得到了我想要的字符串语句
"AT+CMGR=60\r\n"。我在调试窗口中看到readmessage内容是"AT+CMGR=60 "
我用发送命令函数Send_Data(readmessage)将该语句发送到GPRS模块,但是
GPRS模块返回"ERROR"并没返回短信内容。而我直接发送
Send_Data("AT+CMGR=60\r\n");就能够返回短信内容。对此很是困扰,还望
高手指点。

出0入0汤圆

发表于 2010-8-3 16:04:23 | 显示全部楼层
收到提示后,你发送读全部短信命令不就完了,要搞的这么复杂吗?

出0入0汤圆

 楼主| 发表于 2010-8-3 17:24:21 | 显示全部楼层
回复【1楼】plc_avr 不要迷恋哥只是传说
-----------------------------------------------------------------------

我还需要识别哪些短信是我需要的呀,而且我还要删除短信,MC52i的短信删除好像是只能按索引号删除,不能全部删除吧。

出0入0汤圆

发表于 2010-8-3 17:45:44 | 显示全部楼层
存储空间设置了没有?AT+CMPS
你要换个思维来读和删除短信,从你表述来看可能存在丢掉短信和短信将存储卡塞满的可能。单片机读写短信做好不容易。
至于短信是不是你要的,你可以通过校验电话号码来来处理。

出0入0汤圆

 楼主| 发表于 2010-8-4 08:40:19 | 显示全部楼层
回复【3楼】marker
-----------------------------------------------------------------------
谢谢1楼和3楼的回复
我可以读取全部未读短信,也可按三楼说的按校验电话号码来处理短信,但是仍然不知道该如何删除,不知道三楼说的换种思维是什么思路呢,还望指点。如果MC52i可以像GTM900那样直接删除所有已读短信就好了,呵呵。另外MC52i的AT指令好像没有AT+CMPS

出0入162汤圆

发表于 2010-8-4 09:18:45 | 显示全部楼层
不要指望全部删除短信,标准at指令不支持的,少数厂家的at指令支持。
如果采用全部删除,以后换模块存在兼容性问题

你就一条一条读吧,读完再删除即可

出0入0汤圆

 楼主| 发表于 2010-8-4 09:25:29 | 显示全部楼层
回复【5楼】AWEN2000
-----------------------------------------------------------------------

我现在读不到啊,好郁闷。能告诉我具体怎么读吗?如果能给段代码就更好了,呵呵。
我都调试两天了,还没出结果。哎

出0入0汤圆

 楼主| 发表于 2010-8-4 09:31:19 | 显示全部楼层
最新发现,按照我上面的程序又可以读到短信了。苍天呐,这到底是什么原因啊,我都没改代码啊

出0入0汤圆

发表于 2010-8-4 09:38:06 | 显示全部楼层
char instuct1[]="AT+CMGR=";
char instuct2[]="AT+CMGD=";

//重点在下面的判断上面,你没有判断结束位就来处理,不出现问题才怪。

if(message[0]=='+'&&message[1]=='C'&&message[2]=='M'&&message[3]=='T'&&message[4]

=='I'&&message[5]==':'&&message[7]=='"'&&message[8]=='M'&&message[9]=='T'&&message

[10]=='"'   在此处要加入结束位识别0x0a 0x0d)  //通过这个判断有无新短信
{
      index[0] = message[12];              //存短信索引号
      index[1] = message[13];              //存短信索引号
      strcpy(readmessage,instuct1);        //字符串拷贝函数
      strcat(readmessage,index);           //字符串连接函数  
      strcat(readmessage,"\r\n");
      strcpy(deletemessage,instuct2);     //字符串拷贝函数
      strcat(deletemessage,index);        //字符串连接函数  
      strcat(deletemessage,"\r\n");      
      readmessage_flag = 1;
}

出0入0汤圆

发表于 2010-8-4 09:39:51 | 显示全部楼层
删除时直接从1删到50就可以了,别管那里有没有短信。

出0入0汤圆

 楼主| 发表于 2010-8-4 09:49:31 | 显示全部楼层
回复【8楼】plc_avr 不要迷恋哥只是传说
-----------------------------------------------------------------------

嗯,哥说的有道理。谢谢啦,嘻嘻
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 15:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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