khuongbkhn
09-05-2012, 12:23 PM
chào mọi người, mình đang làm mạch thu và xử lí tín hiệu GPS. Code vẫn chưa chạy được, ai biết chỉ dùm mình xem sai và thiếu những gì. Cảm ơn nhiều!
code:
#include "C:\Documents and Settings\FangFang\My Documents\code.h"
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA_PORT D
#define LCD_TYPE 2
#include <lcd.c>
#byte SPBRG =0x99
#byte RCSTA =0x18
#byte PIR1 =0x0C
#byte RCREG =0x1A
#bit RCIF = 0x0c.5
#bit SPEN =0x18.7
#bit CREN =0x18.4
unsigned char GPSbuffer[70];
int8 position[11];
int8 check=0,i;
unsigned char GPRMC[7]="$GPRMC";
void find_comma()
{
int8 couter=0;
for(i=0;i<70;i++)
{
if(GPSbuffer[i]==',')
{
position[couter]=i;
couter++;
}
}
}
#INT_RDA
void receive_GPSbuffer()
{
char c;
c=getc();
if(check==69)
return;
GPSbuffer[check++]=getc();
if(check<7)
if(GPSbuffer[check-1]!=GPRMC[check-1])
check=0;
}
void time()
{
int8 i;
i=position[0];
printf(lcd_putc,"TIME: %c%c:%c%c:%c%c",GPSbuffer[i+1],GPSbuffer[i+2],
GPSbuffer[i+3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+6]);
delay_ms(1000);
}
void latitude()
{
int8 i;
i=position[2];
if ((GPSbuffer[i+11]=='N') || (GPSbuffer[i+11]=='S'))
printf(lcd_putc,"LAT: %c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+11]);
else
printf(lcd_putc,"LAT: %c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+10]);
delay_ms(1000);
}
void longtitude()
{
int8 i;
i=position[4];
if ((GPSbuffer[i+12]=='W') || (GPSbuffer[i+12]=='E'))
printf(lcd_putc,"LONG: %c%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+12]);
else
printf(lcd_putc,"LONG:%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+11]);
delay_ms(1000);
}
void main()
{
lcd_init();
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_tris_b(0x00); // Set Port B as output port
set_tris_a(0x00);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (1)
{
receive_GPSbuffer();
if (check==69)
{
find_comma();
time();
lcd_putc("\f");
longtitude();
lcd_putc("\f");
latitude();
lcd_putc("\f");
check=0;
}
}
SPBRG=spbrg_value;
SPEN=1;
CREN=1;
}
code:
#include "C:\Documents and Settings\FangFang\My Documents\code.h"
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA_PORT D
#define LCD_TYPE 2
#include <lcd.c>
#byte SPBRG =0x99
#byte RCSTA =0x18
#byte PIR1 =0x0C
#byte RCREG =0x1A
#bit RCIF = 0x0c.5
#bit SPEN =0x18.7
#bit CREN =0x18.4
unsigned char GPSbuffer[70];
int8 position[11];
int8 check=0,i;
unsigned char GPRMC[7]="$GPRMC";
void find_comma()
{
int8 couter=0;
for(i=0;i<70;i++)
{
if(GPSbuffer[i]==',')
{
position[couter]=i;
couter++;
}
}
}
#INT_RDA
void receive_GPSbuffer()
{
char c;
c=getc();
if(check==69)
return;
GPSbuffer[check++]=getc();
if(check<7)
if(GPSbuffer[check-1]!=GPRMC[check-1])
check=0;
}
void time()
{
int8 i;
i=position[0];
printf(lcd_putc,"TIME: %c%c:%c%c:%c%c",GPSbuffer[i+1],GPSbuffer[i+2],
GPSbuffer[i+3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+6]);
delay_ms(1000);
}
void latitude()
{
int8 i;
i=position[2];
if ((GPSbuffer[i+11]=='N') || (GPSbuffer[i+11]=='S'))
printf(lcd_putc,"LAT: %c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+11]);
else
printf(lcd_putc,"LAT: %c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+10]);
delay_ms(1000);
}
void longtitude()
{
int8 i;
i=position[4];
if ((GPSbuffer[i+12]=='W') || (GPSbuffer[i+12]=='E'))
printf(lcd_putc,"LONG: %c%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+5],GPSbuffer[i+12]);
else
printf(lcd_putc,"LONG:%c%c.%c%c %c",GPSbuffer[i+1],GPSbuffer[i+2],GPSbuffer[i
+3],GPSbuffer[i+4],GPSbuffer[i+11]);
delay_ms(1000);
}
void main()
{
lcd_init();
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_tris_b(0x00); // Set Port B as output port
set_tris_a(0x00);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (1)
{
receive_GPSbuffer();
if (check==69)
{
find_comma();
time();
lcd_putc("\f");
longtitude();
lcd_putc("\f");
latitude();
lcd_putc("\f");
check=0;
}
}
SPBRG=spbrg_value;
SPEN=1;
CREN=1;
}