⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps_module.lst

📁 通过车载终端采集GPS数据
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.09   GPS_MODULE                                                            09/25/2008 11:56:18 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE GPS_MODULE
OBJECT MODULE PLACED IN .\output\bin\gps_module.obj
COMPILER INVOKED BY: C:\Keil709\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 V7.09   GPS_MODULE                                                            09/25/2008 11:56:18 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 V7.09   GPS_MODULE                                                            09/25/2008 11:56:18 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 V7.09   GPS_MODULE                                                            09/25/2008 11:56:18 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 V7.09   GPS_MODULE                                                            09/25/2008 11:56:18 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 + -