Forum: Mikrocontroller und Digitale Elektronik getc() oder alternative


von tobias hofer (Gast)


Lesenswert?

hallo

ich bin nun schon eine weile daran die serielle schnittstelle meines
ds89c420 zu programieren. mit dem interrupt hat es nicht richtig
hingehauen. sobald ich mit printf() ein zeichen gesendet hatte ging
nichts mehr.
nun habe ich den byte empfang mit der getc() fkt gelöst. das
funktioniert soweit auch gut.
nun meine frage:

wenn bei der übertragung etwas schief geht, das heisst wenn keine
zeichen mehr bei meinem prozessor ankommen und das programm ist gerade
am lesen, wird der prozessor sich aufhängen. oder besser gesagt er
wartet bis er ein zeichen empfängt. aber es kommt ja keines.

wie würded ihr so eine komunikation über die serielle schnittstelle
lösen das sowas nicht passieren kann?
ich wäre sehr dankbar über ein paar tips oder evtl. ein bsp wie man das
mit dem interrupt lösen könnte.

der ds89c420 ist "8051" kompatibel.

gruss
tobias

von Florian Pfanner (Gast)


Lesenswert?

Ich programmiere meine Schnittstelle (zumindest) auf empfangsseite immer
über Interrupts. Also wenn ein Zeichen fertig empfangen im
Empfangsbuffer steht, dann wird der Interrupt ausgelöst. Die
Interruptfunktion holt dann das Zeichen und wertet es aus oder fügt es
einem Puffer hinzu.

Gruß, Florian

von tobias hofer (Gast)


Lesenswert?

hallo florian

ich habe das auch mal versucht und der empfang hat funktioniert.
aber wenn ich dann ein zeichen senden wollte mit printf() hat das ganze
nicht mehr hingehauen.
ich wäre sehr dankbar wenn mir jemand ein kleines bsp. geben kann
wie ich senden und empfangen mit interrupt lösen kann.

tobias

von tobias hofer (Gast)


Angehängte Dateien:

Lesenswert?

die komunikation läuft jetzt mit interrupts.
vieleicht interrsierts ja noch jemand anders, deshalb habe ich
das programm mal angehängt.

gruss
tobias

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.