📄 receive.lst
字号:
187 2 }
188 1 }
189 //系统初始化
190 void sys_init()
191 {
192 1 // unsigned char i;
193 1 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
194 1 TMOD = 0x200; /* TMOD: timer 1, mode 2, 8-bit reload */
195 1 TH1=TL1=0xfa; /* TH1: reload value for 4800 baud @ 11.059MHz */
196 1 TR1 = 1; /* TR1: timer 1 run */
197 1 Init_Lcd12864(); //初始化LCD
198 1 ResetCursor(0,1);
199 1 printf("GPS Monitor V1.2");
200 1 ClearAS();
201 1 IE=0x90; //开总中断、串口中断
202 1 }
203
204 //串口接收中断
205 void uart(void) interrupt 4
206 {
207 1 unsigned char tmp;
208 1 if(RI){
209 2 tmp=SBUF;
210 2 switch(tmp)
211 2 {
212 3 case '$':
213 3 cmd_number=0; //命令类型清空
214 3 mode=1; //接收命令模式
215 3 byte_count=0; //接收位数清空
216 3 break;
217 3 case ',':
218 3 seg_count++; //逗号计数加1
219 3 byte_count=0;
220 3 break;
221 3 case '*':
222 3 switch(cmd_number)
223 3 {
224 4 case 1:
225 4 buf_full|=0x01;
226 4 break;
227 4 case 2:
228 4 buf_full|=0x02;
229 4 break;
230 4 case 3:
231 4 buf_full|=0x04;
232 4 break;
233 4 }
234 3 mode=0;
235 3 break;
236 3 default:
237 3 if(mode==1){
238 4 //命令种类判断
239 4 cmd[byte_count]=tmp; //接收字符放入类型缓存
240 4 if(byte_count>=4){ //如果类型数据接收完毕,判断类型
241 5 if(cmd[0]=='G'){
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 5
242 6 if(cmd[1]=='P'){
243 7 if(cmd[2]=='G'){
244 8 if(cmd[3]=='G'){
245 9 if(cmd[4]=='A'){
246 10 cmd_number=1;
247 10 mode=2;
248 10 seg_count=0;
249 10 byte_count=0;
250 10 }
251 9 }
252 8 else if(cmd[3]=='S'){
253 9 if(cmd[4]=='V'){
254 10 cmd_number=2;
255 10 mode=2;
256 10 seg_count=0;
257 10 byte_count=0;
258 10 }
259 9 }
260 8 }
261 7 else if(cmd[2]=='R'){
262 8 if(cmd[3]=='M'){
263 9 if(cmd[4]=='C'){
264 10 cmd_number=3;
265 10 mode=2;
266 10 seg_count=0;
267 10 byte_count=0;
268 10 }
269 9 }
270 8 }
271 7 }
272 6 }
273 5 }
274 4 }
275 3 else if(mode==2){
276 4 //接收数据处理
277 4 switch (cmd_number){
278 5 case 1: //类型1数据接收。GPGGA
279 5 // $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18
280 5 switch(seg_count){
281 6 case 2: //纬
-度处理
282 6 if(byte_count<9){
283 7 WD[byte_count]=tmp;
284 7 }
285 6 break;
286 6 case 3: //纬
-度方向处理
287 6 if(byte_count<1){
288 7 WD_a=tmp;
289 7 }
290 6 break;
291 6 case 4: //经
-度处理
292 6 if(byte_count<10){
293 7 JD[byte_count]=tmp;
294 7 }
295 6 break;
296 6 case 5: //经
-度方向处理
297 6 if(byte_count<1){
298 7 JD_a=tmp;
299 7 }
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 6
300 6 break;
301 6 case 6: //定
-位判断
302 6 if(byte_count<1){
303 7 lock=tmp;
304 7 }
305 6 break;
306 6 case 7: //定
-位使用的卫星数
307 6 if(byte_count<2){
308 7 use_sat[byte_count]=tmp;
309 7 }
310 6 break;
311 6 case 9: //高
-度处理
312 6 if(byte_count<6){
313 7 high[byte_count]=tmp;
314 7 }
315 6 break;
316 6 }
317 5 break;
318 5 case 2: //类型2数据接收。GPGSV
319 5 //$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
320 5 switch(seg_count){
321 6 case 3: //天
-空中的卫星总数
322 6 if(byte_count<2){
323 7 total_sat[byte_count]=tmp;
324 7 }
325 6 break;
326 6 }
327 5 break;
328 5 case 3: //类型3数据接收。GPRMC
329 5 //$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10
330 5 switch(seg_count){
331 6 case 1:
332 6 if(byte_count<6){ //时间处理
333 7 time[byte_count]=tmp;
334 7 }
335 6 break;
336 6 case 7: //速
-度处理
337 6 if(byte_count<5){
338 7 speed[byte_count]=tmp;
339 7 }
340 6 break;
341 6 case 8: //方
-位角处理
342 6 if(byte_count<5){
343 7 angle[byte_count]=tmp;
344 7 }
345 6 break;
346 6 }
347 5 break;
348 5 }
349 4 }
350 3 byte_count++; //接收数位加1
351 3 break;
352 3 }
353 2 }
354 1 RI=0;
355 1 }
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1228 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -