于GPS_CHECKTIAMER串口收发程序

发布者:忙中取乐最新更新时间:2012-08-25 来源: 51hei关键字:GPS  CHECKTIAMER  串口收发 手机看文章 扫描二维码
随时随地手机看文章
单片机串口发送接收程序,下面是关于GPS_CHECKTIAMER,局部应用程序

 

#define UART_R_LEN  60
#define UART_T_LEN  34

uchar idata trdata[UART_T_LEN];     //定义串口发送缓冲区
uchar idata gpsdata[UART_R_LEN];          //定义GPS数据串口接收缓冲区

uchar  *inlast_t = trdata;             //最后放进发送缓冲区的
uchar  *outlast_t = trdata;            //最后从发送缓冲区出去的
uchar  *inlast_r = gpsdata;            //最后进入接收缓冲区的
uchar  *outlast_r = gpsdata;           //最后从接收缓冲区取走的
bit  t_empty,t_full,r_empty,r_full;  //缓冲区的状态标志位
bit  new_time,t_finish;              //接收完标志和发送完标志

void serail(void) interrupt 4
{
    if(TI)                           //如果发送中断置位
 {
     TI = 0;
  if(!t_empty)                 //如果发送缓冲区数据没有发完
  {
  
      SBUF = *outlast_t;          //最后从发送缓冲区出去的字符送SBUF
   outlast_t++;           //最后发送字符指针地址增1
   t_full = 0;            //发送区状态为未满
   if(outlast_t >= (trdata + UART_T_LEN)) //如果最后发送字符的地址超出
     outlast_t = trdata;           //地址到顶部回到底部
   if(outlast_t == inlast_t)  //如果最后发送字符的地址为最后进入发送的字符地址
     t_empty = 1;
  }
  else t_finish = 1;
 } 

 if(RI)                      //如果接收中断置位
 {
  RI = 0;
  if(~r_full)             //如果接收缓冲区未满
  {
   *inlast_r = SBUF; //最后进入接收缓冲区的字符送SBUF
   inlast_r++;   //最后进入接收缓冲区的字符地址增1
   r_empty = 0;  //接收缓冲区为非空
   if(inlast_r >= (gpsdata + UART_R_LEN))   //如果最后接收字符的地址超出
     inlast_r = gpsdata;            //地址到顶部回到底部
   if(inlast_r == outlast_r)    
//如果最后接收字符的地址等于最后从接收区取走的字符地址
     r_full = 1;       //则接收区满
  }
 } 
}

void loadmsg(uchar *msg, int num)         //把字符串放入发送缓冲区准备发送
{
 int i;

 for(i=0; i< num; i++) 
 {
  *inlast_t = *msg;       //字符装入最后进入发送发送缓冲区的内容
  msg++;          //字符串和缓冲地址同时增1
  inlast_t++;
  t_empty = 0;        //未发送完
  if(inlast_t >= (trdata+UART_T_LEN))
    inlast_t = trdata;         //地址到顶部回到底部
  if(inlast_t == outlast_t)
    t_full = 1;           //发送缓冲区满
  
 }

 if(t_finish)
 {
  TI = 1;
  t_finish = 0;
 }

}


uchar getbyte_r(void)         //从接收缓冲区取一个字节
{
 uchar c;
 while(r_empty);           //当接收缓冲区等待接收
 ES = 0;       //禁止串行中断
 c = *outlast_r;     //最后从接收缓冲区取走的数据赋值给C
 r_full = 0;      //接收未满
 outlast_r++;     //最后由接收缓冲区取走的数据地址增1
 if(outlast_r >= (gpsdata + UART_R_LEN))   //如果地址超出
   outlast_r = gpsdata;     //地址回原处
 if(outlast_r == inlast_r)    
//如果最后接收字符的地址等于最后从接收区取走的字符地址
   r_empty = 1;      //接收缓冲区为空
 ES = 1;        //恢复串行中断
 return c;
}

uchar r_state = 0;
uchar r_byte = 0;
uchar gps_chksum= 0;

