求助无法识别短信内容

2019-07-15 14:05发布

本帖最后由 人生沙畫 于 2016-5-5 15:16 编辑

/*
//本代码使用STC89C52单片机
//晶振11.0592MHz下测试
//测试使用的板子
*/
#include "main.h"
#include "uart.h"
#include "string.h"               

//****************************************************
//主函数
//****************************************************
void main()
{

        LED1= 0 ;
        ATSTAT();
        Delay_ms(2000);
        //ATSMSFA();
       
        //Delay_ms(2000);
        ATSMSDEL();
        Delay_ms(2000);

                while(1)
        {
          ATSMSJIE();
                  Delay_ms(2000);
                ATSMSDEL();
        }

}

void ATSTAT()  //初始化串口并与GSM握手
{
          Uart_Init();//初始化串口是9600
        Uart2_Init();//初始化串口是9600

        Delay_ms(2000);
        UartPrintf("AT ");//先发AT,让GSM模块自动获取波特率为9600
        Uart2Printf("AT ");//先发AT,让GSM模块自动获取波特率为9600
        Delay_ms(2000);
        UartPrintf("AT&F ");
        Uart2Printf("AT&F ");  //先发AT,让GSM模块出厂默认设置
        Delay_ms(2000);
        UartPrintf("AT+CMGF=1 ");
        Uart2Printf("AT+CMGF=1 ");         //GSM模块方以本模式
        Delay_ms(2000);
        UartPrintf("AT+CSCS="GSM" ");
        Uart2Printf("AT+CSCS="GSM" ");         //GSM模块以GSM字符集发送
        Delay_ms(2000);
        UartPrintf("AT+CNMI=2,1 ");
        Uart2Printf("AT+CNMI=2,1 ");                //开启新短信提示



}

void ATSMSFA(sjhm,dxnr)
{
        UartPrintf("AT+CMGF=1 ");
        Uart2Printf("AT+CMGF=1 ");         //GSM模块方以本模式
        Delay_ms(2000);
        UartPrintf("AT+CSMP=17,167,0,8 ");        //发送中英文文本模式短信
        Uart2Printf("AT+CSMP=17,167,0,8 ");
        Delay_ms(2000);
        UartPrintf("AT+CSCS="UCS2" ");                  //以GSM字符集发送
        Uart2Printf("AT+CSCS="UCS2" ");
        Delay_ms(2000);
        UartPrintf("AT+CMGS="00310033003700360036003600340032003700320031" ");        //电话号码 此处修改参考 GSM使用手册
        Uart2Printf("AT+CMGS="00310033003700360036003600340032003700320031" ");        //电话号码 此处修改参考 GSM使用手册
        Delay_ms(2000);
        UartPrintf("5F53524D6E295EA6003200355EA65F53524D6E7F5EA6003700300025");                //短信内容 此处修改参考 GSM使用手册
        Uart2Printf("5F53524D6E295EA6003200355EA65F53524D6E7F5EA6003700300025");                //短信内容 此处修改参考 GSM使用手册
        Delay_ms(2000);
        UartPrintASCII(0x1a); //发送A字节
        Uart2PrintASCII(0x1a);

}

void ATSMSJIE()
{
if(strstr(RX_Buffer,"+CMti")!=NULL)  //缓存中有+CMTI字符
          
        {
       
       
           UartPrintf("youduanxinxile ");
           Delay_ms(2000);
       Uart2Printf("AT+CMGR=1 "); //读取1号位置的短信
       Delay_ms(2000);
       UartPrintf("duquduanxinxi ");
           //isReceiveOKOrTimeout();
           Delay_ms(2000);
           if(strstr(RX_Buffer,"k1")!=NULL)
             {
           LED1=1;
               UartPrintf("dakai ");
             }else{
              UartPrintf("dusibai1 ");
              }
         
         
         
         }
}
void ATSMSDEL()
    {
    Uart2Printf("AT+CMGD=1,4 ");
        Delay_ms(2000);
        //isReceiveOKOrTimeout();
        Delay_ms(2000);
        //UartPrintf("delete SMS OK ");

    }
void isReceiveOKOrTimeout()
{
        unsigned int count = 0;
        int i = 0;

        while(count < 60000)         //要接收到0K或者超时跳出
        {
                i++;
                if( i == 10)
                {
                        i = 0;count++;
                }
                if(flagReceive){
                        flagReceive = 0;       
                        if(
                                RX_Buffer[0] == 'O'       
                                && RX_Buffer[1] == 'K'
                                && RX_Buffer[2] == ' '       
                                && RX_Buffer[3] == ' '                       
                        )

                                UartPrintf("duquOK----------------- ");

                                break;


                }
        }               
       
}

//****************************************************
//MS延时函数(11.0592M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
        unsigned int  i,j;
        for(i=0;i<n;i++)
                for(j=0;j<1230;j++);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
人生沙畫
1楼-- · 2019-07-15 19:24
高手们,在线等回复
人生沙畫
2楼-- · 2019-07-15 23:27
本帖最后由 人生沙畫 于 2016-5-5 15:17 编辑

就是这段代码读取不了短信内容
void ATSMSJIE()
{
if(strstr(RX_Buffer,"+CMTI")!=NULL)  //缓存中有+CMTI字符
          
        {
       
       
           UartPrintf("youduanxinxile ");
           Delay_ms(2000);
       Uart2Printf("AT+CMGR=1 "); //读取1号位置的短信
       Delay_ms(2000);
       UartPrintf("duquduanxinxi ");
           //isReceiveOKOrTimeout();
           Delay_ms(2000);
           if(strstr(RX_Buffer,"k1")!=NULL)
             {
           LED1=1;
               UartPrintf("dakai ");
             }else{
              UartPrintf("dusibai1 ");
              }
         
         
         
         }
}
liujinyi016
3楼-- · 2019-07-16 00:08
 精彩回答 2  元偷偷看……

一周热门 更多>