zoukankan      html  css  js  c++  java
  • 通过串口返回单片机内读取到的经纬度信息

    本实验已经设置好gps模块数据刷新速率为1次/秒,其他具体初始化请见https://www.cnblogs.com/wang-zefeng/p/12555646.html

    通过串口3将gps的数据送至单片机进行处理,通过串口1将处理好的经纬度数据返回至电脑。

      1 #include <stc15wxx.h>
      2 #include <string.H>
      3 #include <intrins.h>
      4 #define uchar unsigned char
      5 #define uint unsigned int
      6 uchar rec_gpsdata[51]={0};//Gps模块返回数据数组
      7 uchar rec_gpsnum=0,ok[]=",A,";
      8 uchar gpsdata[17]={0};
      9 uchar tn,p;
     10 long tm;
     11 void Init ()
     12 {
     13         P0M1 = 0x00;   P0M0 = 0x00;           //设置为准双向口
     14     P1M1 = 0x00;   P1M0 = 0x00;           //设置为准双向口
     15     P3M1 = 0x00;   P3M0 = 0x00;           //设置为准双向口
     16 }
     17 void Uart3Init(void)        //9600bps@11.0592MHz
     18 {
     19     S3CON = 0x10;        //8位数据,可变波特率
     20     S3CON &= 0xBF;        //串口3选择定时器2为波特率发生器
     21     AUXR |= 0x04;        //定时器2时钟为Fosc,即1T
     22     T2L = 0xE0;        //设定定时初值
     23     T2H = 0xFE;        //设定定时初值
     24     AUXR |= 0x10;        //启动定时器2
     25     EA=1;//开总中断
     26     IE2 |= 0x08;         // 串口3中断打开
     27 }
     28 
     29     void Uart1Init(void)        //9600bps@11.0592MHz
     30 {
     31     SCON = 0x50;        //8位数据,可变波特率
     32     AUXR |= 0x01;        //串口1选择定时器2为波特率发生器
     33     AUXR |= 0x04;        //定时器2时钟为Fosc,即1T
     34     T2L = 0xE0;        //设定定时初值
     35     T2H = 0xFE;        //设定定时初值
     36     AUXR |= 0x10;        //启动定时器2
     37     EA=1;//开总中断
     38     ES=1;//开串行口中断
     39 }
     40 
     41 void GPSreturn(void) interrupt 17
     42 {
     43         uint temp;
     44     if (S3CON & 0x01)           // 接收中断标志位
     45     {
     46         S3CON &= ~0x01;         // 清中断标志
     47                 temp=S3BUF;
     48             if(rec_gpsnum<=50)
     49                 rec_gpsdata[rec_gpsnum++]=temp;
     50             if(rec_gpsnum>50)
     51                 rec_gpsnum=0;
     52     }
     53 }
     54 
     55 //串行口连续发送char型数组,遇到终止号/0将停止
     56 void Uart1Sends(uchar *str)
     57 {
     58     while(*str!='')
     59     {
     60         SBUF=*str;
     61         while(!(SCON & 0x02));//等待发送完成信号(TI=1)出现
     62         SCON &= ~0x02;         // 清中断标志
     63         str++;
     64     }
     65 }
     66  
     67 // $GPGLL,2236.91284,N,11403.24705,E,060826.00,A,D*66
     68 void main()
     69 {
     70     Init();
     71     Uart1Init();
     72     Uart3Init();
     73     while(1) 
     74     {
     75         if(strstr(rec_gpsdata,ok)>0)//串口3GPS数据解析********************************************************************************************************
     76         {
     77                 gpsdata[0]=rec_gpsdata[7];    //纬度解析
     78                 gpsdata[1]=rec_gpsdata[8];
     79                 gpsdata[2]='.';
     80                 tm=(10000*(rec_gpsdata[9]-0x30)+1000*(rec_gpsdata[10]-0x30)+100*(rec_gpsdata[12]-0x30)+10*(rec_gpsdata[13]-0x30)+(rec_gpsdata[14]-0x30))/6;
     81                 gpsdata[3]=tm/1000+0x30;    //更新数据接口数据
     82                 gpsdata[4]=(tm%1000)/100+0x30;
     83                 gpsdata[5]=(tm%100)/10+0x30;
     84             if(tm%10==9)
     85                 gpsdata[6]=tm%10+0x30;
     86             else gpsdata[6]=tm%10+0x31;
     87                 gpsdata[7]=',';
     88                 tn=20;
     89                 gpsdata[8]=rec_gpsdata[tn];    //经度解析
     90                 gpsdata[9]=rec_gpsdata[tn+1];
     91                 gpsdata[10]=rec_gpsdata[tn+2];
     92                 gpsdata[11]='.';
     93                 tm=(10000*(rec_gpsdata[tn+3]-0x30)+1000*(rec_gpsdata[tn+4]-0x30)+100*(rec_gpsdata[tn+6]-0x30)+10*(rec_gpsdata[tn+7]-0x30)+(rec_gpsdata[tn+8]-0x30))/6;
     94                 gpsdata[12]=tm/1000+0x30;
     95                 gpsdata[13]=(tm%1000)/100+0x30;
     96                 gpsdata[14]=(tm%100)/10+0x30;
     97                 gpsdata[15]=tm%10+0x31;
     98                 gpsdata[16]='
    ';
     99             
    100             //    Uart1Sends(rec_gpsdata);  //此处修改短信内容
    101                 Uart1Sends(gpsdata);  //此处修改短信内容
    102     }
    103     } 
    104 
    105 }
    博客园
  • 相关阅读:
    实验室资质认定评审准则和要素及要点
    如何进行内审?
    实验室比对结果评价的3种方法
    第一次如何申请CNAS实验室认可资质
    风险评估的实施步骤
    Servlet
    CMMI_SCAMPY评估方法
    PHP_2
    PHP_1
    java中String与StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/wang-zefeng/p/12641723.html
Copyright © 2011-2022 走看看