微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助无法识别短信内容

求助无法识别短信内容

时间:10-02 整理:3721RD 点击:

/*
//本代码使用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\r\n");//先发AT,让GSM模块自动获取波特率为9600
        Uart2Printf("AT\r\n");//先发AT,让GSM模块自动获取波特率为9600
        Delay_ms(2000);
        UartPrintf("AT&F\r\n");
        Uart2Printf("AT&F\r\n");  //先发AT,让GSM模块出厂默认设置
        Delay_ms(2000);
        UartPrintf("AT+CMGF=1\r\n");
        Uart2Printf("AT+CMGF=1\r\n");         //GSM模块方以本模式
        Delay_ms(2000);
        UartPrintf("AT+CSCS=\"GSM\"\r\n");
        Uart2Printf("AT+CSCS=\"GSM\"\r\n");         //GSM模块以GSM字符集发送
        Delay_ms(2000);
        UartPrintf("AT+CNMI=2,1\r\n");
        Uart2Printf("AT+CNMI=2,1\r\n");                //开启新短信提示

}
void ATSMSFA(sjhm,dxnr)
{
        UartPrintf("AT+CMGF=1\r\n");
        Uart2Printf("AT+CMGF=1\r\n");         //GSM模块方以本模式
        Delay_ms(2000);
        UartPrintf("AT+CSMP=17,167,0,8\r\n");        //发送中英文文本模式短信
        Uart2Printf("AT+CSMP=17,167,0,8\r\n");
        Delay_ms(2000);
        UartPrintf("AT+CSCS=\"UCS2\"\r\n");                  //以GSM字符集发送
        Uart2Printf("AT+CSCS=\"UCS2\"\r\n");
        Delay_ms(2000);
        UartPrintf("AT+CMGS=\"00310033003700360036003600340032003700320031\"\r\n");        //电话号码 此处修改参考 GSM使用手册
        Uart2Printf("AT+CMGS=\"00310033003700360036003600340032003700320031\"\r\n");        //电话号码 此处修改参考 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\r\n");
           Delay_ms(2000);
       Uart2Printf("AT+CMGR=1\r\n"); //读取1号位置的短信
       Delay_ms(2000);
       UartPrintf("duquduanxinxi\r\n");
           //isReceiveOKOrTimeout();
           Delay_ms(2000);
           if(strstr(RX_Buffer,"k1")!=NULL)
             {
           LED1=1;
               UartPrintf("dakai\r\n");
             }else{
              UartPrintf("dusibai1\r\n");
              }
         
         
         
         }
}
void ATSMSDEL()
    {
    Uart2Printf("AT+CMGD=1,4\r\n");
        Delay_ms(2000);
        //isReceiveOKOrTimeout();
        Delay_ms(2000);
        //UartPrintf("delete SMS OK\r\n");
    }
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] == '\r'       
                                && RX_Buffer[3] == '\n'                       
                        )
                                UartPrintf("duquOK-----------------\r\n");
                                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++);
}

高手们,在线等回复

就是这段代码读取不了短信内容
void ATSMSJIE()
{
if(strstr(RX_Buffer,"+CMTI")!=NULL)  //缓存中有+CMTI字符
          
        {
       
       
           UartPrintf("youduanxinxile\r\n");
           Delay_ms(2000);
       Uart2Printf("AT+CMGR=1\r\n"); //读取1号位置的短信
       Delay_ms(2000);
       UartPrintf("duquduanxinxi\r\n");
           //isReceiveOKOrTimeout();
           Delay_ms(2000);
           if(strstr(RX_Buffer,"k1")!=NULL)
             {
           LED1=1;
               UartPrintf("dakai\r\n");
             }else{
              UartPrintf("dusibai1\r\n");
              }
         
         
         
         }
}

读取不了是读取不出来,还是读取的是错的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top