本实验已经设置好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!='