首页 新闻 > 科技 > 正文

51单片机与GPS串口通信

最近在考研调剂没有学校要, 找工作又找不到, 快崩溃了。

刚想找点乐子,忘掉烦恼。开了一下自己的工具箱,发现以前买了一块二手的车载GPS,因为一直没有资料就放在那没有用。

本文引用地址:http://www.eepw.com.cn/article/201611/321738.htm

仔细看了一下GPS发现芯片的LOGO和型号还是看得出来的,这是一块用了索尼CXD2931R作为接收GPS信号的芯片,本来想到网上看看有没有现成的作品,可是很遗憾没能找到(可能已经别淘汰了),没办法只能到ALLDATASHEET上下了这份芯片的手册, 看了下手册,发现sony的这款GPS芯片很高档呀:集成32位处理器、DSP、RAM和ROM的容量也很大(怪不得GPS价格这么贵)。

原来GPS使用串口来给主机发送信息的,这块GPS的通信速率是4800bit/s,了解这么多就差不多了,现在只要找找到串口和电源线在哪就行了,对着手册找的确就是方便。

接好线,用一下comdebug软件看看GPS会不会发信息,结果很好,看到了所谓的NMEA码,但是没有定位到, 可能是在室内的缘故,很是高兴呀。

本来想用AVR,可是芯片都被同学借走了,而pic的仿真器找不到了,(悲剧的时候什么都悲剧) 只能用51了,51很久没有用了,又只能求助书本了,这样下来半天的时间就没了;搞电子的确很不容易,虽然原理说起来很简单。 下载分享一下成果:

#include #include 12864.h>

sbit light = P1^0;

#define light_on()light=1#define light_off()light=0

void init_serial(void);void disp();

unsigned char ch;unsigned char str[65]={"$GPRMC,"};unsigned char read_flag= 0;

bit rev_flag = 0;bit cur_rev = 0;

void main(){unsigned int i=0;//unsigned char ff=0;light_off();str[64] = ;lcd_init();init_serial();while(1){if( cur_rev && read_flag&& (rev_flag == 0) )//$PRMC{switch( ch ){case $:break;case G:read_flag ++; break;case P:read_flag ++; break;case R:read_flag ++; break;case M:read_flag ++; break;case C:read_flag ++; break;case ,:read_flag ++; rev_flag = 1; break;default :read_flag = 0;break;}cur_rev = 0;}if( cur_rev && rev_flag == 1 ){light_off();if( read_flag < 64 ){str[ read_flag ] = ch;read_flag ++;}cur_rev = 0;}

if( read_flag == 64 ){

ES = 0;disp();light_on();read_flag = 0;rev_flag = 0;ES = 1;}i ++;if( i <= 50000 ) light_off();else if( i >50000 && i <= 60000 )light_on();else i = 0;}}

void init_serial()//方式1 定时器1,波特率4800

{//初始化定时器T1TMOD = 0x20;TL1 = 0xFA;TH1 = 0xFA;//波特率为:4800ET1 = 0;//T1用作波特率发生器,禁止T1中断TR1 = 1;//启动定时器T1SCON = 0x70;//方式1,SM2位为1PCON = 0;//波特率无倍增EA = 1;ES = 1;}

void serial () interrupt4{if (RI){RI = 0;ch = SBUF;//lcd_move_right(ch);cur_rev = 1;if( ch == $ && read_flag == 0 ) read_flag ++;//起始位}}

void disp(){unsigned char i=0;//unsigned char j;goto_ddram(1,1);while( str[i] != ){lcd_move_right(str[i]);i++;if( i == 16 )goto_ddram(2,1);if( i == 32 )goto_ddram(3,1);if( i == 48 )goto_ddram(4,1);}}

关键词: 51单片机GPS串口通

最近更新

关于本站 管理团队 版权申明 网站地图 联系合作 招聘信息

Copyright © 2005-2018 创投网 - www.xunjk.com All rights reserved
联系我们:33 92 950@qq.com
豫ICP备2020035879号-12