📄 gps_module.lst
字号:
C51 COMPILER V8.02 GPS_MODULE 09/25/2008 19:29:39 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE GPS_MODULE
OBJECT MODULE PLACED IN .\output\bin\gps_module.obj
COMPILER INVOKED BY: C:\Keil802\C51\BIN\C51.EXE gps\gps_module.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;g
-ps\;inter\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\gps_module.lst) OBJECT(.\output\bi
-n\gps_module.obj)
line level source
1 #include "gps_collect.h"
2 #include "gps.h"
3 #include "str_cmp.h"
4 #include "uart1.h"
5 #include "16c554.h"
6 #include <string.h>
7 #include <stdio.h>
8
9 typedef unsigned char uchar;
10 typedef signed char int8s;
11 typedef unsigned int uint;
12 typedef unsigned long ulong;
13
14
15 int gps_mod(uchar *gps_buff);
16 int get_sub_str(uchar *gps_buff, int first_comma, uchar *gps_sub_str);
17 int gps_chk(uchar *gps_buff);
18 int get_format(uchar *gps_buff);
19 int get_time(uchar *gps_buff, uchar *gps_bcd_time);
20 int get_gps_state(uchar *gps_buff, uchar *gps_state);
21 int get_date(uchar *gps_buff, uchar *gps_bcd_date);
22 int get_latitude(uchar *gps_buff, long *gps_latitude);
23 int get_longitude(uchar *gps_buff, long *gps_longitude);
24 int get_speed(uchar *gps_buff, uint *gps_speed);
25 int get_direction(uchar *gps_buff, uint *gps_direction);
26 int get_altitude(uchar *gps_buff, uint *gps_altitude);
27 int get_satelt_num(uchar *gps_buff, uchar *satelt_number);
28 GPS_STRING gps_string;
29 GPS_DATA gps_struct;
30 extern unsigned char uart1RxBuffer[];
31 static char gGps_buff[GPS_DATA_MAXLEN];
32 extern unsigned char gps_receive_flg;
33 extern GPS_LINE_INFO gps_8line[8];
34 extern unsigned char cur_line;
35 extern unsigned char cur_direction;
36 extern unsigned char station_key;
37 extern unsigned char corner_key;
38 /********************************************************************************
39 *
40 * 函数功能:校验GPS一行数据是否正确,正确返回0,错误返回-1
41 * 输入 :缓冲区的一行数据
42 * 输出 :返回判断结果,正确返回0,错误返回-1
43 * 数据包 :GPS数据
44 *
45 ********************************************************************************/
46
47 int gps_chk(uchar *gps_buff)
48 {
49 1 uchar chk=0;
50 1 uchar i=0;
51 1 uchar m=0;
52 1 uchar *pt=NULL;
53 1 pt=gps_buff;
C51 COMPILER V8.02 GPS_MODULE 09/25/2008 19:29:39 PAGE 2
54 1 /*找'$'符号:找到'$'符号,正常处理进行校验和计算,找不到'$'符号,一直循环直到遇到'\0',结束;*/
55 1
56 1 while (*pt!='\0')
57 1 {
58 2 if (*pt!='$')
59 2 {
60 3 pt++;
61 3 }
62 2 else if (*pt=='$')
63 2 {
64 3 pt++;
65 3 while((*pt != '*')&&(i<GPS_DATA_MAXLEN)) /*指向'*'前的字符,且整个GPRMC字符数小于80*/
66 3 {
67 4 chk ^= *pt; /*对'$'字符后,'*'字符前的所有字符进行异或,得到校验和*/
68 4
69 4 pt++;
70 4
71 4 i++;
72 4 }
73 3
74 3 pt+=1;
75 3
76 3 if((*pt>='0')&&(*pt<='9')) /*如果是字符'0~9',变成数字0~9*/
77 3 {
78 4 m = *pt-0x30;
79 4 }
80 3 else /*如果是字符'A~Z',变成数字A~Z*/
81 3 {
82 4 m = *pt-0x41+10;
83 4 }
84 3
85 3 pt+=1; /*指向'*'后的第二个字符*/
86 3
87 3 m = (m<<4) ; /* 第一个字符左移4位 */
88 3
89 3 if((*pt>='0')&&(*pt<='9')) /*如果是字符'0~9',变成数字0~9*/
90 3 {
91 4 m += *pt-0x30;
92 4 }
93 3
94 3 else
95 3 {
96 4 m += *pt-0x41+10;
97 4 }
98 3
99 3 if(m == chk)
100 3 {
101 4 return GPS_OK;
102 4 }
103 3
104 3 else
105 3 {
106 4 return GPS_ERROR;
107 4 }
108 3 }
109 2 }
110 1 }
111
112 /********************************************************************************
113 *
114 * 函数功能:提取缓冲区中的6种格式的数据
115 * 输入 :缓冲区的数据
C51 COMPILER V8.02 GPS_MODULE 09/25/2008 19:29:39 PAGE 3
116 * 输出 :缓冲区的各种帧格式的数
117 * 数据包 :GPS数据
118 *
119 ********************************************************************************/
120
121 int get_format(uchar *gps_buff)
122 {
123 1 uchar gps_header[6];
124 1 uchar i=0;
125 1
126 1 /*定义协议头*/
127 1 uchar code gps_head[7][6]={"GPRMC","GPGGA","GPTXT","GPGSV","GPGSA","GPGLL","GPZDA"};
128 1
129 1 /* 取GPS字符串头部,以用于后序GPS报文类型的判断、结果的返回! */
130 1
131 1 while(*gps_buff!='\0')
132 1 {
133 2 if('$'!=*gps_buff)
134 2
135 2 gps_buff++;
136 2
137 2 else if ('$'==*gps_buff)
138 2 {
139 3 gps_buff+=1;
140 3
141 3 for (i=0; i<5; i++)
142 3 {
143 4 gps_header[i]=*gps_buff;
144 4
145 4 gps_buff++;
146 4 }
147 3
148 3 gps_header[5]='\0';
149 3
150 3 if (!str_cmp(gps_header,gps_head[0]))
151 3 {
152 4 return GPRMC;
153 4 }
154 3
155 3 else if (!str_cmp(gps_header, gps_head[1]))
156 3 {
157 4 return GPGGA;
158 4 }
159 3
160 3 else if (!str_cmp(gps_header, gps_head[2]))
161 3 {
162 4 return GPTXT;
163 4 }
164 3
165 3 else if (!str_cmp(gps_header, gps_head[3]))
166 3 {
167 4 return GPGSV;
168 4 }
169 3
170 3 else if (!str_cmp(gps_header, gps_head[4]))
171 3 {
172 4 return GPGSA;
173 4 }
174 3
175 3 else if (!str_cmp(gps_header, gps_head[5]))
176 3 {
177 4 return GPGLL;
C51 COMPILER V8.02 GPS_MODULE 09/25/2008 19:29:39 PAGE 4
178 4 }
179 3
180 3 else if (!str_cmp(gps_header, gps_head[6]))
181 3 {
182 4 return GPZDA;
183 4 }
184 3
185 3 else
186 3 {
187 4 return GPS_ERROR;
188 4 }
189 3 }
190 2 }
191 1 }
192
193 /********************************************************************************
194 *
195 * 函数功能:将时间数据压缩成BCD编码
196 * 输入 :原始时间数据
197 * 输出 :时间的压缩BCD编码
198 * 数据包 :GPRMC
199 *
200 ********************************************************************************/
201
202 int get_time(uchar *gps_buff, uchar *gps_bcd_time)
203 {
204 1 uchar comma=1;
205 1 uchar i=0;
206 1 uchar time_array[20];
207 1 uchar *gps_time_data=time_array;
208 1
209 1 if(GPS_OK==get_sub_str(gps_buff, comma, gps_time_data))
210 1 {
211 2 for (i=0; i<3; i++)
212 2 {
213 3 gps_bcd_time[i]=((*gps_time_data)-'0')*10+*(gps_time_data+1)-'0';
214 3
215 3 gps_time_data+=2;
216 3 }
217 2
218 2 return GPS_OK;
219 2 }
220 1 else
221 1 {
222 2 return GPS_ERROR;
223 2 }
224 1 }
225 /********************************************************************************
226 *
227 * 函数功能:提取缓冲区中的GPS状态
228 * 输入 :缓冲区中的字符串
229 * 输出 :GPS状态
230 * 数据包 :GPRMC
231 *
232 ********************************************************************************/
233 int get_gps_state(uchar *gps_buff, uchar *gps_state)
234 {
235 1 uchar comma=2;
236 1 uchar i=0;
237 1 uchar state_array[5];
238 1 uchar *gps_state_data=state_array;
239 1
C51 COMPILER V8.02 GPS_MODULE 09/25/2008 19:29:39 PAGE 5
240 1 if(GPS_OK==get_sub_str(gps_buff, comma, gps_state_data))
241 1 {
242 2 *gps_state=*gps_state_data;
243 2 return GPS_OK;
244 2
245 2 }
246 1 else
247 1 {
248 2 return GPS_ERROR;
249 2 }
250 1 }
251
252 /********************************************************************************
253 *
254 * 函数功能:将日期数据变成压缩BCD编码
255 * 输入 :原始日期数据
256 * 输出 :日期的压缩BCD编码
257 * 数据包 :GPRMC
258 *
259 ********************************************************************************/
260
261 int get_date(uchar *gps_buff, uchar *gps_bcd_date)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -