GPS串口数据解码程序
bit ReceivingF = 0;
bit EndF = 0;
bit RMCF = 0;
bit GGAF = 0;
bit VTGF = 0;
bit GSAF = 0;
uchar GPS_t//清空段字节计数器
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
'「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;
}
NewByteF = 0;
return;
void GPGGA(uchar tmp)
{
switch(Segment)
{
if(Bytes_counter == 2 || Bytes_counter == 5) //$GPGGA 段 1, UTC 时间, hhmmss (时分秒)格式,取前6位 转换为HH:MM:SS 格式
{
GPS_time[Bytes_counter] =':';
++Bytes_counter;
}
if(Bytes_counter<8)
GPS_time[Bytes_counter] = tmp;
GPS_time[8] = '\0';
break;
if(Bytes_counter == 3)//$GPGGA 段 2 处理 纬度 (
度分)格式
GPS_wd[Bytes_counter] ++Bytes_counter;
〃接收第二个字节后插入
GPS_wd[11] = '\0’;
}
if(Bytes_counter == 0) ++Bytes_counter;
GPS_wd[Bytes_counter] break;
=tmp;
GPS_wd[0] = tmp;
或S (南半球)
bre
GPS串口数据解码程序 来自淘豆网m.daumloan.com转载请标明出处.