www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART bei ATMEGA32


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich hoffe es kann mir jemand helfen.
Ich möchte einen String vom uC auf den PC übertragen.
Das geht jedoch nicht es kommt am PC nichts an.
Einzelne Zeichen kann ich aber Senden das funktioniert einwandfrei.

Ich verwende folgende Funktionen dafür :


char u[] = "Test"; // String den ich senden möchte

int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich */
    UDR = c;                      /* sende Zeichen */
    return 0;
}


void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem
"String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}
Ich übergebe dann den String der Funktion "uart_puts (char *s)" so:

uart_puts (u);

Kann mir jemand sagen was ich falsch mache?

Danke.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert es denn mit einzelnen Zeichen?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mit einzelnen Zeichen funktioniert es.
Nur mit einem string kommt nichts an.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du mal puts("Test"); ausprobiert?
Dann würde es nämlich an deiner String-Deklaration liegen.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich habe den String auch schon direkt der Funktion übergeben das hat
leider auch nicht funktioniert.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da wäre noch ein "Schönheitsfehler":
putc liefert einen int-Wert zurück, der nirgends benutzt wird.
Das ist zwar C-konform, aber...

Mach daraus doch einfach mal "void".

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat bei mir bestens funktioniert:

void UART_SEND(char *senden)
{
  for (;*senden !='\0';senden++){
  loop_until_bit_is_set(UCSRA, UDRE);
  UDR = *senden;
  }


UART_SEND ("TEST");
oder auch
UART_SEND(variable);

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Ich werde das mal ausprobieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.