📄 gps.lst
字号:
C51 COMPILER V7.08 GPS 04/06/2008 23:24:33 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE GPS
OBJECT MODULE PLACED IN gps.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE gps.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 #include <w77e58.h>
2 #include "global.h"
3 #include "io.h"
4 #include "serial.h"
5 #include "timer.h"
*** WARNING C258 IN LINE 4 OF TIMER.H: 'd': mspace on parameter ignored
*** WARNING C258 IN LINE 5 OF TIMER.H: 'd': mspace on parameter ignored
6 #include "gps.h"
7
8 enum
9 {
10 LONLAT_DMM=1, /*LONGITUDE LATITUDE DEGREE MINUTE MINUTE/10000 format */
11 LONLAT_DMS, /*LONGITUDE LATITUDE DEGREE MINUTE SECOND format */
12
13 };
*** ERROR C141 IN LINE 13 OF GPS.C: syntax error near '}', expected '<id>'
14
15 #define GPRMC_TIME 1
16 #define GPRMC_AV_STATUS 2
17 #define GPRMC_NS_STATUS 4
18 #define GPRMC_EW_STATUS 6
19
20
21 #define GPRMC_LONGITUDE 5
22 #define GPRMC_LATTUDE 3
23 #define GPRMC_SPEED 7
24 #define GPRMC_ANGLE 8
25 #define GPRMC_YMD 9
26
27 #ifdef DEBUG_GPS
28 code uchar * debug_gps ="$GPRMC,090058.01,A,2233.4264,N,11406.1970,E,000.0,000.0,041206,002.1,W,A*29";
29 #endif
30
31 bit GPSReady;
32 bit GPSav; //1 = A
33 bit GPSns; //1 = N
34 bit GPSew; //1 = E
35 uchar xdata JWDMode;
36 UINT32 xdata Speed;
37 UINT32 xdata LonDeg,LonMin1,LonMin2,LatDeg,LatMin1,LatMin2;
38 UINT32 xdata xYear,xMonth,xDay;
39 UINT32 xdata xHour,xMin,xSec;
40
41 enum
42 {
43 JWD_DU=0,
44 JWD_DMS,
45 JWD_DMM,
46 };
*** ERROR C141 IN LINE 46 OF GPS.C: syntax error near '}', expected '<id>'
47
48
49 uchar xdata m_Buffer[100];
50
51
C51 COMPILER V7.08 GPS 04/06/2008 23:24:33 PAGE 2
52
53 extern char xdata TP_UD[];
54
55
56 //void ParseGPRMC(uchar xdata* GprmcBuff);
57 //void ParseNMEA0183(uchar xdata* GpsBuff);
58
59 int Split(uchar* str,uchar dot)
60 {
61 1 int i;
62 1 uchar dot_count;
63 1
64 1 dot_count=0;
65 1
66 1 for(i=0;i<250;i++)
67 1 {
68 2 if(str[i]==',')
69 2 {
70 3 dot_count++;
71 3 }
72 2 if(str[i]=='\r'&&str[i+1]=='\n') break;
73 2 if(dot_count==dot) return i;
74 2
75 2 }
76 1 return 0;
77 1
78 1 }
79
80
81
82
83 void GPSModule_init(void)
84 {
85 1
86 1 GPS_EN = HIGH;
87 1 delay_ms(20);
88 1 GPS_RESET=HIGH;
89 1 delay_ms(20);
90 1 GPS_RESET=LOW;
91 1 delay_ms(100);
92 1 GPS_RESET=HIGH;
93 1
94 1 }
95
96
97 UINT32 GetGpsInfoDmm(UINT32 degree,UINT32 minute1,UINT32 minute2,UINT8 mode)
98 {
99 1
100 1 if(mode==LONLAT_DMM)
101 1 return degree*600000+minute1*10000+minute2;
102 1 else
103 1 return degree*600000+minute1*10000+minute2*10000/60;
104 1
105 1 }
106
107 extern char xdata cmd[]; // 命令串
108
109
110 void ParseGPRMC(uchar* GprmcBuff)
111 {
112 1 int i,j,k;
113 1 UINT32 xdata Longitude;
C51 COMPILER V7.08 GPS 04/06/2008 23:24:33 PAGE 3
114 1 UINT32 xdata Latitude;
115 1
116 1
117 1 i=Split(GprmcBuff,GPRMC_TIME); /*GPRMC_TIME =1*/
118 1 if(i==0) return;
119 1
120 1 /* 检查时间数据,eg:204700,A,*/
121 1 if(GprmcBuff[i+10]==',') //16
122 1 {
123 2
124 2 if(GprmcBuff[i+1]<'0'||GprmcBuff[i+1]>'9'||
125 2 GprmcBuff[i+2]<'0'||GprmcBuff[i+2]>'9'||
126 2 GprmcBuff[i+3]<'0'||GprmcBuff[i+3]>'9'||
127 2 GprmcBuff[i+4]<'0'||GprmcBuff[i+4]>'9'||
128 2 GprmcBuff[i+5]<'0'||GprmcBuff[i+5]>'9'||
129 2 GprmcBuff[i+6]<'0'||GprmcBuff[i+6]>'9'||
130 2 GprmcBuff[i+7]!='.'||
131 2 GprmcBuff[i+8]<'0'||GprmcBuff[i+8]>'9'||
132 2 GprmcBuff[i+9]<'0'||GprmcBuff[i+9]>'9')
133 2 return;
134 2
135 2
136 2 }
137 1 else
138 1 {
139 2 if( GprmcBuff[i+1]<'0'||GprmcBuff[i+1]>'9'||
140 2 GprmcBuff[i+2]<'0'||GprmcBuff[i+2]>'9'||
141 2 GprmcBuff[i+3]<'0'||GprmcBuff[i+3]>'9'||
142 2 GprmcBuff[i+4]<'0'||GprmcBuff[i+4]>'9'||
143 2 GprmcBuff[i+5]<'0'||GprmcBuff[i+5]>'9'||
144 2 GprmcBuff[i+6]<'0'||GprmcBuff[i+6]>'9'||
145 2 GprmcBuff[i+7]!='.'||
146 2 GprmcBuff[i+8]<'0'||GprmcBuff[i+8]>'9'||
147 2 GprmcBuff[i+9]<'0'||GprmcBuff[i+9]>'9'||
148 2 GprmcBuff[i+10]<'0'||GprmcBuff[i+10]>'9')
149 2 return;
150 2
151 2
152 2
153 2 }
154 1 xHour=(GprmcBuff[i+1]-'0')*10+(GprmcBuff[i+2]-'0');
155 1 xMin =(GprmcBuff[i+3]-'0')*10+(GprmcBuff[i+4]-'0');
156 1 xSec =(GprmcBuff[i+5]-'0')*10+(GprmcBuff[i+6]-'0');
157 1
158 1 i=Split(GprmcBuff,GPRMC_AV_STATUS);
159 1 if(i==0) return;
160 1 if(GprmcBuff[i+1]!='A'&& GprmcBuff[i+1]!='V')return;
161 1
162 1 GPSav = ((GprmcBuff[i+1]=='A')? 1:0);
163 1
164 1 //if(GPSav=='V')return;
165 1
166 1
167 1 /* 检查经度数据,eg:11709.432,W,*/
168 1 i=Split(GprmcBuff,GPRMC_LONGITUDE);
169 1 if(i==0) return;
170 1 if( GprmcBuff[i+1]<'0'||GprmcBuff[i+1]>'9'||
171 1 GprmcBuff[i+2]<'0'||GprmcBuff[i+2]>'9'||
172 1 GprmcBuff[i+3]<'0'||GprmcBuff[i+3]>'9'||
173 1 GprmcBuff[i+4]<'0'||GprmcBuff[i+4]>'9'||
174 1 GprmcBuff[i+5]<'0'||GprmcBuff[i+5]>'9'||
175 1 GprmcBuff[i+6]!='.'||
C51 COMPILER V7.08 GPS 04/06/2008 23:24:33 PAGE 4
176 1 GprmcBuff[i+7]<'0'||GprmcBuff[i+7]>'9'||
177 1 GprmcBuff[i+8]<'0'||GprmcBuff[i+8]>'9'||
178 1 GprmcBuff[i+9]<'0'||GprmcBuff[i+9]>'9'||
179 1 GprmcBuff[i+10]<'0'||GprmcBuff[i+10]>'9')
180 1 return;
181 1
182 1 LonDeg=(GprmcBuff[i+1]-'0')*100+
183 1 (GprmcBuff[i+2]-'0')*10+
184 1 GprmcBuff[i+3]-'0';
185 1 LonMin1=(GprmcBuff[i+4]-'0')*10+
186 1 GprmcBuff[i+5]-'0';
187 1 LonMin2=(GprmcBuff[i+7]-'0')*1000+
188 1 (GprmcBuff[i+8]-'0')*100+
189 1 (GprmcBuff[i+9]-'0')*10+
190 1 GprmcBuff[i+10]-'0';
191 1
192 1
193 1 /* 检查纬度数据,eg:3403.868,N,*/
194 1 i=Split(GprmcBuff,GPRMC_LATTUDE);
195 1 if(i==0) return;
196 1 if( GprmcBuff[i+1]<'0'||GprmcBuff[i+1]>'9'||
197 1 GprmcBuff[i+2]<'0'||GprmcBuff[i+2]>'9'||
198 1 GprmcBuff[i+3]<'0'||GprmcBuff[i+3]>'9'||
199 1 GprmcBuff[i+4]<'0'||GprmcBuff[i+4]>'9'||
200 1 GprmcBuff[i+5]!='.'||
201 1 GprmcBuff[i+6]<'0'||GprmcBuff[i+6]>'9'||
202 1 GprmcBuff[i+7]<'0'||GprmcBuff[i+7]>'9'||
203 1 GprmcBuff[i+8]<'0'||GprmcBuff[i+8]>'9'||
204 1 GprmcBuff[i+9]<'0'||GprmcBuff[i+9]>'9')
205 1 return;
206 1
207 1 LatDeg=(GprmcBuff[i+1]-'0')*10+
208 1 GprmcBuff[i+2]-'0';
209 1 LatMin1=(GprmcBuff[i+3]-'0')*10+
210 1 GprmcBuff[i+4]-'0';
211 1 LatMin2=(GprmcBuff[i+6]-'0')*1000+
212 1 (GprmcBuff[i+7]-'0')*100+
213 1 (GprmcBuff[i+8]-'0')*10+
214 1 GprmcBuff[i+9]-'0';
215 1
216 1 i=Split(GprmcBuff,GPRMC_YMD);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -