Extracting Data from GPS using 8051

Status
Not open for further replies.

niteshtripathi

Member level 3
Joined
Oct 11, 2013
Messages
59
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Visit site
Activity points
429
i want to extarct latitude and longitude from GPS, i hv writted this code but i am getting nothing on LCD
Code:
/* Basic program to show latitude and longitude on LCD extracted from GPGGA statement */
 
#include<reg51.h>
#define port2 P2
sbit rs = P1^7;
sbit rw = P1^6;
sbit e = P1^5;
char info[70];
char test[6]={"$GPGGA"};
char comma_position[15];
unsigned int check=0,i;
unsigned char a;
void receive_data();
void lcd_latitude();
void lcd_longitude();
 
//DELAY FUNCTION
void delay(unsigned int msec)
{
	int i,j ;
	for(i=0;i<msec;i++)
	for(j=0;j<1275;j++); 
}
 
// LCD COMMAND SENDING FUNCTION
void lcd_cmd(unsigned char item)
{
	port2 = item;
	rs= 0;
	rw=0;
	e=1;
	delay(1);
	e=0;
	return;
} 
 
// LCD DATA SENDING FUNCTION
void lcd_data(unsigned char item)
{
	port2 = item;
	rs= 1;
	rw=0;
	e=1;
	delay(1);
	e=0;			    
	return;
}
 
 // LCD STRING SENDING FUNCTION 
void lcd_string(unsigned char *str)
{
	int i=0;
	while(str[i]!='\0')
	{
        lcd_data(str[i]);
        i++;
        delay(10);
        }
        return;
}
 
// SERIAL PORT SETTING
void serial()
{
	TMOD=0x20;      //MODE=2
	TH1=0xfd;	     // 4800 BAUD
	SCON=0x50  ;    // SERIAL MODE 1 ,8- BIT DATA ,1 STOP BIT ,1 START BIT , RECEIVING ON
	TR1=1;	         //TIMER START
}
 
void find_comma()
{
	unsigned int i,count=0;
	for(i=0;i<70;i++)
	{	
		if(info[i]==',')
		{
			comma_position[count++]=i;
		}
    }
}

void compare()
{  
	IE=0x00;	       //Interrupt disable 
	find_comma();	   //Function to detect position of comma in the string
	lcd_latitude();    //Function to show Latitude
	lcd_longitude();   //Function to show Longitude
	check=0;
	IE=0x90;		   //Interrupt enable
}
void receive_data() interrupt 4					  
{
	info[check++]=SBUF;	  //Read SBUF
	if(check<7)	         //Condition to check the required data
        {
		if(info[check-1]!=test[check-1])
		{
		 check=0;
		}
        }
	RI=0;
}
void lcd_shape()	      //Function to create shape of degree
{
	lcd_cmd(64);
	lcd_data(10);
	lcd_data(17);
	lcd_data(17);
	lcd_data(10);
	lcd_data(0);
	lcd_data(0);
	lcd_data(0);
	lcd_data(0);
}
 
void lcd_latitude()		 //Function to display Latitude
{
	unsigned int c2=comma_position[1]; //Position of second comma
	lcd_shape();
	lcd_cmd(0x01);	         // Clear LCD display
	lcd_cmd(0x84);	         //Move cursor to position 6 of line 1
	lcd_string("LATITUDE");	 //Showing Latitude
	lcd_cmd(0xC0);			 //Beginning of second line  
	lcd_data(info[c2+1]);	
	lcd_data(info[c2+2]);
	lcd_data(0);			 //Degree symbol
	lcd_data(info[c2+3]);	
	lcd_data(info[c2+4]);
	lcd_data(info[c2+5]);
	lcd_data(info[c2+6]);
	lcd_data(info[c2+7]);
	lcd_data(info[c2+8]);
	lcd_data(info[c2+9]);
	lcd_data(0x27);          //ASCII of minute sign(')
	lcd_data(info[c2+10]);
	lcd_data(info[c2+11]);
	delay(250);
} 
 
void lcd_longitude()
{
	unsigned int c4=comma_position[3];
	lcd_cmd(0x01);	            //Clear LCD display
	lcd_cmd(0x84);	            //Move cursor to position 4 of line 1
	lcd_string("LONGITUDE");		//Showing Longitude
	lcd_cmd(0xC0);			    //Begining of second line  
	lcd_data(info[c4+1]);
	lcd_data(info[c4+2]);
	lcd_data(info[c4+3]);
	lcd_data(0);
	lcd_data(info[c4+4]);
	lcd_data(info[c4+5]);
	lcd_data(info[c4+6]);
	lcd_data(info[c4+7]);
	lcd_data(info[c4+8]);
	lcd_data(info[c4+9]);
	lcd_data(info[c4+10]);
	lcd_data(0x27);               //ASCII of minute sign(')
	lcd_data(info[c4+11]);
	lcd_data(info[c4+12]);
	delay(250);
}
void main()
{	EA=1;
	serial();
	lcd_cmd(0x38);	        //2 LINE, 5X7 MATRIX
	lcd_cmd(0x0e);         //DISPLAY ON, CURSOR BLINKING
	IE=0x90;
	while(1)
	{
		if(check==69)
		compare();
	}
}
 

I suggest you to check the voltage(s) on the LCD port pins....and while going through the code,I saw these words...."SBUF,SCON..." that means you are using serial peripheral Interface (SPI).Do you _have_ to use SPI because the GPS unit supports only that mode of communication,or are there other communication modes,as well,which are supported by the GPS unit?
 

@udayan99 SBUF = Serial Buffer and SCON = Serial Control registers in 8051. You got confused SBUF of 8051 with SSPBUF of PIC.

Missing


Code C - [expand]
1
2
P3 = 0x03; //UART pins config
ES = 1;     Enable Serial interrupt

 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…