|
我使用的GPS接收模块是个天线一起集成的,模块背面写着GPS ANTENNA 但是老师给的资料我的是GERMIN OEM板的资料
我按照上面资料做的,写入输入语句,输出语句选的是GPRMC,输入语句是PGRMI
MCU是89C2051 我刚开始接收到了时间的时分 后来接了秒
然后我想尝试定位一下,发现接收不到,显示6H30有时候显示1H30( 我在武汉)
后来我就测试,到底接收到信号没有,因为GPRMC有个数据是判断定位没有嘛。结果显示没有定位
我怕是放在实验室,没有信号,然后就把他放到窗户外(我在二楼)。还是没有接收,不晓得是上面原因,请大家指教下~~~我怀疑是输入语句初始化的原因,但是尝试换不同的输入语句,还是没有接收到,附上程序,大家指点下
(注:我的是先接受,后无线发给另外的单片机的)
#include<reg51.h>
unsigned char mm,timer_h,time_h_s,time_h_g,hour_s,hour_g,time_min_s,time_min_g,time_sec_s,time_sec_g;
unsigned char cnt2, done2, tt2,sendflag;
sbit din=P1^7; //佑隡AX7219连接的管脚定义
sbit clk=P1^5;
sbit load=P1^6;
void delay(unsigned int t) //延时
{
unsigned int i;
for(i=t;i>0;i--);
}
void maxsend(unsigned char add,unsigned char dat) //MAX7219发送指令或者数据的子程序
{
unsigned char ads,i,j;
load=0;
i=0;
while(i<16)
{
if(i<8)
{ads=add;}
else
{ads=dat;}
for(j=8;j>=1;j--)
{
clk=0;
din=(bit)(ads&0X80);
ads=ads<<1;
clk=1;
}
i=i+8;
}
load=1;
}
void DisplayTime( ) //数码管显示
{
maxsend(0x01, time_sec_g);//分钟个位
maxsend(0x02,time_sec_s); //分钟十位
maxsend(0x03,hour_g); //小时个位
maxsend(0x04,hour_s);//小时十位
}
void send_data() //无线发送到另外一个单片机,因为无线模块硬件做的很好,所以不需什么程序
{
delay(500);
TI=0;
SBUF= 1;
while(!TI);
TI=0;
delay(500);
SBUF= 2;
while(!TI);
TI=0;
delay(500);
SBUF= 3;
while(!TI);
TI=0;
delay(500);
SBUF= 4;
while(!TI);
TI=0;
delay(500);
SBUF= 5;
while(!TI);
TI=0;
delay(500);
SBUF= hour_s; //小时十位
while(!TI);
TI=0;
delay(500);
SBUF= hour_g; //小时个位
while(!TI);
TI=0;
delay(500);
SBUF= time_min_s; //分钟十位
while(!TI);
TI=0;
delay(500);
SBUF= time_min_g; //分钟个位
while(!TI);
TI=0;
delay(500);
}
changeband9600() //发送到另一个单片机的时候设置9600的波特率
{
TMOD=0x20;//2方式
TH1=0xFD;//9600bit/s
TL1=0xFD;
TR1=1;
SCON=0x50;//1方式,发
PCON=0x00;
}
changeband4800() //接收GPS模块的信号时,波特率设置为4800(这是规定的波特率)
{
TMOD=0x20;//2方式
TH1=0xfa;//4800bit/s
TL1=0xfa;
TR1=1;
SCON=0x50;//receive open
PCON=0x00;
}
init_GPS() //输入语句PGRMI。接收时间
{
TI = 0;
SBUF ='$'; // 发送"$"
while(!TI);
TI = 0;
SBUF = 'P'; // 发送"P"
while(!TI);
TI = 0;
SBUF = 'G'; // 发送"G"
while(!TI);
TI = 0;
SBUF = 'R'; // 发送"R"
while(!TI);
TI = 0;
SBUF = 'M'; // 发送"M"
while(!TI);
TI = 0;
SBUF = 'I'; // 发送"O"
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = ','; // 发送","
while(!TI);
TI = 0;
SBUF = 'A'; // 发送"A"
while(!TI);
TI = 0;
SBUF = '*'; // 发送","
while(!TI);
TI = 0;
}
void main()
{
cnt2=1;
SCON=0x50;
PCON=0x00;
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
TR1=1;
EA=1;
ES=1;
maxsend(0X0C,0X01); //MAX7219的初始化
maxsend(0X0B,0X03);
maxsend(0X0A,0Xff);
maxsend(0X09,0Xff);
maxsend(0X0f,0X00);
maxsend(0X01,0x02);
maxsend(0X02,0x02);
maxsend(0X03,0x02);
maxsend(0X04,0x02);
init_GPS(); //GPS输入语句
while(1)
{
DisplayTime();
if(sendflag)
{
ES=0;
sendflag=0;
changeband9600(); //改变波特率发送
send_data(); //发出信息
maxsend(0X03,0x08);
delay(10000);
changeband4800(); //改变波特率接收
ES=1;
}
}
}
receivedat() interrupt 4 //receive int
{
if(RI)
{
RI=0;//从卫星上获取数据
mm=SBUF;
done2=1;
tt2=1;
if (mm == '$' && cnt2 == 1) //识别帧头
{cnt2 = 2;}
if (mm == 'G' && cnt2 == 2)
{cnt2 = 3;}
if (mm == 'P' && cnt2 == 3)
{cnt2 = 4;}
if (mm == 'R' && cnt2 ==4)
{cnt2 = 5;}
if (mm == 'M' && cnt2 == 5)
{cnt2 = 6;}
if (mm == 'C' && cnt2 == 6 )
{
cnt2 = 7;
done2 = 0;
}
if (done2 == 1 && cnt2 == 7 ) //逗号
{
cnt2 = 8;
tt2 = 0;
}
if (tt2 == 1 && cnt2 == 8) //小时十位
{
cnt2 = 9;
tt2 = 0;
time_h_s= mm-'0';
}
if (tt2 == 1 &&cnt2 == 9 ) //小时个位
{
cnt2 = 10;
tt2 = 0;
time_h_g=mm-'0';
timer_h = time_h_s*10 +time_h_g;
if (timer_h >=16) //转换为北京时间
{
timer_h -=16;
}
else
{
timer_h += 8;
}
hour_s=timer_h/10;
hour_g=timer_h%10;
}
if (tt2 == 1 && cnt2 == 10) //分钟十位
{
cnt2 = 11;
tt2 = 0;
time_min_s =mm-'0';
}
if (tt2 == 1 && cnt2 == 11) //分钟个位
{
cnt2 = 12;
tt2=0;
time_min_g =mm-'0';
}
if (tt2 == 1 && cnt2 == 12) //秒十位
{
cnt2 = 13;
tt2 = 0;
time_sec_s =mm-'0';
}
if (tt2 == 1 && cnt2 == 13) //秒个位
{
cnt2 = 1;
time_sec_g =mm-'0';
sendflag=1; //接受完之后,置位标志位,开始发送
}
}
}
因为发射功率有点大,所以可以看到数码管闪烁的现象,表面,的确接收到信号了,但是接收经纬度就不行(我让它接收到经纬度后显示一个数字)
请大家指教下,我的QQ:331750901 可以加QQ请教 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|