www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Silicon C8051F300 UART Problem


Autor: Eugen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eugen (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein Auszug aus dem Datenblatt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: husten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Werner (michelw)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.