| 
 
| 对于任何一个GPS应用而言,面临的首要问题是如何获取GPS系统提供的定位信息。全球恒卫星[一位系统GPS由3个基本部分组成,太空部分,监控部分,和用户部分。 GPS器件通过标准CMOS逻辑和单片机的电路连接设计如图
 
 程序
 ******************************************************************************
 主程序功能为51单片机通过串口向GPS模块GARMIN GPS 25LP发送命令,读取当前的方位信息,根据方位信息数据结构的特点,接收GPS模块送入单片机串口的经度数据,关于纬度数据的接收,程序实现代码结构和经度数据接收程序代码类似处理即可。
 *****************************************************************************
 #include <reg51.h>       // 引用标准库的头文件
 #include <stdio.h>
 #include <absacc.h>
 #define uchar unsigned char
 #define uint unsigned int
 
 uchar StrGpsLgd[8];    // 存放经度数据
 uint i;
 uint RecFlag;     // 记录标志
 uint IGpsLgd;     // 经度数据计数变量
 uint NumComa;     // 逗号计数变量
 void DisableAllOut();   // 配置GPS模块禁用所有输出语句子函数
 void EnableGPRMC();    // 配置GPS模块使能$GPRMC输出语句子函数
 /* 延时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;
 }
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |