51单片机与GPS串口通信

发布者:RadiantJourney最新更新时间:2015-10-14 来源: eefocus关键字:51单片机  GPS  串口通信 手机看文章 扫描二维码
随时随地手机看文章
    最近在考研调剂没有学校要, 找工作又找不到, 快崩溃了。

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

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

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

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

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

#include
#include

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   

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


void serial () interrupt 4
{
 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  串口通信 引用地址:51单片机与GPS串口通信

上一篇:Keil C51中的优化级别及优化作用
下一篇:51单片机串行口--同步移位寄存器

推荐阅读最新更新时间:2024-03-16 14:35

mcs51单片机位操作指令及编程举例
MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的 指令 集。在进行位处理时,CY(就是我们前面讲的进位位)称“位累加器”。有自已的位RAM,也就是我们刚讲的内部RAM的20H-2FH这16个字节单元即128个位单元,还有自已的位I/O空间(即P0.0…..P0.7,P1.0…….P1.7,P2.0……..P2.7,P3.0……..P3.7)。当然在物理实体上它们与原来的以字节寻址用的RAM,及端口是完全相同的,或者说这些RAM及端口都能有两种使用办法。 (1)位传送指令 MOV C,BIT MOV BIT,C 这组指令的功能是实现位累加器(CY)和其它位地址之间的数据传递。 例:MO
[单片机]
通过51单片机来控制直流电机
原理很简单了 直接上电路图和源程序吧 看不清楚图的请点保存 或者点开连接地址看大图 下面是针对上面电路图的程序 (直接复制粘贴进去运行 还是那句话 程序别光是复制粘贴 要一句句看懂 看出核心的那一段代码是怎么利用单片机加上一个芯片来控制电机的 为以后自己写其他驱动程序打基础 ) ;---------------------------------------------- ;名称:51单片机来控制直流电机 ;主频 6M晶震 51系列单片机 ;编译环境:keil c51编译通过 ;www.51hei.com单片机教程网原创,可以任意修改和作为学习测试用途 ;备注 :程序的关键部分是 T1定时中段程序里面 看PWM 是怎么控制电机
[单片机]
通过<font color='red'>51单片机</font>来控制直流电机
51单片机外部中断点亮LED
外部中断软件设计原理 中断发生的三个条件 ①中断源有中断请求; ②此中断源的中断允许位为 1; ③CPU 开中断(即 EA=1)。 比如我们配置外部中断 0,对应的配置程序如下: EA=1;//打开总中断开关 EX0=1;//开外部中断 0 IT0=0/1;//设置外部中断的触发方式(下降沿触发) 如果要配置的是外部中断 1,只需将 EX0 改为 EX1,IT0 改为 IT1 在编写程序时通常我们会将外部中断的配置放到一个自定义函数内便于管 理维护。如下伪代码所示: void Int0Init() { //设置 INT0 IT0=1;//边沿触发方式(下降沿) EX0=1;//打开 INT0 的中断允许。 EA=1;//打开总
[单片机]
串口通信的帧同步问题
封装STM32串口的底层时,遇到了串口帧同步的问题。虽然以前也遇到类似场合,写出来的代码基本能够解决问题,但是在逻辑上总是不能彻底的解释一些细节。 当前的工作环境: 由于代码想用在一个简单的PID闭环上,做在线的参数整定。假设当前PID解算周期是1ms,即每1ms,做一次串口的收包,解包,Pid解算,数据采集,然后打包,发包。也就是说是固定步长的解包。 串口的方案是开启收发的DMA以及DMA的中断。(坚决不考虑直接使用串口中断。一个字节中断一次太费资源)。DMA数组作为串口的FIFO队列(并不是真正意义上的队列)。 当前的需求: 1、时间节拍到来时,检查是否有收到数据。没有则跳出,有则进入下一步 2、检查数据中的包格式,比如包头是
[单片机]
GPS在PCI同步数据采集卡中的应用
摘要:介绍的功角测量数据采集卡是采用Cygnal公司C8051F021型单片机实现的PCI总线接口卡。该卡通过2片双口RAM分别实现与GPS接收板和上位机(PC)的数据交换,从而实现高速、可靠的数据采集、处理与传送。本数据采集卡采用片内12位高速ADC并配以片外采样保持电路,通过直接交流采样方法精确快速地实现对电压和电流的采样,保证了电力系统实时测量的要求。 关键词:C8051F021 PCI GPS 功角 双口RAM 交流采样 1 引言 国家电力公司陆延昌副总经理在第26届中国电网调度运行全闭幕式上的讲话中指出了今后一段时期内的电网技术的发展上应重点研究和解决的问题,其中,在电网安全、稳定、经济运动领域,互联电力系统实时
[应用]
8051单片机是几位机_8051单片机共有几个中断源
  8051单片机   8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。   8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。   8051单片机的构成   8051单片机主要有以下部分组成:   1、中央处理单元
[单片机]
由FWl22-M构成的短距离无线数据通信系统
   摘要 利用AT89LV52单片机作控制器,实现基于RFWaves公司的射频芯片RFWl22-M的短距离无线数据通信系统;分析射频芯片RFWl22-M及其与单片机的接口芯片RFW-D100的特点;给出系统的硬件原理框图厦软件流程图。对应用于该装置的无线数据传输协议CSMA进行分析,并且在对固件的编程配置中加以实现,    关键词 无线数据通信系统 RFWl22-M RFW-D100 AT89LV52 CSMA协议   目前,短程射频通信技术是一种热门技术,已广泛应用于实际中。主要有无线局域网(WLAN)、个人区域网络(PAN)及无线短距离消费类产品(如中低速数据传输应用,有效范围在30m以内)。该通信技术的标准有ⅢEE80
[安防电子]
以89C51单片机为控制核心的开关电源优化设计
引言   开关电源是利用现代电力电子技术控制功率开关管(MOSFET,IGBT)开通和关断的时间比率来稳定输出电压的一种新型稳压电源。从上世纪90年代以来开关电源相继进入各种电子、电器设备领域,计算机、程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源。利用单片机控制的开关电源,可使开关电源具备更加完善的功能,智能化进一步提高,便于实时监控。其功能主要包括对运行中的开关电源进行检测、自动显示电源状态;可以通过按键进行编程控制;可以进行故障自诊断,对电源功率部分实现自动监测;可以对电源进行过压、过流保护;可以对电池充放电进行实时控制。   开关电源的系统结构   通信用-48V开关电源结构图如图1所示:
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved