c语言sscanf函数的用法是什么
263
2022-11-27
用uPSD3234A获取Motorola Onco
引 言
1 Motorola Oncore接收器的工作原理
Motorola Oncore接收器有一个TTL串行数据接口。此接口为Oncore接收器和系统控制器间提供主控及数据通道。
2 μPSD3234A介绍
3 μPSD3234A与Oncore接收器的接口
4 程序设计
Motorola Oncore接收器的主串口提供两种数据格式:摩托罗拉二进制格式和NMEA 0183格式。摩托罗拉二进制格式应用于接收器主串口的输入输出,波特率应为9600,无奇偶校验位,1位起始位和1位停止位。所要获取的GPS参数是以@@Ea开头的位置/状态/数据响应信息,以回车换行结束。其格式为:
msdimsdimsdimsdimsdsC。
其含义为:
日期: m 月 1~12
d 日 1~31
时间: h 小时 0~23
m 分 0~59
s 秒 0~60
位置: aaaa 纬度(mas)
-324 000 000~324 000 000(-90°~ 90°)
oooo 经度(mas)
-648 000 000~648 000 000(-180°~ 180°)
hhhh 椭球高度(cm)
-100 000~1 800 000(-1000.00~18 000.00m)
在所有信息终止的前的一个字节为校验和,是所有信息字节的“异或”。
(1)系统初始化
TMOD=0x20;
PCON=0x80;
SCON=0x50;
// 计算定时初值
TH1=value;
TL1=value;
P3SFS=0x03;
//设置LCD的I/O口模式
PSD8xx_reg.VM|=0x80;
//定时器0初始化
//LCD初始化为8位,2行,5×7点阵,
//不闪烁,光标关闭
lcd_init();
(2)读取Motorola Oncore接收器信息
先识别判断是否为@@Ea开头,若是,将其后的所有字符信息放入org_data[]数组中,以便后面从中提取所需数据。
while(1) {
while(!RI);
ch=SBUF;
while(!RI);
ch=SBUF;
if((RI)&&(ch==0x40)) //识别第二个’@’
{ RI=0;head[1]=ch;
while(!RI);
ch=SBUF;
if((RI)&&(ch==0x45)) //识别’E’
{ RI=0;head[2]=ch;
while(!RI);
ch=SBUF;
if((RI)&&(ch==0x61)) //识别抋?
{ RI=0;head[3]=ch;
for(k=0;k<=72;k++)
{ while(!RI);
org_data[k]=SBUF;
RI=0;
}
}
}
}
else {RI=0;continue;}
}
else {RI=0;continue;}
}
程序运行后,在液晶上显示的结果为:
TIME 爃07:m50:s10
LATITU: 牋0028?44 ?//经度为28°44′,因为表示度的小圆圈不好显示,所以用问号?表示度。
LONGIT: 牋0115?51 ?//纬度为115°51′
HIGH: 牋 0145 牋ft ?//高度为145英尺
结 语
在需要实时、准确地获取空间位置和时间信息的场合,如环境监测与保护工程、交通调度等,该设计可嵌入到此类远程移动监控系统中。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~