frank85
25.07.2010, 12:04
Hallo,
ich habe ein GPS-Modul welches brav und schön sauber Daten an das Hyperterminal sendet.
Diese Daten möchte ich mit meinem PIC auswerten.
Habe zuerst einmal ein ganz simples Programm geschrieben, welches Daten ab dem $-Zeichen in einen String kopiert, bis zu dem *-Zeichen.
Das Programm funktioniert im Debugger, sprich alle vorgegebenen Zeichen im RCREG1-Register werden in den String, Register für Register beschrieben.
Bei dem *-Zeichen wird die Schleife verlassen.
Jedoch funktioniert die Zeichenausgabe nur im Debugger.
In der Hardware wird nur der erste Buchstabe, ab zu zu mal richtig angezeigt (NMEA Protokoll ist das ein 'G').
Ich vermute, dass es letztendlich an der Baudrate hängt, jedoch wird ein Baudratenfehler von 0.17% von meinem Compiler ausgespuckt.
Ich habe leider keine Idee mehr wie ich den Fehler lokalisieren kann.
Darum frage ich euch, woran kann es liegen.
Oder hab ich einen Fehler in meinem Code:
char uart_rd;
char *zeigerZeichen = &uart_rd;
char string[200];
unsigned short i = 0;
void main() {
ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISB = 0;
PORTB = 0;
UART1_Init(4800); // Initialize UART module at 4800 bps
Delay_ms(100); // Wait for UART module to stabilize
while (1) { // Endless loop
if (RCREG1 == '$') { //Prüft ob $-Zeichen im Register
do{
if (PIR1.RC1IF == 1) { //Buffer Inerruptflag
string[i] = RCREG1;
++i;
}
}while(RCREG1 != '*');
break;
}
}
uart_rd = string[1];
PORTB = uart_rd;
asm sleep;
}
Vielen Dank im vorraus.
MfG frank85
ich habe ein GPS-Modul welches brav und schön sauber Daten an das Hyperterminal sendet.
Diese Daten möchte ich mit meinem PIC auswerten.
Habe zuerst einmal ein ganz simples Programm geschrieben, welches Daten ab dem $-Zeichen in einen String kopiert, bis zu dem *-Zeichen.
Das Programm funktioniert im Debugger, sprich alle vorgegebenen Zeichen im RCREG1-Register werden in den String, Register für Register beschrieben.
Bei dem *-Zeichen wird die Schleife verlassen.
Jedoch funktioniert die Zeichenausgabe nur im Debugger.
In der Hardware wird nur der erste Buchstabe, ab zu zu mal richtig angezeigt (NMEA Protokoll ist das ein 'G').
Ich vermute, dass es letztendlich an der Baudrate hängt, jedoch wird ein Baudratenfehler von 0.17% von meinem Compiler ausgespuckt.
Ich habe leider keine Idee mehr wie ich den Fehler lokalisieren kann.
Darum frage ich euch, woran kann es liegen.
Oder hab ich einen Fehler in meinem Code:
char uart_rd;
char *zeigerZeichen = &uart_rd;
char string[200];
unsigned short i = 0;
void main() {
ADCON1 |= 0x0F; // Configure AN pins as digital
CMCON |= 7; // Disable comparators
TRISB = 0;
PORTB = 0;
UART1_Init(4800); // Initialize UART module at 4800 bps
Delay_ms(100); // Wait for UART module to stabilize
while (1) { // Endless loop
if (RCREG1 == '$') { //Prüft ob $-Zeichen im Register
do{
if (PIR1.RC1IF == 1) { //Buffer Inerruptflag
string[i] = RCREG1;
++i;
}
}while(RCREG1 != '*');
break;
}
}
uart_rd = string[1];
PORTB = uart_rd;
asm sleep;
}
Vielen Dank im vorraus.
MfG frank85