📄 gps.c
字号:
/////////////////////////
unsigned char GetGps();
void GpsDO();
///**********************************
unsigned char GetGps() {
unsigned char j,i,data;
for(j=0;j<4;j++) {
asm("nop");}
for(i=0;i<8;i++)
{
for(j=0;j<15;j++); // delay 104uS 10
data>>=1;
if(GPTXD==1) data=data|0x80;
else data=data&0x7F;
}
GpsCT++;
for(j=0;j<15;j++);
return data;
}
/////////////////////////////
void GetIn() {
unsigned char i,t,k;
if(FIO<90) {
k=GetGps();
FIO++;
}
else {
if(FIO<158) {
RCBuf[FIO-90]=GetGps();
FIO++;
}
else {
i=GetGps(); t=FIO-158;
RCBufEx[t]=i;
FIO++;
}
}
}
/////////////////////
unsigned char GpsOut() {
if(FIO<90)
return 0;
else {
if(FIO<158)
return RCBuf[FIO-90];
else
return RCBufEx[FIO-158];
}}
////////////
void GpRMC() {
unsigned char i,p,t;
if(GpsOut()=='$') {
FIO+=4;
if(GpsOut()=='M') {
FIO++;
if(GpsOut()=='C') {
SENDBIT=0;
INSENDBIT=1;
p=FIO;
FIO+=8;
t=0;
while(1) {
FIO++;
if(GpsOut()==',') break;
if(FIO>180) return;
}
FIO++;
switch(GpsOut()) {
case 'A':
GPSOKBIT=1;
GpsOkCt=0;
break;
case 'V':
GPSOKBIT=0;
GpsOkCt=0;
for(i=0;i<9;i++)
GprsLat[i]='0';
for(i=0;i<10;i++)
GprsLong[i]='0';
break;
default:
return;
}
FIO=p+2;
GprsTime[0]=GpsOut();FIO++;
GprsTime[1]=GpsOut();FIO++;
GprsTime[3]=GpsOut();FIO++;
GprsTime[4]=GpsOut();FIO++;
GprsTime[6]=GpsOut();FIO++;
GprsTime[7]=GpsOut();FIO++;
t=0;
FIO+=24;
while(1) {
FIO++;
if(GpsOut()==','){
t++;
if(t==4) {
break;
}
}
if(FIO>180) return;
}
FIO++;
GprsDate[0]=GpsOut();FIO++;
GprsDate[1]=GpsOut();FIO++;
GprsDate[3]=GpsOut();FIO++;
GprsDate[4]=GpsOut();FIO++;
GprsDate[8]=GpsOut();FIO++;
GprsDate[9]=GpsOut();FIO++;
if(GPSOKBIT!=1)
return;
FIO=p;
while(1) {
FIO++;
if((GpsOut()=='S')||(GpsOut()=='N')) {
GprsLat[10]==GpsOut();break;}
if(FIO>180) return;
}
FIO=FIO-10;
for(i=0;i<9;i++) {
GprsLat[i]=GpsOut();
FIO++;
}
FIO=p;
while(1) {
FIO++;
if((GpsOut()=='E')||(GpsOut()=='W')) {
GprsLong[11]==GpsOut();break;}
if(FIO>180) return;
}
FIO=FIO-11;
for(i=0;i<10;i++) {
GprsLong[i]=GpsOut();
FIO++;
}
}
}
}
}
///////////////////////////
void GpsDO() {
unsigned int i;
for(i=0;i<225;i++) {
FIO=i;
GpRMC();
}
}
/////////////////////////////
void ReadGps() {
unsigned int i,j,t;
FIO=0;t=0;
while(1) {
j=0;
while(GPTXD==0){
j++;
if(j>1940) {
SENDBIT=0;
INSENDBIT=1;
return;}
}
for(j=0;j<325;j++) {
if(GPTXD==0) {
GPSBIT=0;
break;}
GPSBIT=1;}
if(GPSBIT==1) break;
}
GPSBIT=0;FIO=0;GpsCT=0;
while(1) {
i=0;
for(j=0;j<13000;j++) {
if(j>12000) {
j=0;i++;
if(i>=149) {
SENDBIT=0;
INSENDBIT=1;
return;
}
}
if(GPTXD==0)
break; }
GetIn();
if(GpsCT>195) {
GpsDO();
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -