经过上面文章的学习,大家肯定会简单的获取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 指定信息『本文转载自网络,版权归原作者所有,如有侵权请联系删除』