2020-02-05 09:22发布
cn520 发表于 2012-5-13 11:00 我猜你是这里有点问题,另外你最好把你的AT指令发送程序帖出来,大家才能帮你解决. 还有GSM模块最主要的就是 ...
cn520 发表于 2012-5-13 11:39 你的号码前面不要用+86看看
最多设置5个标签!
#include "common.h"
char RxBuf[RxBuf_N]={0}; //定义串口接收数据缓冲区
uchar RxPoint; //Rx缓冲区指针
bit flag=0; //用来等待发送信息结束后,接收TC35响应的标志
uchar PhoneNum[15]="+8615122930645"; //手机号码
const uchar *MsContent="I Love You !"; //短信内容
//查找字符串,在s中查找t
//返 回 值: s_temp(t在s中的位置)成功 ,0失败
char *LookFor_Str(uchar *s, uchar *t)
{
uchar *s_temp;
uchar *m_temp;
uchar *t_temp;
if (s == 0 ||t == 0) return 0;
for (s_temp = s; *s_temp != ' '; s_temp++)
{
m_temp = s_temp;
for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
if (*t_temp == ' ') return s_temp;
}
return 0;
}
//发送"AT"联机指令,测试是否连接正确
void Send_AT(void)
{
uchar *p;
uchar i=10;
while(i--) //测试10次,在某一次成功就退出
{
RxPoint=0; //buffer指针清0
SendString("AT "); //发送AT回车
ES=1; //必须中断 串口中断应许 等待应答"OK"
//delay_ms(100); //等待接受数据完成
while(flag==0);
flag=0;
delay_ms(300);
p=LookFor_Str(RxBuf,"OK"); //接收到的数据存在RsBuf
if(p!=0) //接收到"OK"
{
PutStr(0,0,"GSM 模块正常 ");
delay_ms(1000);
break;
}
PutStr(0,0,"没检测到GSM 模块");
delay_ms(500);
}
}
//设置短信模式 1:text模式 0:PDU模式
//串口发送数组命令到TC35,AT+CMGF=1
void Set_Mode(uchar mode)
{
uchar *p,i=10;
while(i--) //测试10次,在某一次成功就退出
{
RxPoint=0; //buffer指针清0
if(mode) SendString("AT+CMGF=1 "); //设置短消息模式 1 TEXT
else SendString("AT+CMGF=0 "); //设置短消息模式 PDU模式
ES=1; //必须中断 串口中断应许 等待应答"OK"
//delay_ms(300); //等待接受数据完成
while(flag==0);
flag=0;
delay_ms(300);
p=LookFor_Str(RxBuf,"OK"); //接收到的数据存在RsBuf
if(p!=0) //接收到"OK"
{
PutStr(1,0,"短信模式:text");
delay_ms(1000);
break;
}
PutStr(1,0,"短信模式设置失败");
delay_ms(500);
}
}
//发送号码
void Send_PhoneNum(uchar *str)
{
uchar i=0;
while(*str)
{
SendASC(*str) ;
str++;
i++;
if(i==14) break; //只发送14个
}
}
//发送TEXT短信 AT+CMGS="+8615122930645"
//*dialnum 目的号码 *text短信内容
//返回:1 发送成功 0 发送失败
uchar TransmitText(uchar *dialnum,uchar *text)
{
uchar i=10,j=10;
uchar *p;
while(i--)
{
RxPoint=0; //buffer指针清0
SendString("AT+CMGS="); //信息发送指令 AT+CMGS="+8613760602242"
SendASC('"');
Send_PhoneNum(dialnum); //号码
SendASC('"');
SendASC(' '); //回车
while(flag==0);
flag=0;
delay_ms(300);
p=LookFor_Str(RxBuf,">"); //">"
if(p!=0) //如果接受到 > 发送text
{
RxPoint=0; //清空接收缓冲区
SendString(text); //发送短信内容
SendString("x1a "); //'x1a'结束符(相当CTRL+Z) ' '回车符
while(flag==0);
flag=0;
delay_ms(5000); //这里要延时足够长时间,否则会读取错误
p=LookFor_Str(RxBuf,"OK"); //查找OK
if(p!=0) //发送成功
{
PutStr(2,0,"To: ");
PutStr(2,2,dialnum+3);
PutStr(3,0,"发送成功 ^_^");
return 1;
}
else
{
PutStr(2,0,"发送失败");
delay_ms(1000);
PutStr(2,0,"正在重发");
}
}
}
PutStr(2,0,"多次重发失败");
return 0;
}
//完整的短信发送函数
//dialnum:手机号码 text:短信内容
void Send_Message(uchar *dialnum,uchar *text)
{
Send_AT(); //发送AT
Set_Mode(1); //设置短信模式:text
TransmitText(dialnum,text); //设置
}
谢谢您了啊。。。。。
也还是一样啊。。。
一周热门 更多>