?? gpsdata.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 + -