c51 GPGGA数据流接收分析
来源:互联网 发布:约瑟夫环用到的算法 编辑:程序博客网 时间:2024/04/27 16:59
#include"reg52.h"char GPGGA[72]={0};int NumGGA=0;//GPG数组指针char GpsData[39]={0};//0-9时间,10-18纬度,19N/S,20-29经度,30E/W,31-(33-37)海拔,(34-38)'\0'int NumData=0;//Data数组指针int State=0;//状态字getGpsData()interrupt 4 using 1;int atoi(char*,int);void printLCD(char*);/*主函数初始化相关硬件死循环等待串口中断<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>main(){initLCD();//初始化lcd12864显示屏SCON=0x51;//方式一,允许串行接受,开接收中断标志PCON=0x00;//SMOD=0IE=0x90;//EA=1,ES=1while(1);}/*串口接收中断*/getGpsData()interrupt 4 using 1{EA=0;//关闭中断允许位 RI = 0; // 重置串口中断标志位 switch(State){case 0:if(SUBF=='$')State=1;else State=0;break;case 1:if(SUBF=='G')State=2;else State=0;break;case 2:if(SUBF=='P')State=3;else State=0;break;case 3:if(SUBF=='G')State=4;else if(SUBF=='R')State=8;else State=0;break;case 4:if(SUBF=='G')State=5;else State=0;break;case 5:if(SUBF=='A')State=6;else State=0;break;case 6:if(SUBF=='*')State=7;else State=6;break;case 7:if(SUBF=='\r'){//数据校验int i;char CheckSum;for(i=1,CheckSum=0;GPGGA[i]!='*';i++)CheckSum^=GPGGA[i];//printf("%d %d\n",CheckSum,atoi(GPGGA+i+1,2));getchar();if(CheckSum==atoi(GPGGA+i+1,2))//参考http://www.xuebuyuan.com/1406698.htmlState=8;else State=0;}else State=7;}switch(State){case 8://遍历GPGGA,并将相关数据拷贝GpsData中for(int i=0,j=0,NumComma=0;;i++){if(GPGGA[i]==','){NumComma+=1;continue;}if(NumComma==10)//拷贝结束{GpsData[j]='\0';break;}if(!(NumComma==1||NumComma==2||NumComma==3||NumComma==4||NumComma==5||NumComma==9))continue;//跳过冗余信息GpsData[j]=GPGGA[i];j+=1;}向LCD发消息printLCD(GpsData);State=0;//最后重置State,NumGGANumGGA=0;break;case 0:NumGGA=0;break;default:GPGGA[NumGGA]=SUBF;NumGGA+=1;}EA=1;//打开中断允许位}//十六进制字符串转整形,正则式:(A|d)(A*d*)*int atoi(char *s,int length){int i,n;//if(length<=0)exit(0);//输入错误:跳出for(i=0,n=0;i<length;i++){if(s[i]>='0'&&s[i]<='9')n=s[i]-'0'+n*16;else if(s[i]>='A'&&s[i]<='F')n=s[i]-'A'+10+n*16;else if(s[i]>='a'&&s[i]<='f')n=s[i]-'a'+10+n*16;//else exit(0);//输入错误:跳出}return n;}
0 0
- c51 GPGGA数据流接收分析
- 网络数据流接收处理过程分析
- vlc网络数据流接收处理分析
- 网络数据流接收处理过程分析
- vlc学习计划(6)--网络数据流接收处理过程分析
- vlc学习计划(5)--网络数据流接收处理过程分析
- vlc学习计划(5)--网络数据流接收处理过程分析
- vlc学习计划(5)--网络数据流接收处理过程分析
- VLC中网络数据流接收处理过程分析
- java接收数据流
- C#接收POST数据流
- HTTPURLConnection中接收数据流
- php接收数据流
- nRF24L01 C51 发送接收驱动程序
- C51---串口通信---接收---发送
- C51 中断接收 查询发送
- vlc学习计划(7)--从接收到数据流到播放视频的过程分析
- vlc学习计划(6)--从接收到数据流到播放视频的过程分析
- Java并发编程4.2-实例限制
- SQLite数据库版本升级的管理实现
- Java并发编程4.4-向已有的线程安全类添加功能
- 深入分析HBase-Phoenix执行机制与原理
- Java并发编程4.5-同步策略的文档化
- c51 GPGGA数据流接收分析
- Python处理中文
- week7-学习写技术交底书的所得
- week_7flask入门学习
- ATech - FastJson
- Android的java.lang.IllegalStateException
- C#--数据类型
- C++ prime plus 第八章8.8-5
- 数据结构分析方法