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

📄 smsdrive.lst

📁 51单片机控制TC35模块的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 880          
 881          
 882          
 883          //******************************* 用户指令接收与处理**************************  
 884          /*===========================================
 885          设置来消息提示后, 
 886          接收到:0D 0A 2B 4D 43 54 49 3A 20 22 53 4D 22 2C 36 0D 0A
 887          对应字符:
 888          
 889                    +CMTI: "SM",6<CR>
 890          *=============================================*/
 891          
 892          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -///////////////////////////////////////
 893          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -///////////////////////////////////////
 894          /*********************************************************************
 895           *                  C51中字符串函数的扩充                            *
 896           *********************************************************************/
 897          /*
 898          int strsearch(U8 ptr2[])
 899          //查字符串*ptr2在*ptr1中的位置
 900          //本函数是用来检查字符串*ptr2是否完全包含在*ptr1中
 901          //返回:  0  没有找到
 902          //       1-255 从第N个字符开始相同
 903          {
 904          //、    uchar max_length;
 905          /*      U8 i,j,k;
 906                  U8 flag;
 907                  if(ptr2[0]==0) return(0);
 908                  flag=0;
 909                  for(i=0,j=0;i<MAX_TM-2;i++)
 910                  {
 911                  if(rec[i]==ptr2[j])
 912                  {//第一个字符相同
 913                          for(k=i;k<MAX_TM-2;k++,j++)
 914                          {
 915                                  if(ptr2[j]==0)//比较正确
 916                                          return(i+1);               //返回值是整数,不含0
C51 COMPILER V7.08   SMSDRIVE                                                              04/12/2010 21:34:57 PAGE 16  

 917                                  if(rec[k]!=ptr2[j]) 
 918                                                  {
 919                                                          
 920                                                  }
 921                          }
 922                          j=0;
 923                  }
 924                  }
 925                  return(0);
 926          
 927             int i=0,j=0;
 928             int k=0;
 929                  for(i=0,j=0;i<1000;i++)
 930                  {
 931                          if(rec[i]==ptr2[j])
 932                          {led2=0;
 933                                  if(k>=strlen(ptr2))
 934                                  {
 935                                  return 1;       
 936                                  }
 937                                  j++;
 938                              k++;        
 939                          }
 940                          else
 941                          {
 942                                  j=0;
 943                          }
 944                          
 945                          
 946          
 947                  }
 948          
 949          return 0;
 950          
 951          
 952          
 953          
 954          
 955          
 956          }*/
 957          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//////////////////////////////////////
 958          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -///////////////////////////////////////
 959          U8 strsearch(U8 *ptr2,U8 *ptr1_at)//查字符串*ptr2在*ptr1中的位置
 960          //本函数是用来检查字符串*ptr2是否完全包含在*ptr1中
 961          //返回:  0  没有找到
 962          //       1-255 从第N个字符开始相同
 963          {
 964   1      //、    uchar max_length;
 965   1              U8 i,j,k;
 966   1              U8 flag;
 967   1              if(ptr2[0]==0) return(0);
 968   1              flag=0;
 969   1              for(i=0,j=0;i<MAX_TM-2;i++)
 970   1              {
 971   2              if(ptr1_at[i]==ptr2[j])
 972   2              {//第一个字符相同
 973   3                      k=i;
 974   3                      //for(k=i;k<MAX_TM-2;k++,j++)
 975   3                      do {
 976   4                              if(ptr2[j]==0)//比较正确
C51 COMPILER V7.08   SMSDRIVE                                                              04/12/2010 21:34:57 PAGE 17  

 977   4                                      return(i+1);               //返回值是整数,不含0
 978   4                              if(ptr1_at[k]!=ptr2[j]) break;
 979   4                              k++;j++ ;
 980   4                      } while(k<MAX_TM-2) ;
 981   3      
 982   3                      j=0;
 983   3              }
 984   2              }
 985   1              return(0);
 986   1      }
 987          
 988          /*********************************************************************
 989           *                  C51中字符串函数的扩充                            *
 990           ** 函数名称    : strsearch1()
 991           ** 函数功能    : 在指定的数组里连续找到相同的内容
 992           ** 入口参数   : ptr2=要找的内容, ptr1 当前数组, id 数组开始的第一个位置
 993           **** 出口参数 : 0-没有 找到   >1 查找到
 994           *********************************************************************/
 995          //------在指定移态的数组里连续找到相同的内容---------------------------------------
 996          //i=传来的指令,  *ptr2=要找的内容, uchar *ptr1 当前数组
 997          U8 strsearch1(U8 i,U8 *ptr2,U8 *ptr1)
 998          {      U8 j=0,k;
 999   1                              k=i;
1000   1            do{
1001   2                      if(ptr1[k]==ptr2[j])
1002   2                      {j++;k++;}
1003   2                      else return(0);
1004   2                      if(ptr2[j]==0)  return(k);
1005   2              }while(j<=60);
1006   1              return(0xff);
1007   1      }
1008          ///////////////////////////////////////////////////////////////////////////////////////////////////
1009          
1010          /*********************************************************************************************************
1011          ** 函数名称      read_sms()
1012          ** 函数功能               进行SIM卡的电话本读
1013          ** 全局变量或数组:   receive_count 接收指针
1014          ** 入口参数      :  AT指令 字符串str_code -para_temp   str_at- uart_buff
1015                                  *str_at=要复制的内容/转AT指令
1016                              str_code 短信内容
1017                                  *ptr_tel   电话号码
1018          
1019          ** 出口参数     : 1-成功      0-失败
1020          *********************************************************************************************************
1021          */
1022          
1023          //====================================================
1024          U8  read_sms(char* ptr1_at,char* ptr1_code,char* ptr_tel)
1025          {
1026   1      
1027   1               U16  i;
1028   1           U8 idata j; 
1029   1           U8 idata PDU_TEXT;
1030   1                                    // 英文模式
1031   1                                    //+CMGR: "REC READ","8613818120592",,"09/06/25,14:16:33+32",145,4,0,0,"8613800210500",
1032   1                                              //145,3
1033   1                                              //END  0
1034   1                                   //  2B 43 4D 47 52 3A 20 22 52 45 43 20 52 45 41 44 22 2C 22 38 36 31 33 38 31 38 31 32 30 35 39 3
             -2 22
1035   1                                   //2C 2C 22 30 39 2F 30 36 2F 32 35 2C 31 34 3A 31 36 3A 33 33 2B 33 32 22 2C 31 34 35 2C 34 2C 30 
             -2C 30
1036   1                                   // 2C 22 38 36 31 33 38 30 30 32 31 30 35 30 30 22 2C
C51 COMPILER V7.08   SMSDRIVE                                                              04/12/2010 21:34:57 PAGE 18  

1037   1                                       //31 34 35 2C 33 0D 0A 45 4E 44 0D 0A 30 0D
1038   1                          //READ","
1039   1          if((i=strsearch("READ\",\"",ptr1_at)))
1040   1              {      i=i+6;
1041   2      
1042   2                      for(j=0;j<20;j++)
1043   2                               {
1044   3                                       ptr_tel[j]=rec[i++];
1045   3                                              if(rec[i]==0x22)   break;
1046   3                                       }
1047   2                       ptr_tel[j+1]=0;     ptr_tel[j+2]=0x00;
1048   2      
1049   2             }
1050   1                                          //AT_CMGF1
1051   1      
1052   1             timercount=0; while(timercount<8)  ;
1053   1                               //从短信代码中找到维一代码与内容间的字符
1054   1          if((i=strsearch("\x0d\x0a",ptr1_at)))
1055   1              {     i=i+1;//指针移动两位,指向内容的第一个字符
1056   2                                                            //----内容复制-将内容放到para_temp里------------
1057   2                      for(j=0;j<=MAX_T-3;j++)
1058   2                           {
1059   3                             ptr1_code[j]=ptr1_at[i++];
1060   3                                                        //大小写转换
1061   3                              toupper(ptr1_code[j]);
1062   3                                              if(ptr1_at[i]==0x0d)
1063   3                                                          { ptr1_code[++j]=0; break;
1064   4                                                      }
1065   3                                      if(i>=MAX_TM)  break;
1066   3                           }
1067   2                                       //---------------------
1068   2              }
1069   1              
1070   1                  PDU_TEXT=1;//文本
1071   1      
1072   1      
1073   1      
1074   1      
1075   1        //------------------------------------------------------------
1076   1              i=0;
1077   1                 if(strsearch1(i,"START",ptr1_code))
1078   1                 {
1079   2      
1080   2      
1081   2                                      IO_OUT=0; //继电器吸合
1082   2                                  strcpy(ptr1_code,"OUT ON OK\x1a");
1083   2      
1084   2                                       return(1);
1085   2      
1086   2                      }
1087   1                else if(strsearch1(i,"END",ptr1_code))
1088   1                 {
1089   2      
1090   2      
1091   2                                       IO_OUT=1;   // 继电器断开
1092   2                                      strcpy(ptr1_code,"OUT OFF OK\x1a");
1093   2                                       return(1);
1094   2      
1095   2                      }
1096   1      
1097   1      
1098   1      
C51 COMPILER V7.08   SMSDRIVE                                                              04/12/2010 21:34:57 PAGE 19  

1099   1      
1100   1              //-------------------------------------------------------------------
1101   1      
1102   1                       else {
1103   2      
1104   2                        IO_OUT=1; 
1105   2                                              
1106   2                 
1107   2      
1108   2                               }
1109   1      
1110   1      
1111   1      
1112   1              return(0);
1113   1      
1114   1      
1115   1      
1116   1      
1117   1      
1118   1      }
1119          
1120          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//////////////////////////////////////
1121          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -////////////////////////////////////////
1122          void RuleProcess(void)
1123          {
1124   1      
1125   1      while(1)
1126   1              {
1127   2      
1128   2                      if(count>=15)
1129   2                      {
1130   3                              //if(rec[3]=='C'&&rec[4]=='M'&&rec[5]=='T'&&rec[6]=='I') 
1131   3                              //{//ydl++;
1132   3              if(rec[count-5]=='S'&&rec[count-4]=='M')
1133   3                                      {int ll=0;
1134   4                      //                                       
1135   4                                              
1136   4                                      TC35_AtCmgr();
1137   4                          read_sms(rec,para_temp,TEL_temp); 
1138   4                                              flag=0;
1139   4                              count=0; 
1140   4                          
1141   4                          DelayMs(250);
1142   4                          DelayMs(250);
1143   4                          DelayMs(250);
1144   4                          DelayMs(250);
1145   4                          //ll=strsearch(Content_rule);  // TC35读取短消息,rec[14]中存放的是新短信在SIM卡中所处
             -地址
1146   4                                      //if(ll)
1147   4                              //      {
1148   4                                              //      led1=0;
1149   4                                              //} 
1150   4                                              
1151   4                                          TC35_AtCmgd();
1152   4                            }
1153   3                              
1154   3                      }
1155   2              }
1156   1         ReceiveFlag=0;
1157   1          
C51 COMPILER V7.08   SMSDRIVE                                                              04/12/2010 21:34:57 PAGE 20  

1158   1         
1159   1      }       
1160          
1161          
*** ERROR C249 IN LINE 1161 OF SMSDRIVE.C: 'DATA': SEGMENT TOO LARGE

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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