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


von sam (Gast)


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;
}

von Tobi (Gast)


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);
  }
}

von sam (Gast)


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

von chrissy (Gast)


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.

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
Noch kein Account? Hier anmelden.