毛炳华 2016-10-23 14:25 采纳率: 0%
浏览 1023

avr单片机接收GPS信号问题

avr单片机接收GPS信号然后使用GSM发送出去,但是始终没有gps数据(gps可以收到经纬度信息)
//头文件
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
//头文件
#include"delay.h"
#include"chuankou.h"
//显示经纬度
void ne(void)
{
//N: 40.00.00---
//E:116.00.00---
//-------------------------------
dcan1 = Get_Double_Number(&buf[GetComma(3, buf)]);
ican1 = (int)dcan1 / 100;

fcan1 = (dcan1 - ican1 * 100);
ican2 = (int)fcan1;
fcan2 = ((fcan1 - ican2) * 60);
ican3= (int)fcan2;
xianshi0[0]=buf[GetComma(4, buf)]; //南北纬
xianshi0[1]=':';
xianshi0[2]=0x30+ican1%1000/100;
xianshi0[3]=0x30+ican1%100/10;
xianshi0[4]=0x30+ican1%10;
xianshi0[5]='.';
xianshi0[6]=0x30+ican2%1000/100;
xianshi0[7]=0x30+ican2%100/10;
xianshi0[8]=0x30+ican2%10;
xianshi0[9]='.';
xianshi0[10]=0x30+ican3%1000/100;
xianshi0[11]=0x30+ican3%100/10;
xianshi0[12]=0x30+ican3%10;
xianshi0[13]=' ';
xianshi0[14]=' ';
xianshi0[15]=' ';
//N: 40.00.00---
//E:116.00.00---
dcan1= Get_Double_Number(&buf[GetComma(5, buf)]);
ican1 = (int)dcan1 / 100;

fcan1 = (dcan1 - ican1 * 100);
ican2 = (int)fcan1;
fcan2 = ((fcan1 - ican2) * 60);
ican3= (int)fcan2;

 xianshi1[0]=buf[GetComma(6, buf)]; //东西经
 xianshi1[1]=':'; 
 xianshi1[2]=0x30+ican1%1000/100;
 xianshi1[3]=0x30+ican1%100/10;
 xianshi1[4]=0x30+ican1%10;
 xianshi1[5]='.';
 xianshi1[6]=0x30+ican2%1000/100;
 xianshi1[7]=0x30+ican2%100/10;
 xianshi1[8]=0x30+ican2%10;
 xianshi1[9]='.';
 xianshi1[10]=0x30+ican3%1000/100;
 xianshi1[11]=0x30+ican3%100/10;
 xianshi1[12]=0x30+ican3%10;
 xianshi1[13]=' ';
 xianshi1[14]=' ';
 xianshi1[15]=' ';

}
//GPS显示
//---------------------------------------------------
void ctrl(void)
{
uchar status;
//如果接收完一行

buf=rev_buf;

status = buf[GetComma(2, buf)];
if ((rev_buf[5] == 'C')&&(status == 'A')) //如果第五个字符是C,($GPRMC)

{
error_num = 0;

ne();//--经纬度----------------------
}

gps_flag = 0;
init_usart1();

//-----------------------------------------------------
}

//串口发送AT指令短信
void send_news(void)
{
puts("AT+CSCS=");
put('"'); puts("GSM");put('"');

put('\r');put('\n');
_delay_ms(2000);
//---------------------------------------
puts("AT+CMGF=1");

put('\r');put('\n');
_delay_ms(2000);
//---------------------------------------
puts("AT+CMGS=");
put('"'); puts("18818216446");put('"');

put('\r');put('\n');
_delay_ms(2000);
//----------------------------------------
puts("GPS: ");
puts(xianshi0);
puts(xianshi1);
put(0x1a);
_delay_ms(2000);

}

//接受GPS数据
#pragma interrupt_handler ur1_ovf_isr:31
void ur1_ovf_isr(void)
{

uchar ch;
ch=UDR1;

if ((ch == '$') && (gps_flag == 0)) //如果收到字符'$',便开始接收

{
rev_start = 1;
}
if (rev_start == 1) //标志位为1,开始接收

{
rev_buf[num++] = ch; //字符存到数组中

if (ch == '\n') //如果接收到换行

{
rev_buf[num] = '\0';
rev_start = 0;
gps_flag = 1;
num = 0;
UCSR1B=0;
}
}
}

  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-23 15:07
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器