PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle und Baudrate



Der Eisvogel
14.09.2013, 12:19
Hallo,

ich versuche nun seit geraumer Zeit mittels der seriellen Schnittstelle des AT89C5131A-S3SUM mit meinem Computer zu kommunizieren. Vom Computer Sende ich ein Byte, das ich empfangen möchte. Die Baudrate beträgt 9600. Mit folgendem Code versuche ich den Controller zum Empfangen zu bewegen:

mov SCON,#01010010b
mov PCON,#10000000b
orl BDRCON,#00011110b
mov BRL,#217

mov P0,#0
mov A,#0

jnb RI,$
mov A,SBUF
clr RI

mov P0,A

Ich bekomme auch tatsächlich etwas zu sehen an P0. Aber nicht das, was ich vom Computer gesendet habe. Ich kann kein System erkennen was da ankommt. Irgendwie hab ich das Gefühl, dass ich die Baudrate im Controller falsch eingestellt habe. Aber ich habe jetzt mittlerweile alle Bits mehrmals kontrolliert und es kam immer das selbe raus.

Kennt sich jemand von euch besser damit aus und weiß eventuell wo hier das Problem liegt?

Vielen Dank im Voraus.

MfG
Der Eisvogel

Thor_
15.09.2013, 14:26
Hi Eisvogel

Meine letzten Seriell-Verbindungs-Experimente bzw. Anwendungen sind einige zeit her, aber hier ist das an was ich mich erinnere (bzw. was meine Stolperfallen waren):

MAX232 oder anderer Pegelwandler auf dem Board vorhanden?!
Baudrate auf dem PC und auf dem Mikrocontroller identisch?
hast du einen anderen Computer oder 2 Schnittstellen an deinem mit dem du Computer zu Computer überprüfen kannst, ob das raus geht was reinkommt?!


Wichtig:
-Wird der Mikrocontroller von einem externen Quarz mit Takt versorgt? Ist das externe Quarz auch wirklich aktiv? (Wenn ich mich richtig erinnere sind die internen Quarze zu ungenau für RS232). Schau auf dem Quarz nach was für ein Takt drauf steht und überprüfe in in der Software. Ich ging damals davon aus ein 16Mhz Quarz zu verwenden. Als ich dann unter dem uC nachgeschaut habe war es doch nur ein 14,irgendwas, das hat mich damals eine Woche gekostet xD

oberallgeier
15.09.2013, 14:57
... mittels der seriellen Schnittstelle des AT89C5131A ... mit ... Computer zu kommunizieren ...Die serielle, also UART, oder USB? Der Quarz, vorhanden oder nicht, dürfte bei 9k6 noch keine Fehlerquelle darstellen. WENN Du UART nimmst, dann schau Dir mal die EIA232-Spezifikation an - die RS232 will Unterkante so an die acht Völtchen, die kriegt wohl auch der AT89.. nicht hin. Dass der Computer auch mit reichlich mehr als 5V sendet, sollte Dir ebenfalls klar sein, dazu hat ja schon Thor geschrieben.

Ne kleine Skizze könnte also sicher hilfreich sein; allerdings hatte ich noch nie ne UART mit Assembler bedient. Trotzdem kommen mir Deine zehn Codezeilen etwas sparsam vor :-/

Der Eisvogel
16.09.2013, 16:30
Hallo,

vielen Dank für eure Antworten. Ich habe das Problem gelöst.

Zur seriellen Übertragung nutze ich eine Sparkfun FTDI USB-Adapter, der mit 0V und 5V Pegel arbeitet. Meine Controllerplatine hat, wie Thor richtig vermutet hat, einen Pegelwandler MAX232. Als ich das ganze angeschlossen habe, war mir nicht klar, dass die Ausgänge meiner Platine vom MAX232 kommen, da direkt neben dran noch eine 9-pol Sub-D-Buchse sitzt, sondern war davon ausgegangen, dass es die direkten Port-Verbindungen zum Controller selbst sind. Beim betrachten des Schaltplanes gab es dann die Erleuchtung. Also habe ich den FTDI Adapter direkt an die entsprechenden I/O Pins angeschlossen. Jetzt funktioniert es.

Vielen Dank euch beiden!

MfG
Der Eisvogel