GPS 串口数据解码程序 bit ReceivingF = 0; bit EndF = 0; bit RMCF = 0; bit GGAF = 0; bit VTGF = 0; bit GSAF = 0; uchar GPS_time[9]; //UTC 时间 uchar xdata GPS_wd[12]; //纬度 uchar xdata GPS_jd[13]; //经度 uchar GPS_warn; //定位警告 uchar GPS_quality; //定位质量 uchar GPS_status; //定位状态 uchar GPS_alt[8]; //海拔 uchar GPS_sv[3]; //使用卫星 uchar GPS_speed[10]; //速度 uchar GPS_date[9]; //UTC 日期 uchar Segment; //逗号计数 uchar Bytes_counter; uchar Command; void GPRMC(uchar); void GPGGA(uchar); void GPVTG(uchar); void GPGSA(uchar); void gps(uchar); /****************************************************/ //功能:NMEA-183 协议解析 //入口:void //返回:void //全局变更修改:GPS_*,Segment,command,Bytes_counter,NewByteF //修改记录: 2007.8.25 创建 by 54et v1 // 2007.8.26 v1.1 修改解码结构 /****************************************************/ void gps(uchar tmp) { //com_send_byte(tmp); if(tmp == '$')//起始标志 { Command = 0; ReceivingF = 1; Bytes_counter = 0; Segment = 0; //清空语句段计数器 return; } if(ReceivingF) { if(tmp == ',') { ++Segment; Bytes_counter = 0; //清空段字节计数器 return; } if(tmp == '*')//收到结束标志 { ReceivingF = 0; EndF = 1; return; } if(Segment == 0) { if(Bytes_counter == 3) //段0,语句类型判断 switch(tmp) { case 'G':Command = 1;//语句类型 $GPGGA GGAF = 1; break; case 'M':Command = 2;//语句类型 $GPRMC RMCF = 1; break; case 'T':Command = 3;//语句类型 $GPVTG VTGF = 1; break; case 'S':break; default:Command = 0; //非有效数据类型,终止当前数据接收 ReceivingF = 0; break; } if(Bytes_counter == 4) if(Command==0 && tmp=='A') { Command = 4;//语句类型 $GPGSA GSAF = 1; } } else { switch(Command) { case 1:GPGGA(tmp); break; case 2:GPRMC(tmp); break; case 3:GPVTG(tmp); break; case 4:GPGSA(tmp); break; default:break; } } ++Bytes_counter; } N...