Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstellen 8051 printf


von Guest_a (Gast)


Lesenswert?

Hallo,

ich möchte über beide Serielle Schnittstellen des SAB80c517a Daten an 2 
Rechner senden. Also über SS0 an Rechner A und über SS1 an Rechner B.

Die formatierte Datenübertragung über SS0 funktioniert ja einfach über 
das printf(). Ich würde nun aber auch gerne formatierte Daten über SS1 
übertragen. Funktioniert das auch irgendwie über printf()? Konnte hier 
im Forum/Google nichts finden.

Einstellungen sind eigentlich korrekt. Bei Eingabe von bspw:

...
S1BUF=0x41;
printf("%c ",S1BUF);
...
wird "A" in UART2 angezeigt. Bei:
...
S1BUF=0x41;
printf("hallo %c ",S1BUF);
...

wird in UART1 das "hallo" angezeigt und in UART2 das "A".

Vielen Dank schonmal.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Guest_a schrieb:
> wird in UART1 das "hallo" angezeigt und in UART2 das "A".
Welcher Compiler?

Alternativ mit steiler Lernkurve:
Sieh dir doch einfach mal den Quellcode von printf() an...

von Guest_a (Gast)


Lesenswert?

es ist keil µvusion 4...

ok, ich schau mal in die stdio.h, oder wo werde ich den quellcode 
finden?

von Peter D. (peda)


Lesenswert?

printf ruft putchar auf.
Du mußt Dir ein eigenes putchar schreiben, daß die UART auswählen kann, 
z.B. über eine Bitvariable, die man vor dem printf setzt oder löscht.


Peter

von Guest_a (Gast)


Lesenswert?

Also in der stdio.h ist das putchar ja jetz auch nur so definiert:

#define putchar(_c)       putc((_c),stdout)

   #define stdin  (&__iob_func()[0])
-> #define stdout (&__iob_func()[1])
   #define stderr (&__iob_func()[2])

also müsste ich jetz irgendwie das stdout ändern?

#define putc(_c,_stream)  (--(_stream)->_cnt >= 0 \
                ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) : 
_flsbuf((_c),(_stream)))


leider blicke ich beim #define putc(...) gar nicht mehr durch, gibts 
dafür irgendwo ne erläuterung?

danke.

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.