Forum: Mikrocontroller und Digitale Elektronik serielle schnittstelle lesen


von tobias hofer (Gast)


Lesenswert?

hallo

ich möchte bei einem 8051'er kompatiblen prozessor direkt die
serielle schnittstelle lesen.
bis jetzt habe ich das mit der funktion getch() gelöst.
nun ist das aber ja nicht so ideal wenn gar kein zeichen über die
serielle schnittstelle kommt. dann bleit das programm doch bei getch()
stehen bis er ein zeichen empfängt.
wie könnte ich das nun richtig lösen? am liebsten würde ich einfach
sporadisch das register der seriellen schnittstelle lesen.
ich habe das aber noch nie gemacht.
vieleicht hat ja jemand einen guten tip.

gruss tobias

von crazy horse (Gast)


Lesenswert?

na, sporadisch lesen ist nicht so gut, wenn ein Zeichen aus dem Receiver
nicht abgeholt wird und ein neues kommt, ist das 1. futsch.
Wenn abfragen, dann das Bit RI im SCON abfragen, wenn Zeichen da,
abholen. Damit nichts verlorengeht, muss man allerdings recht häufig
nachfragen.
Besser ist Interruptbetrieb, ein empfangenes Zeichen löst einen int
aus, in dessen Verlauf das Zeichen gelesen wird und im RAM abgelegt
wird, gibt sicher fertige Software dafür.

von Peter D. (peda)


Lesenswert?

Stimmt, da fehlt sowas wie kbhit().

Kann man aber einfach selber schreiben:


bit kbhit( void )       // 0 = receive buffer empty
{
  return RI;
}


Peter

von tobias hofer (Gast)


Lesenswert?

danke schön

funktioniert wunderbar.

noch eine andere frage, wie kann ich folgendes in c
einfacher programieren:

char arr[];

if((arr[i] == '1')||(arr[i] == '2')||...))
 mache etwas;


ich möchte einfach nur "mache etwas" ausführen wenn arr[i] eine zahl
zwischen 0 u. 9 ist.

besten dank tobias

von crazy horse (Gast)


Lesenswert?

if ((arr[i]-0x30)<10)

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.