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;
}
}
}