void r_string(void)     // 接收字符串
{
 uint    *ptr;
  
 uchar temp;
 uchar tp[7];   
 //定义时标接收区,所存储的时标数据为接收缓冲区未作转换的时标,用来作全局时标的中转存储

 while(!r_empty && !new_time)   //若接收缓冲区非空,且接收未完成
 {
  temp = getbyte_r();     //每次while循环依次取入一个字节的接收数据
  switch(r_state)      
//如果依次取入的数据符合表头“@@Hb”,r_state位置4,进入取时标及GPS状态字节
  {
   case 0:
    if(temp == 0x40)   //@
      r_state = 1;
    break;
   case 1:
    if(temp == 0x40)        //@  
    {
     r_state = 2;
     gps_chksum = 0;
    }
    else r_state = 0;
       break;
   case 2:
    if(temp == 0x48)  //H
    {
                    r_state = 3;
     gps_chksum = gps_chksum^temp;
    }
    else r_state = 0;
    break;
   case 3:
    if(temp == 0x62)  //b
    {
                    r_state = 4;
     r_byte = 0;
     gps_chksum = gps_chksum^temp;
    }
    else r_state = 0;
    break;
   case 4:
    if(r_byte == 47)
      { if(gps_chksum == temp)   
//在完成有用数据采集后,经过数据转换,将标准字符存入全局时标缓冲中
          {
        ptr = (uint*)(tp+2);    
                    //经转换数据送时标缓冲区 
              gps_dt[0] = (*ptr)%100;             //年
                 gps_dt[1] = tp[0];        //月
                 gps_dt[2] = tp[1];           //日
                 gps_dt[3] = tp[4];           //时
                 gps_dt[4] = tp[5];           //分
                 gps_dt[5] = tp[6];           //秒
  
        new_time = 1;  
        } 
     r_state = 0;          //用于判断的数据归零,以便下一次取数据
      }
    else
      {
     gps_chksum = gps_chksum^temp;

     if(r_byte <7)
          tp[r_byte] = temp;
     else if(r_byte == 38)
      gps_state = temp;

        r_byte++;
      } 
    break;
      default:
       break;
  }

 }
}
关键字:GPS  CHECKTIAMER  串口收发 引用地址:于GPS_CHECKTIAMER串口收发程序

上一篇:指针在c语言中的妙用
下一篇:单片机检测按键短击,连击c程序

推荐阅读最新更新时间:2024-03-16 13:06

