Silicon C8051F300 UART Problem

Gast #1032907
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.
Gast #1033020
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
#1033077
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren