mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik erstellen einer printf() funktion aus putc()


Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich mit der putc() funktion , die ja nur ein character
überträgt eine printf oder sprintf funktion bauen, die komplette
strings überträgt....
ich benötige die Funktion um daten zwischen mikrocontroller und pc zu
übertragen
danke
Samuel


meine putc() funktion sieht folgendermassen aus:

void putc(UBYTE SendChar)
{
   //*******************************
  // Notice while loop!!!!!
  // *****************************
  //We will wait here till the last char was transmitted
   while(!SciaRegs.SCICTL2.bit.TXRDY);
   SciaRegs.SCITXBUF=SendChar;
}

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
trotz der etwas unglücklich formulierten frage (printf u8nterstützt eine
menge formatierungen) denk ich mal das ist das richtige

void put_string(char* s)  //Send null-terminated string on the UART Tx
line.
{
  char c;

    while ( (c = *s++) ) {
        putc(c);
  }
}

Autor: sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super.....danke...hat geklappt...
jetzt muss ich das noch in umgekehrter Richtung haben, also dass ich
einen string vom PC zum Mikrocontroller schicke.zum Empfangen eines
characters habe ich mir folgende funktionen gebaut:
hast du eine Idee wie man aus dieser funtion eine funktion bauen kann,
die einen ganzen string empfängt?


//******************************
// We want to get a char from the SCI port, thus return the char
// *****************************
UBYTE getc(void)
{
 while(!kbhit());
 return SciaRegs.SCIRXBUF.bit.RXDT;
}


wobei die funktion kbhit() auf Übertragungsfehler überprüft und das
Ready bit zurückliefert, was bedeutet, dass ein zeichen richtig im
eingangsbuffer angekommen ist

Autor: chrissy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten schreibst du das, was ankommt in einen Ringspeicher. Wenn der
so ca. halb voll ist, schickst du xoff oder was auch immer für ein
Handshake du benutzt. Wenn er wieder leer genug ist, lässt du wieder
eine Übertragung zu.
Wenn du das Interrupt gesteuert machst, also bei jedem ankommenden
Zeichen in der Service Routine den Empfangs Ringspeicher verwaltest,
bist du gut gerüstet. Diesen Empfangspuffer kannst du dann ganz in Ruhe
analysieren und nach Steuerzeichen durchsuchen etc.

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.