搜索
bottom↓
回复: 3

关于单片机控制GSM接收短信,求大神解惑

[复制链接]

出0入0汤圆

发表于 2012-11-9 18:10:55 | 显示全部楼层 |阅读模式
蛋疼了好几天了,就是没有办法接受并提示,一下是我的接受代码,求赐教:
  1. void serial (void) interrupt 4 using 1
  2. {
  3. if (RI)
  4. {
  5.         RI = 0 ;
  6.         i_sms=SBUF;
  7.         re[n_sms++]=i_sms;
  8.         if(i_sms=='V')
  9.                 {
  10.                         i_sms=0;         //短信接收完毕;
  11.                 }                         
  12. }
  13. else
  14. TI=0;
  15. }
  16. void readsms()
  17. {
  18.         delay1ms(500);
  19.         if((re[0]=='+')&&(re[1]=='C')&&(re[2]=='M')&&(re[3]=='T'))
  20.                         {
  21.                         P1=0X89;

  22.                         }
  23. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入22汤圆

发表于 2012-11-9 19:54:06 | 显示全部楼层
uchar call(uchar *phone)
{  uchar i=0x00,time;
   Delay_ms(100);
   sendstring(AT);
   Delay_ms(1000);
   clean_receive_buf();
   sendstr("ATD",3);Delay_ms(5);
        sendstr("+86",3);Delay_ms(5);
        sendstr(phone,11);
        Delay_ms(15);
        sendchar(';');
        send_enter();
        Delay_ms(400);
        time=0x00;                                                                       
  while(i==0x00)
                 {Delay_ms(500);time++;
                  if(receive_buf[2]=='O'&&receive_buf[8]=='N') {i=0xff;}
                  if(receive_buf[2]=='N') {i=0x0f;}
                  if(time>150) {break;}
                  }
    clean_receive_buf();
    Delay_ms(100);
if(i==0x0f)
   {clean_receive_buf();
    sendstring("AT+CEER");Delay_ms(1000);
    if(receive_buf[12]!='9'||(time>130))
           {i=0x00;}
    }
Delay_ms(1000);
return i;
}

oid send_message(uchar *buf,uchar *phone)
{uchar t[2],m_center[11],length,i;
  Delay_ms(500);
sendstring("AT+CMGF=0");//unicode
Delay_ms(1000);
clean_receive_buf();
sendstring("AT+CSCA?");//获取短信中心
Delay_ms(1000);
for(i=0;i<11;i++) {m_center[i]=receive_buf[13+i];}
length=strlen(buf);
t[1]=((length+15)%10)+0x30;
t[0]=((length+15)/10)+0x30;   //十位
sendstr("AT+CMGS=",8);
Delay_ms(50);
sendstr(t,2);send_enter();
Delay_ms(500);
sendstr("089168",6);
for(i=0;i<10;i+=2)
{sendchar(m_center[i+1]);
sendchar(m_center[i]);
}
sendchar('F');
sendchar(m_center[10]);
sendstr("11000D9168",10);
for(i=0;i<10;i+=2)
{sendchar(phone[i+1]);
sendchar(phone[i]);
}
sendchar('F');
sendchar(phone[10]);
sendstr("000800",6);
if((length%16)>=10) {t[1]=(length%16)+(0x41-0x0A);}
else t[1]=(length%16)+0x30;
t[0]=(length/16)+0x30;
sendstr(t,2);Delay_ms(10);
while(*buf)
        {
        if((*buf/16)>=10) {sendchar(*buf/16+0x41-0x0A);}
        else sendchar(*buf/16+0x30);
        if((*buf%16)>=10) {sendchar(*buf%16+0x41-0x0A);}
        else sendchar(*buf%16+0x30);
        buf++;
        }
clean_receive_buf();
sendchar(0X1A);send_enter();
Delay_ms(4000);
while(receive_buf[15]!='O');
Delay_ms(1500);
sendstring(AT);
Delay_ms(1000);
sendstring(AT_CMGF);//设置短信的格式为text格式                  
Delay_ms(1000);
}

void delete_message(void)
{  Delay_ms(50);
clean_receive_buf();
sendstring(AT_CMGD);
Delay_ms(500);
        if((receive_buf[2]=='O')&&(receive_buf[3]=='K'))
           {clean_receive_buf();
            }
        else {sendstring(AT_CMGD);Delay_ms(500);}
}

void read_message(void)
{ uchar i;
   sendstring(AT);
   Delay_ms(1000);
   clean_receive_buf();   
   sendstring(AT_CMGR);
   Delay_ms(1000);   
   if(Rx>=RxIn) {clean_receive_buf();}

   for(i=0;i<10;i++)
      {if(receive_buf[10+i]==rec_unread[i]){new_message=0xff;}//REC UNREAD
        else {new_message=0x00;break;}
      }
   if(new_message==0x00)
      {for(i=0;i<4;i++)
              {if(receive_buf[9+i]==empty[i]) new_message=0x0f;
                    else {new_message=0x00;break;}
                   }
           }
}// 64开始

出0入0汤圆

 楼主| 发表于 2012-11-9 20:01:01 | 显示全部楼层
lixin91985 发表于 2012-11-9 19:54
uchar call(uchar *phone)
{  uchar i=0x00,time;
   Delay_ms(100);

我希望能接收到短信之后能实时提醒,有没有串口的方式啊

出0入22汤圆

发表于 2012-11-10 12:50:31 | 显示全部楼层
有。 自己仔细看说明书,虽然长的点,但作为工程师,应该有沉下心来的定力。

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

本版积分规则

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

GMT+8, 2024-7-23 15:34

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

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