编辑: bingyan8 | 2013-04-23 |
1 0 >
地磁变化.从000.0到
1 8
0 . 0度地 磁 变化 方向.为E或Wf1【2v'
ANTVCC
5 11 R X D P
2 0 『 R E S E T T X A P
2 1
1 0 GND RAX
1 2 TXD P
2 .
2 l
1 3
1 9 GND TI M EM AR } I NTO S ER R CK S CK 图1GPS模块 与单片机接 口电路 至于其他几种帧格式 , 除 了特殊用途外 , 平时并不常 用, 虽 然接收机也在源 源不断地 向 主机 发送各种数 据帧 ,但 在处 理 时一般先通过 对帧头的判断 而只对 $ G P R M C 帧进行 数据 的 提取处理 .如 果情况特殊 , 需要从 其他 帧获取数据 , 处 理方法 与之也 是完全类似 的.由于帧内各 数据段 由逗号分割 , 因此在 处理数据时一般是通过搜寻ASCII码 $t.来 判断是否是帧头,在对帧头 的类 别进行识 别后 再通 过对所经历 逗号个 数的计 数 来判断 出当前 正在处理 的是 哪一种定 位导航 参数 ,并作出相 应的处理 下 面就是对单 片机 串口输 入 的数 据进行解 帧处 理 的部分代码 , 本文在此 只关心时 间( 日期和时 间) .( 仅供 参考 ) H R MC 的信 息如: $ G P R MC , <
1 >
, <
2 >
, <
3 >
, <
4 >
, <
5 >
, <
6 >
, <
7 >
, <
8 >
, <
9 >
, <
1 0 >
, 半hh//例如:$GP RMC,
1 4
2 8
2 4 .
2 7 5, A,
2 7
5 9 .
4 41 6, N,
1 1
6 2
0 .
71 2 9, E,
0 .
0 0, ,
2 6
0 8
0 4, , }
1 B,
0 D,
0 A i f ( c == $
1 / / 查看是不是信息 头{s:ute―time ;
/ / u t c ― t i me为一数 组首 址,用于存放 U T C 时间s=receiv(5);
/ / 接收
5 个字符 , 看是否为 R MC帧信息 f o r ( j =
0 ;
j <
5 ;
j + + )u t c ― t i me [ j ] = ( s + j ) ;
i f ( ! s t r n c m p ( u t c ― t i m e , q ,
5 ) ) / /
1 :
1 ~ 较是否为 G P R M C, q 一(q+4)中存放的是字符GPRMC { w h i l e ( c !=
0 x
0 a ) / / 有没有到帧尾 { w h i l e ( ! 一testbit一(RI));
//等待接收 中断 c = S B U F ;
/ / 从SBUF中 接 收一 个字节信息if(c=: , ) f c o u n t _ c o mm a + + ;
, / 逗 号计 数器switch(count_comma ) f c a s e
1 : / / 是第1个逗号就取得6个字节的UTC时间s-ut e ― t i me ;
s = r e c e i v (
6 ) ;
f o r ( j = O ;
j <
6 ;
j + + )u t c _ t i m e [ j ] = ( s + j ) ;
b r e a k ;
c a s e
9 : / / 是第9个逗 号就 取得6个 字节 的DATE时间s=date―time ;
s = r e c e i v (
6 ) ;
f o r ( j =
0 ;
j <
6 ;
j + + ) d a t e ― t i m e [ j ] = ( s + j ) ;
b r e a k ;
c a s e
2 : / / 是第二个逗 号就查看该帧信息是否有效 s = r e c e i v (
1 ) ;
i f ( s =: A
1 F
0 -
0 ;
e l s e F
0 = I ;
b r e a k ;
d e f a u l t : b r e a k ;
l
1 } co unt _ c o mma =0;
} 现在已将 所需 信息 提取到内存.在实 际应用中往 往要 根据需要对其做进一步 的运算处理 , 比如从 G P s接收机 中获得的时 间信 息为格林 尼治时间,因此 需要在获取 时间上加8小时才为我国标准时间.这种变换运算必须通过数值运算完成 ,因此需 要将前面获取的字符型 变量转化为数值型 变量.要 注意的是 在 时间加上 8个小 时以后 , 还要看是否 已经超过
2 4点(0:00),即时间是否已经到了第 二天.如到了第 二天还要 进行日期 的 调整 . 这既需要考虑月大月小 的问 题 ,又需 考虑二月这一个 特殊的月份――平年有28天 ,闰年有29天 . 如 有必 要还要进行年 份的调整.对从GPs模块获得的格 林尼治时间进 行调整的过程 如程序框图(图2)所示(其中未 包括年份调整).图2时间调 整程序流程 图4倒计 时 间的计 算 关于倒计 时间计算 的原理就是 用 目标时 间减 去当前时间, 只是计算的方法 可能不尽 相同.在这里介 绍一种 易于理解且 计算 比较简单的方法供参考 . 例如当前 时间是2004年 9月11日