⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getgpstime.c~

📁 GPS 授时接收源程序代码
💻 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 + -