Hallo Leute, bin neu hier und hoffe der Thread ist hier an der richtigen Stelle, ansonsten würde ich mich freuen wenn ihn jemand verschieben würde. Und zwar geht es um ein Projekt auf schulischer Ebene. Aufgabe ist es, zwei Mikrocontroller (8051) über das RS232 Verfahren zu verbinden und Daten von den PINs des einen µC an den LEDs des anderen µC ausgeben lassen. Eine Verbindung über P3.0 und P3.1 wurde hergestellt. Meine Frage ist nur: Wie genau mache ich es?? Habe jetzt 2 Leitungen (eine zum Senden, eine zum Empfangen). Kann ich nun einfach meine Daten (Startbit + Übertragungs-Daten + Stopbit) auf diese eine Leitung legen? Meine Überlegung: Nein, es geht nicht. Man muss diese in Bit-Format einteilen und nun einzeln über die Leitung senden (natürlich im Hinterkopf, das man mit dem LSB beginnt). Ich habe leider keine Ahnung deswegen würde ich mich freuen wenn mir jemand helfen würde :/ Gruß
Müsst ihr die Serielle denn selbst programmieren? Grundsätzlich bringen die meisten µCs einen UART mit der das schon kann, den müsste man dann nur noch konfigurieren.
Leon A. schrieb: > Eine Verbindung über P3.0 und P3.1 wurde hergestellt. Wie genau? Wurden die RXD und TXD Signale gekreuzt? Und warum heißen denn diese Pins RXD und TXD? TXD ist der Senderausgang und der muss auf RXD, den das ist der Empfängereingang. Such mal nach serielle Schnittstelle, da wird das evtl näher erläutert... Und jetzt musst du dir mal ansehen,wie man in eurem uC die serielle Schnittstelle initialisiert und ansteuert. Keine Sorge, das haben schon zehntausende vor euch gemacht. Du wirst also schon ein Beispiel finden. Das analysiert ihr, bis ihr es versteht, und dann passt ihr es auf *eure Hausaufgabe* an.
:
Bearbeitet durch Moderator
1. Ja wir haben sie gekreuzt :) 2. Das mit der UART habe ich jetzt schon sehr oft gelesen und so weit ich weiß hat unser µC eine UART-Schnittstelle 3. Schon mal wirklich Danke für die Antwort und eure Hilfe :)
Leon A. schrieb: > 2. Das mit der UART habe ich jetzt schon sehr oft gelesen und so weit > ich weiß hat unser µC eine UART-Schnittstelle Na dann braucht ihr ja jetzt nur noch die Doku zu eurem µC, darin steht wie man so einen UART konfiguriert. Schaden würd's wohl auch nicht wenn ihr mal den Wikipedia Artikel des UART lest. btw, ihr wollt sowas in die Richtung haben: 8 Datenbits, 1 Stopbit, no Parity, 9600 Baud, asynchron
Okay nochmal: Haben die uC am Port 3_0 und Port 3_1 verbunden: RxD mit TxD und TxD mit RxD. Und meine Frage ist jetzt, wie ich das realisiere in C. Habe aber keinen Plan wie. Erste Überlegung war: Interrupt1 um zu gucken, wer senden möchte, also Abfrage an P3_0. Interrupt2 um zu gucken, wenn der Taster gedrückt wurde, sollen die Werte der DIPs übernommen werden, umgewandelt werden und gesendet werden. uC2 (Empfänger) soll diese annehmen, zusammensetzen und an den LEDs ausgeben. Ich habe leider keinen Plan :-/ Versuche mich die ganze Zeit herein zu lesen aber da steht nirgendwo wie ich es nun realisiere. MfG Leon
da es eine asynchrone schnittstelle ist, ist es egal wer gerade senden möchte. wenn ich es richtig verstanden habe soll das so ablaufen: -über dip-schalter werte einstellen -bei tastendruck werte werden von µC1 eingelesen -nach einlesen der werte zu µC2 über UART schicken also ich würde das so lösen: wie du gesagt hast interrupt bei tastendruck abfangen. die dip-schalter werte einlesen und dann einfach die 8 bit in das uart-senderegister schieben und der rest macht dein µC, wenn du die UART richtig konfiguriert hast und das sollte im datenblatt stehen. und ansonsten zum 8051 sollte es einige beispiele geben zur benutzung der UART-schnittstelle in C bei deinem µC2 musst du die UART-schnittstelle konfigurieren und dann entweder ein bit pollen (ständig abfragen), ob was im empfangen wurde oder eben auch ein interrupt auslösen lassen, wenn die schnittstelle etwas empfangen hat und dies dann auswerten.
Leon Achterusch schrieb: > Okay nochmal: > > Haben die uC am Port 3_0 und Port 3_1 verbunden: RxD mit TxD und TxD mit > RxD. > Und meine Frage ist jetzt, wie ich das realisiere in C. > Habe aber keinen Plan wie. Indem du im Datenblatt nachliest, wie die UART auf deinem µC-Typ zu benutzen ist und/oder du dir Beispiele im Netz suchst, in denen die UART im Einsatz ist. > Erste Überlegung war: > Interrupt1 um zu gucken, wer senden möchte, also Abfrage an P3_0. > Interrupt2 um zu gucken, wenn der Taster gedrückt wurde, sollen die > Werte der DIPs übernommen werden, umgewandelt werden und gesendet > werden. Quatsch. Dazu brauchst du keine Interrupts. Immer dieses Getue mit Interrupts. Was denkst du, was du aus µC Sicht bist? Du bist (als Mensch) aus µC Sicht ein schnarchlangsamer alter Sack. In der Zeit in der du einmal mit den Augen blinzelts kann der µC 1000 Sachen machen und langweilt sich dabei noch. µc mit den Tasten
1 | int main() |
2 | { |
3 | .... |
4 | alles initialisieren, UART auf Senden initialisieren |
5 | |
6 | while( 1 ) |
7 | { |
8 | byte = Status der beiden Schalter |
9 | |
10 | byte per UART ausgeben |
11 | } |
12 | } |
µc mit den LED
1 | int main() |
2 | { |
3 | .... |
4 | alles initialisieren, UART auf Empfang initialiseren |
5 | |
6 | while( 1 ) |
7 | { |
8 | byte = Byte von der UART holen |
9 | |
10 | Led entsprechend der Bits ansteuern |
11 | } |
12 | } |
der erste µC kann ruhig in deinem Beispiel dauernd senden. Sendet der halt 200 mal in der Sekunde, das keiner der beiden Schalter betätigt ist. Stört doch momentan noch keinen. > Ich habe leider keinen Plan :-/ Versuche mich die ganze Zeit herein zu > lesen aber da steht nirgendwo wie ich es nun realisiere. Sieh zu, dass du die UART zum laufen kriegst. Der Knackpunkt ist der Kommunikationskanal. Das was dann über diesen Kanal drüber geht (die Information) ist eine zweite Geschichte. Aber erst mal muss die Verbindung stehen.
:
Bearbeitet durch User
guckst du hier auf Seite 11 und http://www.atmel.com/images/doc1919.pdf und hier auf Seite 94 http://www.atmel.com/images/doc4316.pdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.