关于单片机控制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;
}
} 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开始 lixin91985 发表于 2012-11-9 19:54 static/image/common/back.gif
uchar call(uchar *phone)
{uchar i=0x00,time;
Delay_ms(100);
我希望能接收到短信之后能实时提醒,有没有串口的方式啊 有。 自己仔细看说明书,虽然长的点,但作为工程师,应该有沉下心来的定力。
可以设置短信到达后 发送提醒的命令,告诉你当前短信的存储BOX。
然后你发送读取命令。
页:
[1]