Hallo, wollte eine UART bei einem ATMega8 einrichten und bin nachdem Tutorial auf der Hauptseite geangen. Das senden eines Zeichens klappt auch Problemlos, jedoch will das Senden einer Zeichenkette nicht, da ich nur irgendwelche kryptischen Zeichen empfange. Mein Code währe folgender: #include <avr/io.h> #ifndef F_CPU #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 12000000" #define F_CPU 12000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden! #endif #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden! // Berechnungen #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif void putc(char c) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = c; /* schreibt das Zeichen x auf die Schnittstelle */ } void puts (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ putc(*s); s--; } } int main(void) { UCSRB |= (1<<TXEN); // UART TX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1 UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; puts('Hallo'); return 0; } Wo ist das Problem?
versuch doch mal
1 | void puts (char *s) |
2 | {
|
3 | while (*s) |
4 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ |
5 | putc(*s); |
6 | s++; |
7 | }
|
8 | }
|
Das Problem liegt hier:
1 | puts('Hallo'); |
In C werden in einfache Anführungszeichen '' einzelne Zeichen eingeschlossen 'a'. Ein String wird durch doppelte Anführungszeichen "Hallo" dargestellt. Daraus wird/das entspricht einem char-Array {'H', 'a', 'l', 'l', 'o', '\0'} P.S. bei der Ausgabe musst du in der Schleife natürlich den Pointer erhöhen, also s++
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.