Forum: Mikrocontroller und Digitale Elektronik Silicon C8051F300 UART Problem


von Eugen (Gast)


Lesenswert?

Hallo alle zusammen,

ich sitze schon seit stunden und versuche raus zu finden warum mein 
Programm es nicht merkt, wenn ein RS232 Byte empfangen wurde. Ich frage 
das bit RI0 im SFR Register ab ob es gesetzt ist. Wenn ich es richtig 
verstanden habe wird dieses gesetzt, wenn ein Byte vollständig empfangen 
wurde. Oder wird es in Verbindung mit eine Interrupt nur gesetzt???

Ich hoffe Ihr könnt mir helfen.

von Eugen (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein Auszug aus dem Datenblatt.

von Peter D. (peda)


Lesenswert?

Die UART funktioniert wie bei jedem anderen 8051 auch, also mit T1 die 
Baudrate machen und REN setzen.

Der einzige Unterschied ist, daß man noch die Crossbar entsprechend 
durchschalten muß.


Peter

von husten (Gast)


Lesenswert?

Hoi,

ich programmier grad auf nem F411, denk aber das es ähnlich sein wird.

Also das Bit wird immer gesetzt, auch wenn der Interrpt nicht 
eingeschaltet ist. Du kannst es also auch über Polling auswerten.

Wenn du dir sicher bist, das dein Timer für die Baudrate richtig 
eingestellt ist, die Schnittstelle eingeschaltet und deine 
Datenleitungen durch die Crossbar auch tatsächlich auf die Pins 
geschaltet werden (senden funktioniert zB) kann ich dir noch den Tip 
geben mal nachzuschaun ob der Watchdog deaktiviert ist. Dieses Problem 
hatte ich ganz am Anfang. Es sah so aus als ob alles funktionieren 
würde, ich konnte aber nix empfangen. Dies lag einfach daran, das der 
Watchdog nicht getriggert wurde und dieser dann permanent nen Software 
reset ausgeführt hat. Nach deaktivierung des Watchdogs gings dann 
wunderbar.

gruß husten

von Michael W. (michelw)


Lesenswert?

Eugen wrote:

> ich sitze schon seit stunden und versuche raus zu finden warum mein
> Programm es nicht merkt, wenn ein RS232 Byte empfangen wurde. Ich frage
> das bit RI0 im SFR Register ab ob es gesetzt ist. Wenn ich es richtig
> verstanden habe wird dieses gesetzt, wenn ein Byte vollständig empfangen
> wurde. Oder wird es in Verbindung mit eine Interrupt nur gesetzt???

Ja, und es muß in der ISR oder manuell per Software wieder gelöscht 
werden.
Wenn es gesetzt wird, löst es einen Interrupt aus, sofern dieser Enabled 
ist.
Schau auch mal auf die Crossbar, ob alles richtig eingestellt ist.
Ansonsten mal Baudrate mit nem Osci oder LA testen, in dem Du in einer 
Schleife dauersendest.
z.B.:


     clr ti              ; ti löschen
label:
     mov sbuf,#055h      ; Bitmuster senden( je nach device auch sbuf0)
     jnb ti,!            ; warten bis gesendet
     clr ti              ; ti wieder löschen
     jmp label           ; nochmal senden (Endlos)

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.