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

📄 gpsdata.c

📁 51单片机C语言应用程序设计实例精讲.rar
💻 C
字号:
/****************************************/
/* Copyright (c) 2004, 通信工程学院戴佳 */
/* All rights reserved.                 */
/* 作    者:戴佳                       */
/****************************************/

#include "GPSData.h"

/* 延时t毫秒 */
void delay(uint t)
{
	uint i;
	while(t--)
	{
		/* 对于12MHz时钟,约延时1ms */
		for (i=0;i<125;i++)
		{}
	}
} 

/* 串口接收中断 */
serial() interrupt 4 using 1
{
	RI = 0;				// 清除中断标志位

	/* 判断是否收到GPRMC格式语句的第一个字符"$",其数值为0x24,
	收到后开始记录数据,并设置记录标志RecFlag。			    */
	if (SBUF == 0x24)
	{
		RecFlag = 1;
		i = 0;
		IGpsLgd = 0;	// 经度数据计数变量置0
		NumComa = 0;	// 逗号计数变量置0
	}

	/* 开始处理GPRMC中的数据信息 */
	if (RecFlag == 1)
	{
		if(SBUF == 0x2c)
			NumComa++;

		/* 第5个逗号之后的字符属于经度数据 */
		if (NumComa == 3)
		{
			StrGpsLgd[IGpsLgd] = SBUF;	// 存入字符串StrGps
			IGpsLgd++;
		}

		/* 判断是否收到GPRMC格式语句的字符"*",
		其数值为0x2a,收到则结束记录 */	
		if (SBUF == 0x2a)
		{
			StrGpsLgd[IGpsLgd] = '\0';	// 字符串的结束符
			RecFlag = 0;
			IGpsLgd = 0;				// 经度数据计数变量置0
			NumComa = 0;				// 逗号计数变量置0

			/* 延时半秒钟后重新接收新的GPS定位信息中的经度信息 */
			REN = 0;
			delay(500);					// 延时500ms
			REN = 1;
		}
	}	
}


void main()
{
	/* 初始化串口 */
	TMOD = 0x20;	
	TL1= 0xfd;
	TH1 = 0xfd;
	SCON = 0x40;		// 方式1:10位异步收发,波特率由定时器控制。REN=0。
	PCON = 0x00;		// SMOD = 0
	IE = 0x90;			// EA = 1,ES = 1
	TR1 = 1;			// 定时器1启动

	DisableAllOut();
	EnableGPRMC();

	delay(1000);		// 延时1s

	REN = 1;			// REN = 1,开始接收数据

	while(1);	
}

/* 配置GPS模块禁用所有输出语句 */
void DisableAllOut()
{
	/* 发送语句:$PGRMO,,2 */
	TI = 0;
	SBUF = 0x24;				// 发送"$"
	while(!TI);
	TI = 0;
	SBUF = 'P';					// 发送"P"
	while(!TI);
	TI = 0;
	SBUF = 'G';					// 发送"G"
	while(!TI);
	TI = 0;
	SBUF = 'R';					// 发送"R"
	while(!TI);
	TI = 0;
	SBUF = 'M';					// 发送"M"
	while(!TI);
	TI = 0;
	SBUF = 'O';					// 发送"O"
	while(!TI);
	TI = 0;
	SBUF = ',';					// 发送","
	while(!TI);
	TI = 0;
	SBUF = ',';					// 发送","
	while(!TI);
	TI = 0;
	SBUF = '2';					// 发送"2"
	while(!TI);
	TI = 0;
	SBUF = 0x2a;				// 发送"*"
	while(!TI);
	TI = 0;
}

/* 配置GPS模块使能$GPRMC输出语句 */
void EnableGPRMC()
{
	/* 发送语句:$PGRMO,GPRMC,1 */
	TI = 0;
	SBUF = 0x24;				// 发送"$"
	while(!TI);
	TI = 0;
	SBUF = 'P';					// 发送"P"
	while(!TI);
	TI = 0;
	SBUF = 'G';					// 发送"G"
	while(!TI);
	TI = 0;
	SBUF = 'R';					// 发送"R"
	while(!TI);
	TI = 0;
	SBUF = 'M';					// 发送"M"
	while(!TI);
	TI = 0;
	SBUF = 'O';					// 发送"O"
	while(!TI);
	TI = 0;
	SBUF = ',';					// 发送","
	while(!TI);
	TI = 0;
	SBUF = 'G';					// 发送"G"
	while(!TI);
	TI = 0;
	SBUF = 'P';					// 发送"P"
	while(!TI);
	TI = 0;
	SBUF = 'R';					// 发送"R"
	while(!TI);
	TI = 0;
	SBUF = 'M';					// 发送"M"
	while(!TI);
	TI = 0;
	SBUF = 'C';					// 发送"C"
	while(!TI);
	TI = 0;
	SBUF = ',';					// 发送","
	while(!TI);
	TI = 0;
	SBUF = '1';					// 发送"1"
	while(!TI);
	TI = 0;
	SBUF = 0x2a;				// 发送"*"
	while(!TI);
	TI = 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -