⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsm.txt

📁 dsmmoden编程为起收发和大电话功能
💻 TXT
字号:
GSM MODEM的收发程序奉献出来
将外置GSM MODEM的收发程序奉献出来.

这个是经过测试的.很好用.稍微慢了点.

//GSM MODEM通信任务
void ModemInitTask(void * argv)
{
 argv=argv;
 UART_Init(COMPORT);
 
 for(;;)
 { 
  
  UART_open(COMPORT,9600,8,'n',1,0);
  OSTimeDly(OS_TICKS_PER_SEC);
  if (ModemInit(COMPORT)==true)
  { 
   char * s;
   s="\r\nAT+CMGL=ALL\r\0";
   OSTimeDlyHMSM(0,0,1,0);//延时1s读一次MODEM,时间自定
   if(true==UART_write(COMPORT,s,strlen(s),200)) //向MODEM发AT命令
   { 
    INT16U i=0, len;
    char databuff[1024];;                                                    
    OSTimeDly(OS_TICKS_PER_SEC);
    i=0;while(i<1024)    databuff[i++]=0;
    len=UART_read(COMPORT,databuff,sizeof(databuff),OS_TICKS_PER_SEC);//读AT命令的返回信息    览???? ??? ??
       if (len>27)   
    {   
     char  * p[20],* buff;
     char  strtel[20];
     char  num[4];
     INT16U ii=0;
     
     buff=databuff;
     i=0;
     while((p[i]=strtok(buff,"\n"))!=NULL) //分割字符串
     { 
      buff=NULL;
      if (i==0) {i++; continue;}
      
      if(i%2!=0)
      {
       char * temp;
       if((temp=strstr(p[i],"+86"))!=NULL)//14手机号码
       {
        ii=0;while(ii<14) strtel[ii++]=0;
        ii=0;while(ii<14) strtel[ii++]=*temp++;
        strcat(strtel,"\r\n\0");
       }
       
       if((temp=strstr(p[i],"+CMGL:"))!=NULL)//取短消息序号
       {
        char  strnum[4];
        INT16U j=0;
        char * p=temp+6;//+6去掉"+CMGL:"
        ii=0;while(ii<4)
        {
          num[ii]=0;
         strnum[ii]=0; 
         strnum[ii]=*p++;
         ii++;
        }
        
        ii=0;while(ii<4)
        {
         if (strnum[ii]>=0x30 && strnum[ii]<=0x39)
          num[j++]=strnum[ii];
         ii++;
        }
       }
      } 
      else /////if(i%2==0)
      {
       char strbuff[SMSLEN];
       char CMGD[20];
       char temp[40];
       char *pCMGS;
       char *pCMGD;
       
       
       /////CMGD删除短消息AT命令
       ii=0;while(ii<20) CMGD[ii++]=0;
       s=NULL;
       s="\r\nAT+CMGD=";
       strcat(CMGD,s);
       strcat(CMGD,num);
       ii=0;while(ii<4) num[ii++]=0;//清除序号
       strcat(CMGD,"\r\n\0");
       
       
       ///////////////////////
       if(*p[i]!='!')  
       {
        //删除非法短信
        pCMGD=CMGD;
        if (TRUE==UART_write(COMPORT,pCMGD,sizeof(pCMGD),OS_TICKS_PER_SEC))
        {
         pCMGD=NULL;
         DelayNS(2000);
         OSTimeDly(OS_TICKS_PER_SEC);
         //ii=0;while(ii<20) CMGD[ii++]=0;
         
        }
        i++;continue;
       }
       if(strlen(p[i])<40) 
       {
        //删除非法短信
        pCMGD=CMGD;
        if (TRUE==UART_write(COMPORT,pCMGD,sizeof(pCMGD),OS_TICKS_PER_SEC))
        {
         pCMGD=NULL;
         DelayNS(2000);
         OSTimeDly(OS_TICKS_PER_SEC);
         //ii=0;while(ii<20) CMGD[ii++]=0;
         
        }
        i++;continue;
       }
       //////////////////////
       ///////////////////////发送电话号码AT命令
       ii=0; while(ii<(40)) temp[ii++]=0;
       strcat(temp,"\r\nAT+CMGS=");
       strcat(temp,strtel);
       ii=0; while(ii<20) strtel[ii++]=0;//清除TEL
       ///////////////////////监控协议解析
       ii=0; while(ii<SMSLEN) strbuff[ii++]=0;
       ii=0; while(*p[i]!='\0')  strbuff[ii++]=*p[i]++;
       if (TRUE==ParseCode(strbuff))
       {
        
        OSTimeDly(OS_TICKS_PER_SEC);
        //发送电话号码AT命令
        pCMGS=temp;
        if (TRUE==UART_write(COMPORT,pCMGS,strlen(pCMGS),OS_TICKS_PER_SEC))
        {
         char  tempbuff[20];
         char * pBUFF;
         char * str;
         char  context[SMSLEN+4];
         
         pCMGS=NULL;
         ii=0; while(ii<(SMSLEN+4)) context[ii++]=0;
         strcat(context,strbuff);
         strcat(context,"\x01a");
         
         DelayNS(5);
         ii=0; while(ii<20) tempbuff[ii++]=0;
         len=UART_read(COMPORT,tempbuff,sizeof(tempbuff),OS_TICKS_PER_SEC); //读AT命令的返回信息
         str=tempbuff;
         if(NULL!=strstr(str,"\r\n>"))
         { 
          str=NULL;
          //发送回应
          pBUFF=context;
          if (TRUE==UART_write(COMPORT,pBUFF,strlen(pBUFF),OS_TICKS_PER_SEC))
          {
           pBUFF=NULL;
           DelayNS(2000);
           ii=0; while(ii<20) tempbuff[ii++]=0;
           len=UART_read(COMPORT,tempbuff,sizeof(tempbuff),OS_TICKS_PER_SEC); //读AT命令的返回信息
           str=tempbuff;
           if(NULL!=strstr(str,"\r\nOK\r\n"))
           {
            str=NULL;
            //发送回应成功后,删除此短信
            pCMGD=CMGD;
            if (TRUE==UART_write(COMPORT,pCMGD,strlen(pCMGD),OS_TICKS_PER_SEC))
            {
             pCMGD=NULL;
             DelayNS(2000);
             ii=0;while(ii<20) tempbuff[ii++]=0;
             len=UART_read(COMPORT,tempbuff,sizeof(tempbuff),OS_TICKS_PER_SEC); //读AT命令的返回信息
             str=tempbuff;
             if(NULL!=strstr(str,"\r\nOK\r\n"))
              str=NULL;
            }
           }
          }
         }
        }
       }
       else
       {
        //解析不成功,删除不合格短信
        pCMGD=CMGD;
        if (TRUE==UART_write(COMPORT,CMGD,sizeof(CMGD),OS_TICKS_PER_SEC))
        {
         pCMGD=NULL;
         DelayNS(2000);
         OSTimeDly(OS_TICKS_PER_SEC);
         ii=0;while(ii<20) CMGD[ii++]=0;
         
        }
       }
      }
      i++;
                 }
     i=0;while(i<SMSLEN) databuff[i++]=0;
    }
   }
  }
  UART_close(COMPORT);
  OSTimeDly(OS_TICKS_PER_SEC);
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -