PCMan
30.10.2007, 22:23
Hallo Leute,
ich möchte an meinen µC einen Befehl senden (na so wein Zufall ;)
Der Befehl soll im Prinzip so aussehen:
<befehl>
Das ganze müsste dann so interpretiert werden:
wenn '<' empfangen, dann
Command[i]=empfangenes_zeichen
i++
wenn '>' empfangen, dann keine weiteren Zeichen mehr aufnehmen.
Das habe ich bisher so versucht zu realisieren:
uint8_t c = uart_getc();
if (c=='<') RS232.Cmd_Start=1; //RS232.Cmd_Start ist ein Bitfeld
if (RS232.Cmd_Start==1) {
RS232.Cmd[RS232.i]=c; //RS232.Cmd ist ein Char[20]
RS232.i++; //ein uint8_t
}
if (c=='>') { //wenn fertig, '\0' anhängen und Index Resetten
RS232.Cmd_Start=0;
RS232.Cmd[RS232.i]='\0';
RS232.Cmd_Complete=1;
}
...
woanders
...
if (RS232.Cmd_Complete==1) {
lcd_gotoxy(0,1);
lcd_puts(RS232.Cmd);
uart_puts(RS232.Cmd);
RS232.Cmd_Complete=0;
}
Schön und gut, wenn ich nun mit uart_puts(RS232.Cmd) versuche den Befehl zurückzusenden bekomme ich im Terminal nur ein "<". Wieso?
Wenn ich folgendes sende:
RS232.Cmd[0]='a';
RS232.Cmd[1]='b';
RS232.Cmd[2]='c';
RS232.Cmd[3]='\0';
uart_puts(RS232.Cmd);
erhalte ich im Terminal "abc", egal ob ich (const char*) RS232.Cmd nehme oder nicht. Ich versteh' nicht, wo mein Denkfehler liegt.
Vieln Dank,
Simon
Hinweis: Es macht auch keinen Unterschied, wenn ich in der Auswertung (unsigned int)c=='>' anstelle von c=='>' verwende, obwohl's eigentlich korrekter wäre.
P.S.: ATMega32, XTAL=8MHz
ich möchte an meinen µC einen Befehl senden (na so wein Zufall ;)
Der Befehl soll im Prinzip so aussehen:
<befehl>
Das ganze müsste dann so interpretiert werden:
wenn '<' empfangen, dann
Command[i]=empfangenes_zeichen
i++
wenn '>' empfangen, dann keine weiteren Zeichen mehr aufnehmen.
Das habe ich bisher so versucht zu realisieren:
uint8_t c = uart_getc();
if (c=='<') RS232.Cmd_Start=1; //RS232.Cmd_Start ist ein Bitfeld
if (RS232.Cmd_Start==1) {
RS232.Cmd[RS232.i]=c; //RS232.Cmd ist ein Char[20]
RS232.i++; //ein uint8_t
}
if (c=='>') { //wenn fertig, '\0' anhängen und Index Resetten
RS232.Cmd_Start=0;
RS232.Cmd[RS232.i]='\0';
RS232.Cmd_Complete=1;
}
...
woanders
...
if (RS232.Cmd_Complete==1) {
lcd_gotoxy(0,1);
lcd_puts(RS232.Cmd);
uart_puts(RS232.Cmd);
RS232.Cmd_Complete=0;
}
Schön und gut, wenn ich nun mit uart_puts(RS232.Cmd) versuche den Befehl zurückzusenden bekomme ich im Terminal nur ein "<". Wieso?
Wenn ich folgendes sende:
RS232.Cmd[0]='a';
RS232.Cmd[1]='b';
RS232.Cmd[2]='c';
RS232.Cmd[3]='\0';
uart_puts(RS232.Cmd);
erhalte ich im Terminal "abc", egal ob ich (const char*) RS232.Cmd nehme oder nicht. Ich versteh' nicht, wo mein Denkfehler liegt.
Vieln Dank,
Simon
Hinweis: Es macht auch keinen Unterschied, wenn ich in der Auswertung (unsigned int)c=='>' anstelle von c=='>' verwende, obwohl's eigentlich korrekter wäre.
P.S.: ATMega32, XTAL=8MHz