钻石会员
主题
帖子
积分11295
阅读权限50
注册时间2013-9-14
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2015-10-15 12:22
|
显示全部楼层
本帖最后由 gongzhu 于 2015-10-15 12:49 编辑
主程序处理GPS的日期时间数据(UTC转北京时间),GPS串口中断只是简单读取:- void GetRs232_Data() interrupt 4 /** GPS信息采集 **/
- {
- u8 tmp;
- //ES = 0;
- if(RI)
- {
- tmp = SBUF;
- switch(tmp)
- {
- case '
- 多谢给了个方向!
- :
- mode = 1; //接收命令模式
- byte_count = 0; //接收位数清空
- break;
- case ',':
- seg_count++; //逗号计数加1
- byte_count = 0;
- break;
- case '*':
- mode = 0;
- break;
- default:
- if(mode == 1) //命令种类判断
- {
- cmd[byte_count] = tmp; //接收字符放入类型缓存
- if(byte_count >= 4)
- {
- //如果类型数据接收完毕,判断类型
- if(cmd[0] == 'G')
- {
- if(cmd[1] == 'P')
- {
- if(cmd[2] == 'R')
- {
- if(cmd[3] == 'M')
- {
- if(cmd[4] == 'C')
- {
- mode = 2;
- seg_count = 0;
- byte_count = 0;
- }
- else //以下5个else千万不能省略!
- {
- mode = 0;
- seg_count = 0;
- byte_count = 0;
- }
- }
- else
- {
- mode = 0;
- seg_count = 0;
- byte_count = 0;
- }
- }
- else
- {
- mode = 0;
- seg_count = 0;
- byte_count = 0;
- }
- }
- else
- {
- mode = 0;
- seg_count = 0;
- byte_count = 0;
- }
- }
- else
- {
- mode = 0;
- seg_count = 0;
- byte_count = 0;
- }
- }
- }
- else if(mode == 2)
- {
- //接收数据处理
- switch(seg_count)
- {
- case 1:
- if(byte_count < 6) //时间处理
- {
- if(tmp > 47 && tmp < 58)
- time[byte_count] = tmp;
- }
- break;
- case 2: //是否有效
- if(byte_count < 1)
- {
- va = tmp == 'A';
- }
- break;
- case 9: //日期处理
- if(byte_count < 6)
- {
- if(tmp > 47 && tmp < 58)
- date[byte_count] = tmp;
- if(byte_count == 5) //日期时间接收完毕即可处理
- {
- FormatDT();
- }
- }
- break;
- case 10: //电脑发送强制校时信号 $GPRMC,024813.640,,,,,,,,150706,X
- if(byte_count < 1)
- {
- QJ = tmp == 'X' ; //QJ 和 X 碰到一起了,别想歪了
- }
- break;
- default:
- break;
- }
- }
- byte_count++; //接收数位加1
- break;
- }
- }
- RI = 0;
- //ES = 1;
- }
复制代码 多谢给了个方向!
|
|