******************************************************************/
#include "uart.h"
char idata gpsRxBuffer[gpsRxBufferLength];
unsigned char RX_Count = 0;
_SaveData Save_Data;
void Uart_Init()
{
SCON = 0X50; //UART方式1;8位UART
REN = 1; //允許串行口接收數據
PCON = 0x00; //SMOD=0;波特率不加倍
TMOD = 0x20; //T1方式2,用于產生波特率
TH1 = 0xFD; //裝初值
TL1 = 0xFD;
TR1 = 1; //啟動定時器1
EA = 1; //打開全局中斷控制
ES = 1; //打開串行口中斷
}
void UartPrintf(unsigned char *p) //發送字符串
{
while(*p)
{
SBUF=*(p++);
while(TI==0)
{
};
TI=0;
}
}
void UartPrintASCII(unsigned char c) //發送一個字符
{
TI=0;
SBUF=c;
while(TI==0);
TI=0;
}
void RECEIVE_DATA(void) interrupt 4 using 3
{
unsigned char temp = 0;
char i = 0;
ES=0;
temp = SBUF;
RI = 0;
if(temp == '$')
{
RX_Count = 0;
}
if(RX_Count <= 5)
{
gpsRxBuffer[RX_Count++] = temp;
}
else if(gpsRxBuffer[0] == '$' &gpsRxBuffer[4] == 'M' && gpsRxBuffer[5] == 'C') //確定是否收到"GPRMC/GNRMC"這一幀數據
{
gpsRxBuffer[RX_Count++] = temp;
if(temp == '\n')
{
memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length); //清空
memcpy(Save_Data.GPS_Buffer, gpsRxBuffer, RX_Count); //保存數據
Save_Data.isGetData = true;
RX_Count = 0;
memset(gpsRxBuffer, 0, gpsRxBufferLength); //清空
}
if(RX_Count >= 75)
{
RX_Count = 75;
gpsRxBuffer[RX_Count] = '\0';//添加結束符
}
}
ES=1;
}
void clrStruct()
{
Save_Data.isGetData = false;
Save_Data.isParseData = false;
Save_Data.isUsefull = false;
memset(Save_Data.GPS_Buffer, 0, GPS_Buffer_Length); //清空
memset(Save_Data.UTCTime, 0, UTCTime_Length);
memset(Save_Data.latitude, 0, latitude_Length);
memset(Save_Data.N_S, 0, N_S_Length);
memset(Save_Data.longitude, 0, longitude_Length);
memset(Save_Data.E_W, 0, E_W_Length);
}
|