Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Extracting Data from GPS using 8051

Status
Not open for further replies.

niteshtripathi

Member level 3
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

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top