mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 (SiLabs) und RS232 Problem


Autor: awesome (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Leute !

Ich habe folgendes Problem:

Ich habe ein µC Programm geschrieben welches Daten über die serielle 
Schnittstelle empfangen soll. Das ganze ist eigentlich ganz einfach. 
Über ein Java Programm schicke ich einen 8 stelligen, binären Wert.
Nun hängt an meinem µC an den Ausgangspings eine Platine mit 8Leds. 
Diese 8 Leds sind parallel geschalten, so dass ich jede einzeln 
ansteuern kann.

Nun ist mein Problem, dass das mit dem empfangen leider nicht so 
funktioniert wie ich mir das vorstelle. D.h ich komme zwar in die 
Schleife die empfangen soll aber weiter geht es nicht. Wie ich 
festgestellt habe liegt es daran, dass das Flag ri0 welches anspringen 
sollte wenn Daten kommen sich nicht ändert. Könnt ihr mir vielleicht 
sagen was an dem Programm falsch ist ?

$include (c8051f330.inc)                  ; Include register definition file.



;-----------------------------------------------------------------------------
; RESET and INTERRUPT VECTORS
;-----------------------------------------------------------------------------

            ; Reset Vector
            cseg AT 0
            ljmp Main                     ; Locate a jump to the start of
                                          ; code at the reset vector.

;-----------------------------------------------------------------------------
; CODE SEGMENT
;-----------------------------------------------------------------------------


Blink       segment  CODE

            rseg     Blink                ; Switch to this code segment.
            using    0                    ; Specify register bank for the
                                          ; following program code.

Main:
            ; Disable the WDT.
            anl   PCA0MD, #NOT(040h)      ; clear Watchdog Enable bit

            ; Enable the Port I/O Crossbar
            orl   P0SKIP, #0ffh            ; skip LED pin in crossbar
                                          ; assignments
            mov   XBR1, #40h              ; enable Crossbar
            orl   P1MDOUT, #0ffh           ; make LED pin output push-pull
            orl   P1MDIN, #00h            ; make LED pin input mode digital
            call init
           
            
            
mainloop:
            
            call char_in
            mov P1,A              

            jmp mainloop

char_in :

  jnb ri0,$
  mov a,sbuf0
  clr ri0
  ret

init:
  mov  tmod,#00100000b
  mov  th1,#0fdh
  mov  scon0,#01010000b
  setb  tr1
  ret
;-----------------------------------------------------------------------------
; End of file.

END


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, das liegt dann wohl daran dass du deine serielle Schnittstelle des 
Controllers nicht konfiguriert hast. Sie kann ja nicht wissen, mit 
welcher Geschwindigkeit du arbeiten willst.

Ralf

PS: Welchen Pegelwandler hast du genommen? Aufpassen bei Rx des 
Controllers mit der Porteinstellung, auf keinen Fall als Ausgang 
schalten!

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:

Du hast sie initialisiert (habs zu spät gesehen, sorry). Hm... Hast du 
die Baudrate richtig berechnet? Ich empfehle dafür das ConfigTool von 
SiLabs zu verwenden (gibts auf der HP frei zum Download).

P1MDIN = 0x00 --> Warum auf Analog Input gesetzt? Laut Datenblatt musst 
du es auf 0xFF setzen, wenn es kein Analog Input sein soll.

P1MDOUT: Hängen deine LEDs an GND oder VCC? Wenn sie an VCC hängen, dann 
den Port als OpenDrain schalten.

Deine Crossbar-Configuration lässt die serielle Schnittstelle gar nicht 
an die PortPins!!! Deswegen ändert sich dein RI-Flag auch nicht!!!
Wie bereits empfohlen, die Crossbar-Config nicht von Hand machen, 
sondern mit dem Silabs Tool. Und den Output des Tools dann prüfen!!!

Ralf

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

Bewertung
0 lesenswert
nicht lesenswert
Das mit der Analog Einstellung war nur ein Fehler, war beim ersten 
Versuch auch auf Digital gestellt, hat trotzdem nicht funktioniert.
Jede Led wird eigens über einen Pin versorgt und ist an Masse 
angeschlossen.

Die Schaltung hab ich im Anhang drin.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Vorwiderstände wird das aber nix. Das kokelt bloß, wenns dumm 
läuft.

Hast du die Konfigurationssoftware von Silabs mal verwendet? Wie gesagt, 
wenn du die serielle nicht nach aussen lässt, wirds nicht gehen...

Ralf

Autor: awesome (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorwiderstände sind vorhanden und auch nach dem Strom dimensioniert, so 
dass ich nicht zuviel ausm µC ziehe.

Ich werde mich jetzt auf die Suche nach dem Config Tool machen und dann 
meine Erlebnisse schildern.

Vielen Dank Ralf :D

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, tu das. Hier der Link zum ConfigTool:

http://www.silabs.com/public/documents/software_do...

Mit dem Tool kannst du sämtliche Configurationen festlegen (Ports, 
UART(s), Timer, usw.)

Allerdings empfehle ich, den generierten Output auch zu prüfen, es kam 
schon vor, dass der Output falsch war (Fehler macht jeder mal).
Also einfach die generierten Einstellungen mit dem Datenblatt 
vergleichen.

Ralf

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.