Forum: Mikrocontroller und Digitale Elektronik Zwischen zwei Atmel 89C5131 ein Byte verschicken


von Sören (Gast)


Lesenswert?

Hallo,
ich sitz hier gerade mit 2 Kolegen aus der Schule und wir müssen für ein 
Referat es hinbekommen das 2 uC Kommunizieren können.
Wir wollten jetzt erstmal ganz klein Anfangen a la Taster auf 1.uC-Board 
wird gedrückt LED auf 2.uC-Board geht an.
Wir Arbeiten mit 2 MeXs-Boards.

Wir bräuchten einfach noch ein bisschen Stoff aber finden gerade nix 
gescheites, ein Programmbeispiel in Assebmler wäre zum beispiel sehr 
schön (wir machen alles nur in Assembler)

Wir versuchen es im moment so:
1
RESEIVER             ;Emfänger
2
3
CSEG AT 0100h
4
MOV SCON, #0001000b
5
ORL P0, #0FFh        ;LEDs sind lowaktiv
6
7
Schleife:
8
MOV P0, SBUF         ;LEDs
9
Trans:
10
JNB RI, Trans
11
CLR RI
12
13
JMP Schleife
14
15
16
TRANSMITTER              ;Sender
17
CSEG AT 0100h
18
MOV SCON, #00000000b
19
20
Schleife:
21
MOV SBUF, P3             ;Taster
22
Trans:
23
JNB TI, Trans
24
CLR TI
25
26
JMP Schleife

Danke für eure Anregungen

von Bernhard S. (b_spitzer)


Lesenswert?

> MOV SCON, #0001000b
Hier fehlt mindestens eine 0. Damit wird das Bit TB9 gesetzt, das hier 
sicher nicht benötigt wird. Gewünscht war wohl REN auf 1 zu setzen.

Warum aber diesen museumsreifen Uralt-Mode 0 für die serielle 
Schnittstelle???? Mode 1, Baudrate einstellen, Verbindung über 
Nullmodemkabel und dann könnt ihr beliebig Daten hin und herschicken.
Wenn es mehr als 8 bit sein sollen, muss man sich über ein kleines 
Protokoll Gedanken machen.

Nachtrag: normalerweise sollte man beim Empfang SBUF erst lesen, wenn RI 
vorher auf 1 gegangen ist. Bei eurem Ablauf passt das zur Zeit noch, 
aber mit den vermutlich folgenden Erweiterungen wird es dann 
problematisch.

von Sören K. (foxalem)


Lesenswert?

Hi, danke für die Antwort.
Den Mode0 wollten wir nehmen weil wir dachten es wäre der einfachste und 
wir alle an dem Tag nich auf der Höhe waren. Wir dachten dass wir hier 
ein Bit und da ein Bit setzen, schon können wir Bytes fröhlich hin und 
her senden.

Wir haben es nun hinbekommen mit dem Mode1 und eingestellter Baud-Rate. 
Weil wir es erst sehr spät gelesen haben weil nur wenige Quellen 
verraten wies funktioniert, schreib ichs mal hier hin:
Der AT89C5131 (und gewiss auch andere dieser serie) hat einen internen 
Baud-Rate-Generator, welcher zum einstellen der Baud-Rate genutzt werden 
kann. Benötigt werden dazu BRL (Reload-wert des BRG = 
BaudRateGenerator), SMOD1, SPD (nicht die Partei) und Fclk. Am besten 
mal alles einstellen und in Keil (so haben wirs gemacht) angucken ob es 
auch stimmt was man berechnet hat (Peripherals -> Seriel Monitor)

Lg

von Bernhard S. (b_spitzer)


Lesenswert?

Wenn man zwischen 2 Controllern Daten verschickt sind die absoluten 
Baudrate-Werte übrigens ziemlich egal. hauptsache beide sind identisch 
eingestellt.

von Peter D. (peda)


Lesenswert?

Sören Kleer schrieb:
> Den Mode0 wollten wir nehmen weil wir dachten es wäre der einfachste und
> wir alle an dem Tag nich auf der Höhe waren.

Ja, war kürzlich schonmal einer, der dachte, nehmen wir mal Mode 0 und 
schauen, was passiert.

Besser wäre aber gewesen, vorher ins Datenblatt zu schauen:
"Mode 0: Serial data enters and exits through RXD. TXD
outputs the shift clock."

Das ist also ein synchroner Mode mit Taktleitung, die nur Ausgang ist. 
Zum PC oder zwischen MCs also völlig untauglich.
Ist quasi ein SPI-Master Mode.

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
Noch kein Account? Hier anmelden.