我想接收一固定的字符串,用串口接收,,单片机用ATmega48,请各位大哥指点一下
这是数据:
$GPGGA,021718.000,3903.5118,N,11707.3802,E,2,07,1.5,-0.5,M,-3.1,M,3.8,0000*4E
$GPGSA,A,3,28,10,05,20,23,13,17,,,,,,2.1,1.5,1.5*38
$GPGSV,3,1,11,04,69,324,,17,56,117,34,10,51,199,45,02,40,279,*7F
$GPGSV,3,2,11,12,29,305,,23,22,073,27,13,21,109,37,20,16,045,25*78
$GPGSV,3,3,11,05,08,214,33,28,07,174,32,42,38,146,37*47
$GPRMC,021718.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*74
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021719.000,3903.5118,N,11707.3802,E,2,06,2.1,-0.5,M,-3.1,M,1.8,0000*4B
$GPRMC,021719.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*75
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021720.000,3903.5118,N,11707.3802,E,2,07,1.2,-0.5,M,-3.1,M,1.8,0000*40
$GPRMC,021720.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7F
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021721.000,3903.5118,N,11707.3802,E,2,08,1.0,-0.5,M,-3.1,M,1.8,0000*4C
$GPRMC,021721.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7E
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021722.000,3903.5118,N,11707.3802,E,2,08,1.0,-0.5,M,-3.1,M,1.8,0000*4F
$GPRMC,021722.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7D
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021723.000,3903.5118,N,11707.3802,E,2,07,1.2,-0.5,M,-3.1,M,2.8,0000*40
$GPGSA,A,3,28,10,02,05,23,13,17,,,,,,2.0,1.2,1.6*3D
$GPGSV,3,1,11,04,69,324,,17,56,117,34,10,51,199,45,02,40,279,14*7A
$GPGSV,3,2,11,12,29,305,,23,22,073,26,13,21,109,37,20,16,045,25*79
$GPGSV,3,3,11,05,08,214,33,28,07,174,31,42,38,146,37*44
$GPRMC,021723.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7C
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021724.000,3903.5118,N,11707.3802,E,2,07,1.2,-0.5,M,-3.1,M,3.8,0000*46
$GPRMC,021724.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7B
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021725.000,3903.5118,N,11707.3802,E,2,07,1.2,-0.5,M,-3.1,M,4.8,0000*40
$GPRMC,021725.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*7A
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021726.000,3903.5118,N,11707.3802,E,2,07,1.2,-0.5,M,-3.1,M,1.8,0000*46
$GPRMC,021726.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*79
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
$GPGGA,021727.000,3903.5118,N,11707.3802,E,2,08,1.0,-0.5,M,-3.1,M,1.8,0000*4A
$GPRMC,021727.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*78
$GPVTG,,T,,M,0.00,N,0.0,K,D*16
这是我的串口接收中断处理程序:
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
unsigned char GPS_Temp_Data=UDR0;
//unsigned char GPS_Data_OK=0;//GPS数据接收完毕标志
//static uint8 GPS_Data[60]; //GPS有效数据存储空间
static uint8 GPS_Data_Count=6; //GPS有效数据头“$GPRMC”到来标志
static uint8 GPS_Data_Flag=0; //GPS有效数据头“$GPRMC”到来标志
/*-------------检测数据头是否为所要的数据头---------------*/
if(GPS_Temp_Data=='$')
GPS_Data[0]='$';
else if(GPS_Temp_Data=='G')
GPS_Data[1]='G';
else if(GPS_Temp_Data=='P')
GPS_Data[2]='P';
else if(GPS_Temp_Data=='R')
GPS_Data[3]='R';
else if(GPS_Temp_Data=='M')
GPS_Data[4]='M';
else if(GPS_Temp_Data=='C')
{
GPS_Data[5]='C';
GPS_Data_Flag=1;
}
/*--------数据头检测成功-----------*/
if(GPS_Data_Flag==1)
{
//接收有效的GPS数据
GPS_Data[GPS_Data_Count ++]=GPS_Temp_Data;
//想要的数据接收完毕(判断是否接收到 D)
if(GPS_Temp_Data=='D')
{
GPS_Data_Flag=0;
GPS_Data_OK=1;
}
}
}
我只想把 “ $GPRMC,021718.000,A,3903.5118,N,11707.3802,E,0.00,,220111,,,D*74 ”用串口收下,但我的程序接收的效果不是很好
有时接收的正确,有时接收的就不是这一串字符,,请各位指点 |