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

http://www.eepw.com.cn/article/217538.htm