#include "gps.h"
/*************************************************
* 程序名称:NEMA解码程序 FOR MSP430
* 程序设计:岳琨
* CPU :MSPF247T
* XTAL :32.768KHz 波特率9600
* 版本 :V1.00 日期 2008-9-2
* 串口测试程序指令:
* $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18
* $
**************************************************/
/*******************************************************
*
* GPS串口解码程序
*
*******************************************************/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
//_DINT();
unsigned char tmp;
tmp = UCA0RXBUF; //将SBUF换成缓冲寄存器
switch(tmp)
{
case '$':
CmdType = 0x00; //命令类型清空
ReceiveMode = 0x01; //接收命令模式
ByteCounter = 0x00; //接收位数清空
SegCounter = 0x00;
break;
case ',':
SegCounter++;
ByteCounter = 0x00;
break;
default:
if(ReceiveMode == 0x01)
{
//命令种类判断
if(ByteCounter == 3)
{
Cmd = tmp; //存储协议类型,G-GPGGA;S-GPGSV;M-GPRMC
}
else if(ByteCounter > 3) //判断协议头第四位
{
if(Cmd == 'G') //GPGGA
{
CmdType = 0x01;
ReceiveMode = 0x02;
//SegCounter = 0x00;
ByteCounter = 0x00;
}
else if(Cmd == 'S' & tmp == 'V') //GPGSV
{
if(Cmd)
CmdType = 0x02;
ReceiveMode = 0x02;
//SegCounter = 0x00;
ByteCounter = 0x00;
}
else if(Cmd == 'M') //GPRMC
{
CmdType = 0x03;
ReceiveMode = 0x02;
//SegCounter = 0x00;
ByteCounter = 0x00;
}
}
}
else if(ReceiveMode == 0x02)
{
//接收数据处理
switch(CmdType)
{
case 1: //类型1,数据接收——GPGGA
switch(SegCounter)
{
case 2: //纬度处理
if(ByteCounter < 9)
{
Latitude[ByteCounter] = tmp;
}
break;
case 3: //纬度方向处理
if(ByteCounter < 1)
{
LatAngle = tmp;
}
break;
case 4://经度处理
if(ByteCounter < 10)
{
Longitude[ByteCounter] = tmp;
}
break;
case 5: //经度方向处理
if(ByteCounter <1)
{
LongAngle = tmp;
}
break;
case 6://定位判断
if(ByteCounter <1)
{
PosStatus = tmp;
}
break;
case 7://定位使用卫星数
if(ByteCounter <2)
{
UseSat[ByteCounter] = tmp;
}
break;
case 9://高度处理
if(ByteCounter <6)
{
GPSAltitude[ByteCounter] = tmp;
}
break;
case 10:
ReceiveMode = 0x00;
BufFull = 0x01;
break;
}
break;
case 2: //类型2,数据接收——GPGSV
switch(SegCounter)
{
case 3:
if(ByteCounter < 2)
{
TotalSat[ByteCounter] = tmp;
}
break;
case 4:
ReceiveMode = 0x00;
BufFull = 0x02;
break;
}
break;
case 3: //类型3,数据接收——GPRMC
if(SegCounter > 9)
{
ReceiveMode = 0x00;
BufFull = 0x03;
}
switch(SegCounter)
{
case 1: //时间处理
if(ByteCounter < 6)
{
UTCTime[ByteCounter] = tmp;
}
break;
case 7: //速度处理
if(ByteCounter < 5)
{
Speed[ByteCounter] = tmp;
}
break;
case 8: //方位角
if(ByteCounter <5)
{
Angle[ByteCounter] = tmp;
}
break;
case 9:
if(ByteCounter < 6)
{
UTCDate[ByteCounter] = tmp;
}
break;
}
break;
}
}
ByteCounter++; //接收位加1
break;
}
// _EINT();
}
/************************************************************
* Fuction: 串口初始化程序,波特率9600,用于GPS