zhd1021 发表于 2012-11-9 18:10:55

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

蛋疼了好几天了,就是没有办法接受并提示,一下是我的接受代码,求赐教:void serial (void) interrupt 4 using 1
{
if (RI)
{
        RI = 0 ;
        i_sms=SBUF;
        re=i_sms;
        if(i_sms=='V')
                {
                        i_sms=0;       //短信接收完毕;
                }                       
}
else
TI=0;
}
void readsms()
{
        delay1ms(500);
        if((re=='+')&&(re=='C')&&(re=='M')&&(re=='T'))
                        {
                        P1=0X89;

                        }
}

lixin91985 发表于 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=='O'&&receive_buf=='N') {i=0xff;}
                  if(receive_buf=='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!='9'||(time>130))
           {i=0x00;}
    }
Delay_ms(1000);
return i;
}

oid send_message(uchar *buf,uchar *phone)
{uchar t,m_center,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=receive_buf;}
length=strlen(buf);
t=((length+15)%10)+0x30;
t=((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);
sendchar(m_center);
}
sendchar('F');
sendchar(m_center);
sendstr("11000D9168",10);
for(i=0;i<10;i+=2)
{sendchar(phone);
sendchar(phone);
}
sendchar('F');
sendchar(phone);
sendstr("000800",6);
if((length%16)>=10) {t=(length%16)+(0x41-0x0A);}
else t=(length%16)+0x30;
t=(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!='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=='O')&&(receive_buf=='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==rec_unread){new_message=0xff;}//REC UNREAD
      else {new_message=0x00;break;}
      }
   if(new_message==0x00)
      {for(i=0;i<4;i++)
              {if(receive_buf==empty) new_message=0x0f;
                  else {new_message=0x00;break;}
                   }
           }
}// 64开始

zhd1021 发表于 2012-11-9 20:01:01

lixin91985 发表于 2012-11-9 19:54 static/image/common/back.gif
uchar call(uchar *phone)
{uchar i=0x00,time;
   Delay_ms(100);


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

lixin91985 发表于 2012-11-10 12:50:31

有。 自己仔细看说明书,虽然长的点,但作为工程师,应该有沉下心来的定力。

可以设置短信到达后 发送提醒的命令,告诉你当前短信的存储BOX。
然后你发送读取命令。
页: [1]
查看完整版本: 关于单片机控制GSM接收短信,求大神解惑