×
单片机 > 单片机程序设计 > 详情

GPS模块(G28U7FTTL)(2)——获取指定信息

发布时间:2020-06-18 发布时间:
|

经过上面文章的学习,大家肯定会简单的获取GPS信号了,这次,我们需要获取指定数据。如下图所示,简单的接收数据,你会发现他们都是很多类型的数据,现在假如只接受下面画红色框的数据。

接收完成后的数据如下图,只剩下我们所想要的数据。


如何实现呢?


我们可以观察下面这个所接收的数据汇总图,上次文章也贴过,如下:

仔细分析就会发现,$GPVTG中的VT是所有信息都没有的,所以我们就可以将VT作为标志,来区分其它数据。


下面代码如下:


#include

#include

 

unsigned char Read_buf[40];

unsigned char Send_buf[40];

unsigned char Send_length=0;

unsigned int Read_id=0;

unsigned int Send_flag=0;

unsigned int Send_id=0;

unsigned char wt[10]="wangting";

 

/* 函数申明 */

void usart_Init();

void usart2_Init();

void delay();

 

void main()

{

    //int i;

    usart_Init();  //   串口1初始化

    usart2_Init();  //  串口2初始化

    IE2=0X01;   //  允许中断2中断

    ES=1;       //  允许中断1中断

    EA=1;       //  开启总中断

    while(1)

    {

        if(Send_flag==1)

        {

            for(Send_id=0;Send_id

            {

                SBUF=Send_buf[Send_id] ;

                delay();

                

            }

            SBUF='n';

            Send_flag=0; 

        }

    }

}

 

void delay()

{

    int i,j;

    for(i=0;i<400;i++)

    {

        for(j=0;j<400;j++);

    }

}

 

void usart_Init()   //  串口1初始化函数

{

PCON &= 0x7F; //波特率不倍速

SCON = 0x50; //8位数据,可变波特率

AUXR &= 0xFB; //独立波特率发生器时钟为Fosc/12,即12T

BRT = 0xFD; //设定独立波特率发生器重装值

AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器

AUXR |= 0x10; //启动独立波特率发生器

}

void usart2_Init()

{

AUXR &= 0xF7; //波特率不倍速

S2CON = 0x50; //8位数据,可变波特率

AUXR &= 0xFB; //独立波特率发生器时钟为Fosc/12,即12T

BRT = 0xFD; //设定独立波特率发生器重装值

AUXR |= 0x10; //启动独立波特率发生器

 

}

 

void usart2() interrupt 8

{

    unsigned char i;

    if((S2CON & 0X01) == 1) //  接受中断标志位,表示开始接受数据

    {

        S2CON=S2CON&0XFE;    // 清串口2中的中断接受标志位

        Read_buf[Read_id]=S2BUF;             // 接受数据

        if(Read_buf[0]=='$')

        {

            Read_id++;

        }

        else

        {

            Read_id=0;

        }

        if(Read_id>4)

        {

            if(Read_buf[3]!='V')

            {

                Read_id=0;

            }

        }

        if(Read_buf[Read_id-1]=='0')

        {  //   收到速度的完整信息

            for(i=0;i

            {

                Send_buf[i]=Read_buf[i];

            }

            Send_length=Read_id;

            Read_id=0;

            Send_flag=1;

        }

        

    }

 

}

 

void usart() interrupt 4

{

    if(TI==1)     //    发送数据

    {

        TI=0;

        

    }

}

结果如下:

完全能够截取到我们想要结果,现在给大家一个问题思考一下:如何找到这行数据中指定的数据呢?


只要这个代码是你自己亲自写的,就很容易完成了。


下次文章,想研究一下PWM(脉宽调制),用它实现呼吸灯,两种方法实现。

关键字:GPS模块  G28U7FTTL  指定信息 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式