Forum: Mikrocontroller und Digitale Elektronik USART & Mega128


von Helge (Gast)


Lesenswert?

Hallo

Glaube meine Fragen werden langsam peinlich.Ich habe im Netz nichts 
darüber gefunden und hoffe mal wieder auf Hilfe von euch.
Arbeite mit Codevision und Mega128.
Wie gebe ich über die USART1 einen String aus?
Beim mega163 ging es ganz einfach mit puts(string).Hatte ja auch nur 
eine UART.
Gruß Helge

von Dieter (Gast)


Lesenswert?

könntest den string einzeln ausgeben.
also

putchar1(string[0]);
putchar1(string[1]);
putchar1(string[2]);

denn putchar wird bei der initialisierung mit codevision vom USART1 
declariert.

ist halt ein größerer schreibaufwand, aber dafür funktionierts.

von Dieter (Gast)


Lesenswert?

putchar1 wird natürlich declariert nicht putchar!

von Helge (Gast)


Lesenswert?

Hallo Dieter

Also mit putchar(string[0]) geht es.
Aber ich würde ja gerne mit puts den gesamten string ausgeben.
Wenn gar nicht anders muß ich mir wohl ne Schleife basteln um die 
Zeichen einzeln auszugeben.
Kann man vielleicht etwas in der stdio.h ändern?

von Dieter (Gast)


Lesenswert?

na ich hab bis jetzt noch keine andere lösung gefunden.
wenns dir so wichtig ist den schreibaufwand zu sparen, gebs doch über 
den USART0 aus.

ansonsten versteh ich nicht, wo das problem ist, die zeichen einzeln 
auszugeben.

und über USART1 heißt es putchar1 nicht putchar.

ich mein ob du

puts(string);

oder

putchar1(string[0]);
putchar1(string[1]);
putchar1(string[2]);

ist doch egal.

und wenns ein zu langer string ist, machst du's halt mit ner schleife 
(i=0 bis i=n);

sind doch alles wunderschöne lösungen.

am ende ist doch egal was du fürn befehl verwendest, das ergebnis muss 
stimmen.

von Dieter (Gast)


Lesenswert?

kannst dir ja auch ein kleines unterprogramm schreiben.
void stringausgabe() oder so, da kannst du dann die länge des strings 
mit übergeben.
und im unterprogramm steht halt die schleife, und fertig ist.

von Helge (Gast)


Lesenswert?

Ja wenns nicht anders geht muß ich wohl damit leben.Etwas umständlich 
ist es schon. Puts wär die Lösung.Wußte nicht das es mit dem Mega128 
nicht geht.
Habe bei mir putchar1 programmiert nur vergessen in meinem Beitrag zu 
schreiben.
Vielen Dank für die prompte Hilfe

von Sascha Weitkunat (Gast)


Lesenswert?

> Aber ich würde ja gerne mit puts den gesamten string ausgeben.
> Wenn gar nicht anders muß ich mir wohl ne Schleife basteln um die Zeichen 
einzeln auszugeben.

Nun rate mal was die puts(..) Funktion macht? Zeichen für Zeichen des 
übergebenen Strings in den Sendebuffer ausgeben, eine Schleife.

von Helge (Gast)


Lesenswert?

Hi Sascha
Ich mach es mit einer Schleife.Werde vorher mit strlen die Länge 
ermitteln und dann gehts los.

von Dieter (Gast)


Lesenswert?

na dann viel spass

von Sascha Weitkunat (Gast)


Lesenswert?

Das mit strlen(..) ist ein unnötiger Aufwand:

// --------------------------
unsigned char c;

while (c = *string++)
  putchar1(c);
// --------------------------

Pseudocode, also bitte nicht hauen wenns nicht exakt so klappert.

von Helge (Gast)


Lesenswert?

Na dann versuch ich es mal ohne strlen.Die Zeichenkette wird gut 
ausgegeben mit strlen.
Hab momentan aber noch ein anderes Problem.Hab am RX0-Pin ein S35 
dran.Komischer weise gibt mein Handy jetzt keine Daten zurück. ---->aber 
morgen ist auch noch ein Tag :-))

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.