关于51控制tc35的一些问题,希望好心大侠帮忙看看

2020-02-05 09:22发布

tc35板子是按这原理图连的.最后调试能进入;联网模式了。但是一直发不出短信。卡没有欠费。然后串口通信的线也保证对了。去论坛一些地方看。都说是软件原因。。但是我感觉软件没问题。想请问各大侠。还有其他的硬件原因吗?希望得到您们的指点。。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
78条回答
我的名字叫洪辉
2020-02-11 17:45
cn520 发表于 2012-5-13 11:00
我猜你是这里有点问题,另外你最好把你的AT指令发送程序帖出来,大家才能帮你解决.

还有GSM模块最主要的就是 ...

#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);        //设置
}


一周热门 更多>