Zwischen zwei Atmel 89C5131 ein Byte verschicken

Gast #3068258
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
#3072750
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.
#3073106
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
#3073343
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren