📄 smsdrive.lst
字号:
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 + -