📄 at.lst
字号:
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE AT
OBJECT MODULE PLACED IN .\output\AT.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\device\AT.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PRINT(
-.\output\AT.lst) OBJECT(.\output\AT.obj)
line level source
1 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AT命令处理&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2 //*文件名称:AT.c
3
4 //*文件作用:AT命令处理
5
6 //*文件作者:翟 鹏
7
8 //*创建日期:2004年5月
9 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
10
11
12
13 #include <include.h>
14
15
16
17 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&私有算法函数部分&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
-&&&&&&&&&&&&&&
18
19 //********************************************************************************************************
-***************
20 //函数作用:把hex串高低4位对调
21 //参数说明:
22 //注意事项:
23 //返回说明:
24 //********************************************************************************************************
-***************
25 static void swap_low4_and_high4(uchar *hex, uchar length)
26 {
27 1 uchar i;
28 1 uchar temp;
29 1
30 1 if(length&0x01)length++;//修正奇偶
31 1 length>>=1;//转化为字节数
32 1
33 1 for(i=0;i<length;i++)
34 1 {
35 2 temp=hex[i*2];
36 2 hex[i*2]=hex[i*2+1];
37 2 hex[i*2+1]=temp;
38 2 }
39 1 }
40
41 //********************************************************************************************************
-***************
42 //函数作用:把7位数据转化成8位数据
43 //参数说明:
44 //注意事项:
45 //返回说明:
46 //********************************************************************************************************
-***************
47 static uchar Char2Bcd(uchar *hex)
48 {
49 1 uchar i;
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 2
50 1 uchar j;
51 1
52 1 if(*hex>'9')i=*hex-0x37;
53 1 else i=*hex-0x30;
54 1 i<<=4;
55 1 hex++;
56 1
57 1 if(*hex>'9')j=*hex-0x37;
58 1 else j=*hex-0x30;
59 1 i=i|(j&0x0f);
60 1
61 1 return i;
62 1 }
63 static void bit7_to_bit8(uchar *Src, uchar *Dec)
64 {
65 1 uint i,j;
66 1 uint MoveTemp;
67 1
68 1 i=0;
69 1 while(Src[2*i]!=0)
70 1 {
71 2 Src[i]=Char2Bcd(Src+2*i);
72 2 i++;
73 2 }
74 1 Src[i]=0;
75 1
76 1 i=0;j=0;
77 1 do{
78 2 if( (j%8) ==0 )
79 2 {
80 3 Dec[j]=Src[i]&0x7f;
81 3 j++;
82 3 continue;
83 3 }
84 2
85 2 MoveTemp=Src[i]>>(8-j%8);
86 2 Dec[j]=MoveTemp+(Src[i+1]<<(j%8));
87 2 Dec[j]=0x7f&Dec[j];
88 2 i++;j++;
89 2 }while(Dec[j-1]!=0);
90 1 }
91
92 //********************************************************************************************************
-***************
93 //函数作用:把8位数据转化成7位数据
94 //参数说明:
95 //注意事项:
96 //返回说明:
97 //********************************************************************************************************
-***************
98 static void Bcd2Char(uchar *hex, uchar bcd)//bcd码转化成两个字节表示的hex
99 {
100 1 uchar i;
101 1
102 1 i=bcd>>4; // Msb
103 1 if(i>9)i+=0x37;
104 1 else i+=0x30;
105 1 *hex++=i;
106 1
107 1 i=bcd&0x0f; // Lsb
108 1 if(i>9)i+=0x37;
109 1 else i+=0x30;
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 3
110 1 *hex=i;
111 1 }
112
113 //********************************************************************************************************
-***************
114 //函数作用:处理PDU格式的短信息
115 //参数说明:PDU数据缓冲区 dst_no--对方号码 datetime--日期时间 content--短信内容
116 //注意事项:
117 //返回说明:
118 //********************************************************************************************************
-***************
119 static uchar dispose_PDU(uchar *buf, uchar *dst_no, uchar *datetime)
120 {
121 1 uchar *buf_backup=buf;
122 1 uchar i;
123 1 uchar length;
124 1 uchar data_coding;//编码类型
125 1
126 1 //得到短信中心号码长度 并跳过---(0891683108200205F0)
127 1 hex_to_char(buf,&length);//得到长度
128 1 buf+=2;//跳过长度字节
129 1 buf+=(length<<1);//跳过短信中心号码
130 1
131 1 //跳过PDU类型---(24)
132 1 buf+=2;
133 1
134 1 //得到对方号码 并跳过---(0D91683108026344F0)
135 1 hex_to_char(buf,&length);//得到长度
136 1 buf+=2;//跳过长度字节---(0D)
137 1 buf+=2;//跳过类型字节---(91)
138 1 swap_low4_and_high4(buf,length);//号码高低字节转化---(8613802036440F)
139 1 if(buf[0]==0x38 && buf[1]==0x36)//跳过国家代码---(86)
140 1 {
141 2 buf+=2;
142 2 length-=2;
143 2 }
144 1 mem_copy(dst_no,buf,length);//拷贝对方号码
145 1 dst_no[length]=0;//添加结束符
146 1 if(length&0x01)length++;//修正奇偶
147 1 buf+=length;//跳过对方号码---(683108026344F0)
148 1
149 1 //跳过PID和DCS 00和08
150 1 buf+=2;//跳过PID---(00)
151 1 hex_to_char(buf,&data_coding);//得到编码类型
152 1 buf+=2;//跳过DCS---(08或00)
153 1
154 1
155 1 //得到发送日期时间---(40214251029000) 定长---14字节
156 1 swap_low4_and_high4(buf,14);//高低字节转化---(041224152009)
157 1 for(i=0;i<6;i++)
158 1 {
159 2 mem_copy(datetime,buf,2);//拷贝年
160 2 datetime+=3;buf+=2;
161 2 }
162 1 *(datetime-1)=0;//添加结束符
163 1 buf+=2;//跳过毫秒
164 1
165 1 //得到内容长度 并跳过
166 1 hex_to_char(buf,&length);//得到长度
167 1 buf+=2;//跳过长度
168 1
169 1 //根据编码类型判断是否需要PDU字节转换
C51 COMPILER V7.20 AT 11/03/2007 17:08:50 PAGE 4
170 1 if(data_coding==0x00)bit7_to_bit8(buf,buf_backup);//英文---PDU编码进行7转8
171 1 else str_copy(buf_backup,buf);//中文----unicode字符串直接拷贝
172 1
173 1 return data_coding;
174 1 }
175
176
177
178 //命令消息定义
179 #define AT_CMD_HEAD "AT" //命令头
180 #define AT_CMD_END "\r\n" //命令尾
181 #define AT_MSG_READY "RDY" //模块复位成功的信息
182 #define AT_MSG_SIMOK "+CPIN: READY" //SIM卡成功的信息
183
184 #define AT_MSG_LOGINOK "+CREG: " //登陆成功的信息
185 #define AT_MSG_SMSRECEIVE "+CMT" //收到短信的信息
186 #define AT_MSG_RING "RING" //收到来电的信息
187 #define AT_MSG_NOCARR "NO CARR" //对方挂机
188 #define AT_MSG_CLIP "+CLIP" //收到来电显示的信息
189 #define AT_MSG_IPSTATE "STATE:" //IP致命错误提示
190 #define AT_MSG_OK "OK" //命令正确的信息
191 #define AT_MSG_SENDOK "SEND OK" //IP发送成功的信息
192 #define AT_MSG_CONNECTOK "CONNECT OK" //IP连接成功的信息
193 #define AT_MSG_CLOSEOK "CLOSE OK" //IP连接关闭成功的信息
194 #define AT_MSG_SHUTOK "SHUT OK" //移动场景关闭成功的信息
195 #define AT_MSG_SIGNAL "+CSQ" //信号强度信息
196 #define AT_MSG_ERROR "ER" //命令错误的信息
197 #define AT_MSG_SENDFAIL "SEND FAIL" //发送失败的信息
198 #define AT_MSG_CONNECTFAIL "CONNECT FAIL" //连接失败的信息
199 //命令发送字符串定义
200 #define AT_CMD_DISECHO "E0" //禁止回显命令行
201 #define AT_CMD_CREG "+CREG=1" //主动提供网络注册信息
202 #define AT_CMD_SMSPDU "+CMGF=0" //设置短信息为PDU模式
203 #define AT_CMD_SMSTOCOMM "+CNMI=2,2,2,1,0" //短消息直接从串口输出
204 #define AT_CMD_GSMCHARSET "+CSCS=\"GSM\"" //设置GSM字符集
205 #define AT_CMD_TCPIPRECEIVEHINT "+CIPHEAD=1" //设置TCPIP接收数据包头提示
206 #define AT_CMD_TCPIPSENDHINT "+CIPSPRT=0" //关闭TCPIP数据发送时的> 提示
207 #define AT_CMD_FIXLOCALPORT "+CIPFLP=0" //取消固定本地端口
208 #define AT_CMD_SIGNAL "+CSQ" //信号强度
209 #define AT_CMD_CLOCK "+CCLK" //时钟
210 #define AT_CMD_APNSETUP "+CSTT=" //设置APN
211 #define AT_CMD_IPACTIVE "+CIICR" //激活移动场景
212 #define AT_CMD_GETLOCALIP "+CIFSR" //获得本地IP地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -