GPS模块(G28U7FTTL)(1)——与单片机通信

写这个博客的目的是为了防止忘记,还有就是记录自己一点一滴的成长。

为什么会设计到这个模块,是因为我们想给学生开展一个实训,源于同事的一个实际项目:自动调速播种机,原理是,将该GPS模块装在播种机上,然后根据GPS采集的速度信息来调整播种机的播种速度,这样就保证了播种的均匀,提高实用性

接下来先来介绍一下GPS模块:

GPS模块(G28U7FTTL)

实物图:

GPS模块(G28U7FTTL)(1)——与单片机通信_第1张图片

引脚说明图:

GPS模块(G28U7FTTL)(1)——与单片机通信_第2张图片

与单片机连接,如下表:

GPS模块(G28U7FTTL) 单片机(STC12C5A60S2)
GND GND
VCC VCC
TXD RXD2(P1.2)
RXD TXD2(P1.3)

这里要注意一下,我们准备使用单片机(STC12C5A60S2)的第二份串口,以前的传统串口留着与PC机相连,通过串口助手查看GPS接收的信号。大家有时间可以研读一下STC12C5A60S2这个型号的单片机,他集成的功能还是比较强大的。

GPS模块(G28U7FTTL)(1)——与单片机通信_第3张图片

 

P1.2和P1.3口作为串口,其实也比较简单,我们可以给大家截取一点文档看看

GPS模块(G28U7FTTL)(1)——与单片机通信_第4张图片

 

再回到这个GPS模块,它所接受的大致数据为:

GPS模块(G28U7FTTL)(1)——与单片机通信_第5张图片

现在我们看一下我的硬件代码:

#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;

/* 函数申明 */
void usart_Init();
void usart2_Init();

void main()
{
    usart_Init();  //   串口1初始化
    usart2_Init();  //  串口2初始化
    IE2=0X01;   //  允许中断2中断
    ES=1;       //  允许中断1中断
    EA=1;       //  开启总中断
    while(1);
}

void usart_Init()   //  串口1初始化函数,产生9600bps波特率,可用串口助手自动完成
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xFB;		//独立波特率发生器时钟为Fosc/12,即12T
	BRT = 0xFD;		//设定独立波特率发生器重装值
	AUXR |= 0x01;		//串口1选择独立波特率发生器为波特率发生器
	AUXR |= 0x10;		//启动独立波特率发生器
}
void usart2_Init()  // 串口2初始化函数,产生9600bps波特率,可用串口助手自动完成
{
	AUXR &= 0xF7;		//波特率不倍速
	S2CON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xFB;		//独立波特率发生器时钟为Fosc/12,即12T
	BRT = 0xFD;		//设定独立波特率发生器重装值
	AUXR |= 0x10;		//启动独立波特率发生器

}

void usart2() interrupt 8
{
    unsigned char x;
    if((S2CON & 0X01) == 1) //  接受中断标志位,表示开始接受数据
    {
        S2CON=S2CON&0XFE;    // 清串口2中的中断接受标志位
        x=S2BUF;
        SBUF=x;              // 发送数据给串口1 
    }

}

void usart() interrupt 4
{
    if(TI==1)     //    发送数据
    {
        TI=0;
    }
}

运行的结果为:

GPS模块(G28U7FTTL)(1)——与单片机通信_第6张图片

你会发现这个GPS的确不停的在发这些数据,如果我们只想取其中一条数据,然后在这个串口助手中显示呢?

如,我只取这个速度信息,前缀为:$GPVTG,,,,,,,,,,,,,N*30,如图:

GPS模块(G28U7FTTL)(1)——与单片机通信_第7张图片

该如何实现呢?我们将在下次文章中讲解。

你可能感兴趣的:(单片机c语言)