Navigon推内置u-blox GPS个人导航设备
瑞士Thalwil–2007年12月17日 -Navigon最近推出一种吸引人的高性能个人导航设备,该设备与保时捷设计中心联合开发,内置u-blox的ANTARIS4 SuperSense GPS技术。 Navigon新推出的P9611导航设备,该设备尺寸为125mm x 82 mm x 19mm,重量仅250克,拥有诸多特色硬件和软件,包括预装的SD存储卡、USB线、车载支架、充电线及高音质音频播放器。设备带有蓝牙技术,通过支持蓝牙的移动电话上可以实现免提通话。 其它软件包括37个欧洲国家的数字地图和集成的TMC(交通信息频道)可以通知使用者交通拥堵信息,并自动计算备选路线;预装有国际信息,这些信息穿越国界后自动更新,可以显示
[新品]
基于GPS的数据采集系统的研究
GPS(Global Positioning System)全球定位系统是美国发射的24颗GPS地球卫星所组成的具有能提供全球全天候导航、定位、授时功能的系统。美国政府宣布2000年至2006年期间,在保证美国国家安全不受威胁的前提下,取消SA政策,利用C/A码进行单点定位的精度由100米提高到10米,GPS民用信号精度在全球范围内得到改善,这进一步掀起了GPS应用的热潮,刺激GPS技术与科技和生产领域的结合。诞生了大量的GPS的应用成果。如相量测量装置PMU就是利用了GPS来解决了电力系统广域空间同步测量的问题。 随着时代的发展,如今对数据采集在通信,电力和建筑等特殊应用场合又提出了新的要求,希望能够对被测系统不同节点的
[测试测量]
基于<font color='red'>GPS</font>的数据采集系统的研究
STM8s串口2异步基本收发使用说明
学到定时器部分时,想要将调试信息输出,故先把串口基本功能学了,才能方便后面的调试。 使用某宝上买的STM8S最小系统板,外部晶振为8MHz的。HSI的误差对串口波特率影响比较大,这里使用外部晶振。 开发板芯片是105K4的,只有UART2,这里把UART2的整体框图放在下面,蓝色矩形框是串口异步基本收发所用到的寄存器,可以看到,所要用到的寄存器很少。 这里先说下如何计算波特率以及误差多少: 官方手册已经给出: 这里我使用的波特率为9600bps,然后主时钟为8M,这样分频因子为8M/9600约等于833=0x341,计算的波特率为8M/833=9603.8,误差为(9603.8-9600)/9600*100%约
[单片机]
STM8s<font color='red'>串口</font>2异步基本<font color='red'>收发</font>使用说明
车载GPS接收机测试
车载 GPS 导航系统是汽车电子的重要应用,随着汽车进入普通家庭并迅速普及,对车载 GPS 的需求也在急速增长。车载 GPS 导航系统由车载 GPS 接收机和导航软件组成,其中车载 GPS 接收机的性能指标直接影响到导航应用的用户体验,是影响产品性能的关键部分。目前车载 GPS 接收机测试并没有统一的标准,与行业大量应用的手机 GPS 测试相比,需要增加面向汽车应用的测试要求,形成更加全面的符合汽车性能特点的车载 GPS 测试方法。本文将主要探讨 GPS 系统原理,车载 GPS 接收机测试主要考虑的问题以及相应的测试方法。 GPS 工作原理 GPS 系统的英文全名是 Navigation Satellite Timing And
[测试测量]
车载<font color='red'>GPS</font>接收机测试
GPS模块在便携式导航系统中的应用
摘要:GPS是全球定位系统的简称,目的是在全球范围内对地面或空中目标进行准确定位和监测。文章讨论了GPS模块TU-30的工作原理,介绍了其在便携式导航系统中的应用,给出了这种GPS模块与单片机的接口电路。 关键词:GPS;TU-30;单片机;卫星定位;导航 1 GPS系统简介 GPS是Global Positioning System 的缩写,即全球定位系统。其目的是在全球范围内对地面和空中目标进行准确定位和监测。随着全球性空间定位信息应用的日益广泛,GPS提供的全时域、全天候、高精度定位服务将给空间技术、地球物理、大地测绘、遥感技术、交通调度、军事作战以及人们的日常生活带来巨大的变化和深远的影响。 目前的民用GPS设备
[应用]
嵌入式系统在军用PDA中的设计与实现
 1.引言:           随着现代战争的信息化和电子化,功能多样而又精巧实用的掌上型智能设备(军用PDA)日益受到军方的重视。        由于军用PDA需要将卫星定位、无线通信、图像摄取传送等等功能集于一体,对于高科技战争中各作战个体至关重要,国外一些国家早已从事相关技术的研究和开发,并将此类产品装备到特定的作战场合。军用PDA产品根据不同的应用场合有不同的功能要求,涉及多种当前最先进的技术,如嵌入式CPU应用、多任务操作系统RTOS、GIS应用、卫星定位系统定位、无线通信、蓝牙技术、CCD技术、图像处理技术等。本文结合一款通用的32位CPU来阐述军用PDA的构成以及实现方法。   2.硬件实现:   
[嵌入式]
GPS车辆监控管理系统的简介及解决方案
  GPS系统简介   GPS管理系统的基本用途有:车辆实时定位、车辆监视控制、车辆调度管理、车辆报警处置、车辆物流管理、网上查车服务、短信语音通信等。系统适用于城市、地区、以及全国联网使用,适用于政府、集团、企事业单位以至私家车辆用户使用。它能监控车辆违章行驶、提升车辆的防盗抢能力、提高车辆营运效率,增加车辆营运经济效益,促进我国车辆管理现代化、信息化、智能化建设,   系统的服务对象可为:运输车辆、出租车辆、公交车辆、消防车辆、急救车辆、边防车辆、押钞车辆、危险品车辆、应急指挥车辆、贵宾车队、私家车辆、项目车辆等。数字金石GPS车辆监管系统可为不同用户、不同用途的车辆提供不同的特殊使用功能。   数字金石车辆监管系统由七个
[安防电子]
基于ARM的车载GPS定位终端的设计
1 引言 车载GPS定位终端在过去十年内已经成为汽车工业发展的焦点。在欧美国家和日本,车载GPS定位终端在最近几年内得以广泛的应用。车载GPS定位终端是融全球卫星定位技术(GPS)和现代无线通信技术于一体的高科技系统。该终端的主要功能是通过GPS模块从卫星获取GPS数据,将移动车辆的动态位置(经度、纬度、时间、速度)等信息实时地通过无线通信链路上传至监控中心,同时接收监控中心发送的控制命令。目前的车辆监控系统中大多采用GSM通信网以短信息的方式进行通信,不能充分满足实际应用的需要。而GPRS(General Packet Radio Service)通用分组无线业务是一种以分组交换技术为基础,采用IP数据网络协议的高效数据传输网
[单片机]
基于ARM的车载<font color='red'>GPS</font>定位终端的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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