基于 PIC18F8520 的 GPS 精准时钟实现
软件实现
软件由主程序和中断子程序组成,在MPLAB IDE v8.53环境下,采用MPLAB C18编译器,用C语言编程实现。
在主程序中进行系统的初始化、数据处理、LCD显示,GPS数据的接收则通过串口中断实现,每收到一条完整的NMEA语句,就设定一个标志,在主程序中通过查询该标志进行UTC时间的提取以及转换成北京时间,再通过LCD显示。由于将复杂的数据处理放到主程序中,这样就可以使中断程序尽量简短,在发生其他中断时,单片机可以及时做出响应,提高了系统的实时性。流程图如图4所示。
图4 流程图
由于GPS模块输出的时间为UTC时间,根据习惯,需转换成本地时间(北京时间),这项工作在主程序中完成。根据本地时间=UTC时间+时区值,而北京位于第8时区,时区值为+8,故北京时间=UTC时间+8。在转换过程中,须对16:00:00—23:59:59 UTC时间作相应的处理,+8后判断小时是否大于24,若大于,则减去24,同时日期+1,另外,还涉及到闰年、大月、小月的处理。
中断服务程序流程图中,串口接收数据时判断字头,只判断了“$”一个字符,这是因为之前已通过SNSRCFG软件将GPS15XL设置为只输出GPRMC一条NMEA语句。
调试及运行
首先,对GPS15XL进行初始化。将GPS15XL通过串口与PC连接好,给GPS15XL上电,用软件SNSRCFG设置初始化信息,波特率设为9600,只输出一条GPRMC语句(要获取UTC日期和时间,一条GPRMC语句就足够了),将这些信息写入OEM板内的永久性存储器中,下次上电时将会自动生效。
然后,通过电路板上预留的ICSP接口,利用PIC16-MCD2编程器将编译好的程序写入单片机。编程时不给电路板供电,单片机通过MCD2供电,须注意电路板上跳线的设置。
最后,将GPS15XL与电路板连接。给电路板和GPS15XL上电,授时接收系统进入正常工作状态,单片机通过RS-232串行方式接收GPS15XL的卫星数据,获取准确的时间信息,并转换成北京时间,通过LCD显示。
注意:使用时,GPS授时天线一定要放在开阔的室外,否则接收不到卫星信号,也就无法获取UTC时间信息。
结语
本文利用PIC18F8520提取GPS高精度时钟,并在LCD上显示,所实现的时钟系统是配电线路故障远程监测及定位系统项目的一部分,经测试,该设计运行稳定,能够为整个系统提供精确的时间信息,具有较高的可靠性、准确性和实用性。此外,还可以将GPS时钟的内核嵌入其他系统,以其时间作为系统时间,例如:金融/证券实时结算、民航/铁路/交通调度系统、各种计算机网络系统、实时通信网络系统、体育彩票和福利彩票等实时销售系统等,应用非常广泛。
单片机 51单片机 MCU 单片机视频教程 单片机开发 ARM单片机 AVR单片机 PIC单片机 Atmel stm32 单片机学习 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)