#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define gps_LG0 XBYTE[0x0]
#define gps_LG1 XBYTE[0x1000]
#define gps_LG2 XBYTE[0x2000]
#define gps_LG3 XBYTE[0x3000]
#define gps_LAT0 XBYTE[0x4000]
#define gps_LAT1 XBYTE[0x5000]
#define gps_LAT2 XBYTE[0x6000]
#define gps_LAT3 XBYTE[0x7000]
#define GDJ_B0 XBYTE[0x8000]
#define GDJ_B1 XBYTE[0x9000]
#define UTC0 XBYTE[0xc000]
#define UTC1 XBYTE[0xd000]
#define UTC2 XBYTE[0xe000]
#define UTC3 XBYTE[0xf000]
#define SNum XBYTE[0xa000]
#define DTIME 40000
sbit sel_Pin=0x97; //used in selceting series port (sleect GPS,GDJ)
sbit TESTPin1=0x94;
sbit TESTPin2=0x95;
sbit TESTPin3=0x93;
/////////////////////////////
int Time;
long int Longitude,Latitude;
long int UTC_Time;
int hight;
int Star_Num=0;
int GPS_Flag=0;
int GDJ_Flag=0;
void Delay(int TTT);
//Per 1ms interrupt once
timer0 () interrupt 1 using 1
{
TH0=0xfc; TL0=0x80;
TESTPin2 = ~TESTPin2;
Time++;
}
int Read_GGA(void)
{
int i;
char Lt1[13],Lt2[13],UTC[10];
char SN[3];
do
{ while(_testbit_(RI)==0);
}while(SBUF != ',');
i = 0;
do
{
while(_testbit_(RI)==0);
UTC[i] = SBUF;
i++;
}while( SBUF != ',' );
UTC[i-1]=0x0;
i=0;
do
{
while(_testbit_(RI)==0);
if(SBUF!='.')
{
Lt1[i]=SBUF; //latitude
i++;
}
}while(SBUF!=',');
Lt1[i-1]=0x0;
while(1)
{
while(_testbit_(RI)==0);
if(SBUF=='N')
{
while(_testbit_(RI)==0) ;
if(SBUF==',') break;
}
}
i=0;
do
{
while(_testbit_(RI)==0);
if(SBUF!='.')
{
Lt2[i]=SBUF; //longitude
i++;
}
}while(SBUF!=',');
Lt2[i-1]=0x0;
i=0;
while(i<2)
{
while(_testbit_(RI)==0);
if(SBUF==',') i++;
}
i=0;
do
{
while(_testbit_(RI)==0);
SN[i] = SBUF;
i++;
}while(SBUF!=',');
SN[i-1]=0x0;
Latitude=atol(Lt1);
Longitude=atol(Lt2);
UTC_Time = atol(UTC);
Star_Num = atoi(SN);
return 0;
}
int Read_GPS(void)
{
int i,j;
if( GPS_Flag == 0 ) return 0; /////////////////
sel_Pin = 1;
for( j=0; j<10000; j++ ) ;
RI = 0;
for(;;)
{
do
{
while(_testbit_(RI)==0);
} while(SBUF!='$');
while(_testbit_(RI)==0);
if(SBUF=='G')
{ while(_testbit_(RI)==0);
if(SBUF=='P')
{
while(_testbit_(RI)==0);
if(SBUF=='G')
{
while(_testbit_(RI)==0);
if(SBUF=='G')
{
while(_testbit_(RI)==0);
if(SBUF=='A')
{
Read_GGA(); return 0;
}
}
}
}
}
}
}
///format:ALTxxxxxx
int Read_GDJ(void)
{
int i,j;
char HGT[10];
if( GDJ_Flag == 0 ) return 0; /////////////////
sel_Pin = 0;
RI = 0;
Time = 0;
for(;;)
{
if( RI == 1 ) break;
if( Time > 1200 ) return 0;
}
// for( j=0; j<100; j++ ) ;
RI = 0;
for(;;)
{
do
{
while(_testbit_(RI)==0);
} while(SBUF!='A');
while(_testbit_(RI)==0);
if(SBUF=='L')
{
while(_testbit_(RI)==0) ;
if(SBUF=='T')
{
i=0;
do
{ while(_testbit_(RI)==0) ;
HGT[i]=SBUF;
i++;
}while(i<6);
HGT[6]=0x0;
hight=atoi(HGT);
return 0;
}
}
}
}
void InitSystem(void)
{
TMOD=0x21; /* Timer 1 mode 2; timer0 mode 1 */
TH1=0xfd; TL1=0xfd;
TR1=1;
SCON=0x50;
PCON=0x00;
TH0=0xfc; TL0=0x80; //setup time constant of 1ms delay
EA=1;
EX0=0; EX1=0; ET0=0; ET1=0; ES=0;
}
///long int Longitude,Latitude;
///;int hight;
void WR_GPS(void)
{
uchar ch0;
long int ttt;
ch0 = Longitude & 0x000000ff;
gps_LG0 = ch0;
ttt = Longitude >> 8;
ch0 = ttt & 0x000000ff;
gps_LG1 = ch0;
ttt = Longitude >> 16;
ch0 = ttt & 0x000000ff;
gps_LG2 = ch0;
ttt = Longitude >> 24;
ch0 = ttt & 0x000000ff;
gps_LG3 = ch0;
//////////////////////////
ch0 = Latitude & 0x000000ff;
gps_LAT0 = ch0;
ttt = Latitude >> 8;
ch0 = ttt & 0x000000ff;
gps_LAT1 = ch0;
ttt = Latitude >> 16;
ch0 = ttt & 0x000000ff;
gps_LAT2 = ch0;
ttt = Latitude >> 24;
ch0 = ttt & 0x000000ff;
gps_LAT3 = ch0;
// UTC_Time = 123456;
// Star_Num = 55;
////////////////////UTC
ch0 = UTC_Time & 0x000000ff;
UTC0 = ch0;
ttt = UTC_Time >> 8;
ch0 = ttt & 0x000000ff;
UTC1 = ch0;
ttt = UTC_Time >> 16;
ch0 = ttt & 0x000000ff;
UTC2 = ch0;
ttt = UTC_Time >> 24;
ch0 = ttt & 0x000000ff;
UTC3 = ch0;
/////////////////////number of stars
ch0 = Star_Num & 0x00ff;
SNum = ch0;
}
void WR_GDJ(void)
{
uchar ch0;
int ttt;
ch0 = hight & 0x00ff;
GDJ_B0 = ch0;
ttt = hight >> 8;
ch0 = ttt & 0x00ff;
GDJ_B1 = ch0;
}
void main(void)
{
int i,j;
long int k;
for(i=0;i<20000;i++) ;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
InitSystem();
TR0=1; ET0=1;
///////////////////////////////
GPS_Flag = 0; GDJ_Flag = 0;
sel_Pin = 0; ////select GDJ
for(i=0;i<2000;i++) ;
RI = 0; k = 0;
while( k < DTIME )
{
if( RI == 0 ) k++;
else
{
if( SBUF == 'A' ) { GDJ_Flag = 1; break; }
else RI = 0;
}
}
///---------------------------------
sel_Pin = 1; //select GPS
for(i=0;i<2000;i++) ;
RI = 0; k = 0;
while( k < 30000 )
{
if( RI == 0 ) k++;
else
{
if( SBUF == '$' ) { GPS_Flag = 1; break; }
else RI = 0;
}
}
//////////////////////////////////
for(;;)
{
Read_GPS();
WR_GPS();
Read_GDJ();
WR_GDJ();
TESTPin2 = ~TESTPin2;
P1=~P1;
}
}
GPS.rar_51_GPS_gps 51_gps 单片机_单片机 GPS
版权申诉
15 浏览量
2022-09-20
15:37:12
上传
评论
收藏 2KB RAR 举报
小波思基
- 粉丝: 74
- 资源: 1万+