www.mikrocontroller.net

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

Autor: awesome (Gast)
Datum: 21.03.2008 12:54

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: 21.03.2008 12:57

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: 21.03.2008 13:11

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: 22.03.2008 15:30
Dateianhang: SchaltungLed.PNG (1,2 KB, 23 Downloads)
preview image for SchaltungLed.PNG

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: 22.03.2008 16:43

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: 22.03.2008 20:16

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: 23.03.2008 23:38

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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net