Mình đang làm đề tại thu nhận sóng GPS từ molude sim548c ra LCD.
Chuẩn giao tiếp của GPS là UART.
Mình đã viết code nhưng gặp vấn đề sau, mọi người góp ý cho mình với.
+ Mình test bằng chương trình terminal, gỏ kí tự từ bàn phím để giả lập chuỗi GPS thì ok.
+ Khi kết nối pic với sim548c thì chỉ xuất ra LCD 1 lần duy nhất chuỗi $GPRMC. Mình chỉ cần tách chuỗi $GPRMC thôi.
+ Đây là chuổi GPS mình nhận được khi kết nối sim548c với máy tính thông qua terminal:
$GPRMC,163941.000,A,1046.6020,N,10639.9365,E,2.90,95.37,010611,,,A*51
$GPVTG,95.37,T,,M,2.90,N,5.4,K,A*3F
$GPGGA,163942.000,1046.6015,N,10639.9361,E,1,03,5.5,47.7,M,2.3,M,,0000*50
$GPGSA,A,2,10,17,28,,,,,,,,,,5.6,5.5,1.0*3C
$GPRMC,163942.000,A,1046.6015,N,10639.9361,E,1.62,72.50,010611,,,A*56
$GPVTG,72.50,T,,M,1.62,N,3.0,K,A*3B
$GPGGA,163943.000,1046.6011,N,10639.9373,E,1,03,8.6,49.4,M,2.3,M,,0000*55
$GPGSA,A,2,10,04,28,,,,,,,,,,8.7,8.6,1.0*3C
+ Chu trình cứ lặp lại như vậy với tốc độ boud là 4800.Mình giả sử chỉ lấy giờ phút giây thôi (163941).
+ Đây là code:
Chuẩn giao tiếp của GPS là UART.
Mình đã viết code nhưng gặp vấn đề sau, mọi người góp ý cho mình với.
+ Mình test bằng chương trình terminal, gỏ kí tự từ bàn phím để giả lập chuỗi GPS thì ok.
+ Khi kết nối pic với sim548c thì chỉ xuất ra LCD 1 lần duy nhất chuỗi $GPRMC. Mình chỉ cần tách chuỗi $GPRMC thôi.
+ Đây là chuổi GPS mình nhận được khi kết nối sim548c với máy tính thông qua terminal:
$GPRMC,163941.000,A,1046.6020,N,10639.9365,E,2.90,95.37,010611,,,A*51
$GPVTG,95.37,T,,M,2.90,N,5.4,K,A*3F
$GPGGA,163942.000,1046.6015,N,10639.9361,E,1,03,5.5,47.7,M,2.3,M,,0000*50
$GPGSA,A,2,10,17,28,,,,,,,,,,5.6,5.5,1.0*3C
$GPRMC,163942.000,A,1046.6015,N,10639.9361,E,1.62,72.50,010611,,,A*56
$GPVTG,72.50,T,,M,1.62,N,3.0,K,A*3B
$GPGGA,163943.000,1046.6011,N,10639.9373,E,1,03,8.6,49.4,M,2.3,M,,0000*55
$GPGSA,A,2,10,04,28,,,,,,,,,,8.7,8.6,1.0*3C
+ Chu trình cứ lặp lại như vậy với tốc độ boud là 4800.Mình giả sử chỉ lấy giờ phút giây thôi (163941).
+ Đây là code:
Code:
#include <htc.h>
#include <stdio.h>
#include "uart.h"
#include "lcd.h"
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);
char buf[58];
void delay();
void main()
//$GPRMC,183943.000,A,1046.6063,N,10639.9359,E,0.65,180.05,190511,,,A*63
{
uart_init();
lcd_init();
char x; int i,j;
while(1)
{
i=0;
x = uart_getc();
while (x != 'R') //confirm serial $GPRMC
{
x = uart_getc();
}
// nhan chuoi $GPRMC vao bien buf[]
for(i=0;i<10;i++)
{ buf[i] = uart_getc();
uart_putc(buf[i]);
}
//------TIME----------//
lcd_gotoxy(0,0);
lcd_puts("TIME:");
lcd_putc(buf[3]);
lcd_putc(buf[4]);
lcd_putc(':');
lcd_putc(buf[5]);
lcd_putc(buf[6]);
lcd_putc(':');
lcd_putc(buf[7]);
lcd_putc(buf[8]);
//------DATE----------//
// lcd_puts("DATE:");
// lcd_putc(buf[52]);
// lcd_putc(buf[53]);
// lcd_putc(':');
// lcd_putc(buf[54]);
// lcd_putc(buf[55]);
// lcd_putc(':');
// lcd_putc(buf[56]);
// lcd_putc(buf[57]);
//------LONGITUDE-------//
// lcd_puts("KD:");
// lcd_putc(buf[16]);
// lcd_putc(buf[17]);
// lcd_puts("'");
// lcd_putc(buf[18]);
// lcd_putc(buf[19]);
// lcd_putc(buf[20]);
// lcd_putc(buf[21]);
// lcd_putc(buf[22]);
// lcd_putc(buf[23]);
// lcd_putc(buf[24]);
// lcd_putc(':');
// lcd_putc(buf[26]);
//------LATITUDE-------//
// lcd_puts("VD:");
// lcd_putc(buf[28]);
// lcd_putc(buf[29]);
// lcd_puts("'");
// lcd_putc(buf[30]);
// lcd_putc(buf[31]);
// lcd_putc(buf[32]);
// lcd_putc(buf[33]);
// lcd_putc(buf[34]);
// lcd_putc(buf[35]);
// lcd_putc(buf[36]);
// lcd_putc(':');
// lcd_putc(buf[38]);
//__delay_ms(100);
}
}