📄 getgpstime.c~
字号:
#include <mega128.h>
volatile unsigned char gpsTime[6];
volatile unsigned char gpsDate[6];
volatile unsigned char gpsok;
unsigned char status,data,Comma_num1;
unsigned char Time_num=0,Date_num=0;
unsigned char Comma_num=0,Recieve_num=0;
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
Comma_num1=0;
status = UCSR0A;
data = UDR0;
if(status &0x1c!=0) //接收是否有误,有误就重新检测起始位;
{
Recieve_num=0;
Comma_num=0;
}
else
{
if(Recieve_num<4)
{
switch(Recieve_num) //判断消息头文件是不是$GPRMC消息;
{
case 0: if(data==0x24)Recieve_num=1;
break;
case 1: if(data==0x47)Recieve_num=2;
else Recieve_num=0;
break;
case 2: if(data==0x50)Recieve_num=3;
else Recieve_num=0;
break;
case 3: if(data==0x52)Recieve_num=4;
else Recieve_num=0;
break;
default:break;
}
}
else //如果是GPRMC文件,开始接收;
{
if(data==0x2c)
{
Comma_num++;
Time_num=0;
Comma_num1=1;
}
if(Comma_num==1&Comma_num1==0) //接收的UTC时间,按时分秒依次接收;
{
/* if(Time_num<6)
{
gpsTime[Time_num]=data;
Time_num++;
}*/
switch(Time_num)
{
case 0: if(data<0x30|data>0x32)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
case 1: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
case 2: if(data<0x30|data>0x35)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
case 3: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
case 4: if(data<0x30|data>0x35)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
case 5: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsTime[Time_num]=data;
Time_num++;
}
break;
default:break;
}
}
if(Comma_num==9&Comma_num1==0) //接收UTC日期,按日月年依次接收
{
/* if(Date_num<6)
{
gpsDate[Date_num]=data;
Date_num++;
if(Date_num==6) //接收完时间和日期后归初始态重新开始检测消息头文件;
{
Date_num=0;
Recieve_num=0;
Comma_num=0;
}
} */
switch(Date_num)
{
case 0: if(data<0x30|data>0x33)
{
Recieve_num=0;
Comma_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
case 1: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
Date_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
case 2: if(data<0x30|data>0x31)
{
Recieve_num=0;
Comma_num=0;
Date_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
case 3: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
Date_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
case 4: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
Date_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
case 5: if(data<0x30|data>0x39)
{
Recieve_num=0;
Comma_num=0;
Date_num=0;
}
else
{
gpsDate[Date_num]=data;
Date_num++;
}
break;
default:break;
}
if(Date_num==6) //接收完时间和日期完成回初始态重新开始检测消息头文件;
{
gpsok=1; //对时成功标记gpsok=1;
Date_num=0; //重新获取时间日期;
Recieve_num=0;
Comma_num=0;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -