Forum: Mikrocontroller und Digitale Elektronik 8051 Master Slave betrieb per uart


von Dennis R. (cabal8051)


Lesenswert?

will 2 at89s52 per uart in Master Slave betreiben finde nur keine 
genauen Aufzeichnungen. Wie das genau funktioniert  wie sieht die 
Initialisierung der seriellen Schnittstelle aus, welch bits muss ich zum 
Senden und empfangen setzen und wie gebe ich einen Controller eine 
Adresse, wenn einer ein Beispiel Programm in Assembler hätte würde mir 
das weiter helfen .Wie verbinde ich die Controller einfach txd und rxd 
direkt miteinander verbinden oder brauche ich dazu 2 max 232e.

von Düsendieb (Gast)


Lesenswert?

Hast Du denn nicht in der Vorlesung aufgepasst?

von Ralf (Gast)


Lesenswert?

Hi Dennis,

der MS-Betrieb über UART ist doch im Datenblatt bzw. Referenzhandbuch 
eines jeden 8052 beschrieben, weil es eine Betriebsart des UARTs ist - 
schau mal in diese Unterlagen rein.
Und nein, du brauchst keinen MAX232 o.ä. wenn a) beide Controller die 
gleichen Spannungspegel an den IOs haben (also 3.3V oder 5V) und wenn b) 
beide Controller relativ nah beieinander sind (100m mit den o.g. Pegeln 
wird nicht gehen).

Ralf

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

Tja zum glück war ich noch nie in einer Vorlesung da würde ich 
wahrscheinlich auch einschlafen. Danke Ralf für die Info da steht auch 
einiges bis ich das jedoch verstanden habe das kann dauern um einen 
Controller eine Adresse zu geben braucht man das SADEN und einem SADDER 
Register wo sind die. Im SFR Register kann ich sie nicht finden die 
speicherplatzadresse ist offen. Dann brauche ich noch das SCON Register 
und das SBUF Register fragt sich nur wie man das jetzt genau macht. hat 
vielleicht jemand sowas schon mal gemacht ein anhand eines Beispiel 
Programms würde ich es am ehesten verstehen.

von Düsentrieb (Gast)


Lesenswert?

Dennis Röckemann (cabal8051) schrieb:
> Tja zum glück war ich noch nie in einer Vorlesung da würde ich
> wahrscheinlich auch einschlafen. Danke Ralf für die Info da steht auch
> einiges bis ich das jedoch verstanden habe das kann dauern um einen
> Controller eine Adresse zu geben braucht man das SADEN und einem SADDER
> Register wo sind die. Im SFR Register kann ich sie nicht finden die
> speicherplatzadresse ist offen. Dann brauche ich noch das SCON Register
> und das SBUF Register fragt sich nur wie man das jetzt genau macht. hat
> vielleicht jemand sowas schon mal gemacht ein anhand eines Beispiel
> Programms würde ich es am ehesten verstehen.

achso is das keine ahnung haben aber überheblich sein ...
schau zu wie du dein zeug gebacken kriegst .. aber erwarte dir keine 
Hilfe von studierten Leuten die Ahnung haben... stirb dumm!

von noreply (Gast)


Lesenswert?

Dennis Röckemann (cabal8051) schrieb:
> hat
> vielleicht jemand sowas schon mal gemacht ein anhand eines Beispiel
> Programms würde ich es am ehesten verstehen.

oder kopieren. ;-) War vielleicht noch in den 90er Raketentechnologie. 
Die magischen Worte sind "8051 multiprocessor communication" für die 
Suchmaschine, die nicht genannt werden soll.

von Peter D. (peda)


Lesenswert?

Für 2 Teilnehmer brauchst Du kein Master/Slave.
Der eine empfängt, was der andere sendet.
Kann auch gleichzeitig erfolgen, sind ja 2 getrennte Leitungen.
Einfach RXD/TXD über Kreuz verbinden.

von Jim M. (turboj)


Lesenswert?

Dennis Röckemann (cabal8051) schrieb:
> SADEN und einem SADDER Register wo sind die

Beim AT89S52 wirst Du die vermutlich nicht finden, aber bei einem Silabs 
C8051F120 gibt es sowas in der Richtung.

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

Düsentrieb schrieb:
> Dennis Röckemann (cabal8051) schrieb:
>> Tja zum glück war ich noch nie in einer Vorlesung da würde ich
>> wahrscheinlich auch einschlafen. Danke Ralf für die Info da steht auch
>> einiges bis ich das jedoch verstanden habe das kann dauern um einen
>> Controller eine Adresse zu geben braucht man das SADEN und einem SADDER
>> Register wo sind die. Im SFR Register kann ich sie nicht finden die
>> speicherplatzadresse ist offen. Dann brauche ich noch das SCON Register
>> und das SBUF Register fragt sich nur wie man das jetzt genau macht. hat
>> vielleicht jemand sowas schon mal gemacht ein anhand eines Beispiel
>> Programms würde ich es am ehesten verstehen.
>
> achso is das keine ahnung haben aber überheblich sein ...
> schau zu wie du dein zeug gebacken kriegst .. aber erwarte dir keine
> Hilfe von studierten Leuten die Ahnung haben... stirb dumm!

Herr Düsentrieb das hat nichts mit überheblich zu tun. Ich habe meinen 
Techniker neben der Arbeit gemacht dual da gab es keine Vorlesungen. 
aber wenn der Lehrer längere Vorträge gehalten hat ohne das man selbst 
irgendwas machen kann hatte ich immer Probleme nicht einzuschlafen.

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

noreply schrieb:
> Dennis Röckemann (cabal8051) schrieb:
>> hat
>> vielleicht jemand sowas schon mal gemacht ein anhand eines Beispiel
>> Programms würde ich es am ehesten verstehen.
>
> oder kopieren. ;-) War vielleicht noch in den 90er Raketentechnologie.
> Die magischen Worte sind "8051 multiprocessor communication" für die
> Suchmaschine, die nicht genannt werden soll.

oh man was soll das alles wir sind in der Techniker Schule halt nur bis 
zu den Timmer gekommen. Ich habe noch nie mit einer Seriellen 
Schnittstelle gearbeitet manche Sachen muss man halt lernen und mit 
einen Beispielprogramm geht das am besten. Sowas nennt man auch 
Lernprozess hat euer Lehrer nie irgendwas vorgerechnet oder dir mit 
einen Beispiel geholfen damit du es verstehst ???

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

Peter Dannegger und Jim Meba danke für eure Hilfe wenn ich das SADEN und 
das SADDER register nicht habe. Dan versteh ich nicht warum ich das in 
den Atmel 8051 Microcontrollers
Hardware Manual finde das heißt die brauch ich nicht ?

von Achim S. (Gast)


Lesenswert?

Es gibt von Atmel verschiedene 8051-Derivate. Soweit ich es überblicke 
haben die "single cycle cores" (bei denen ein Takt einem Maschinenzyklus 
entspricht) die Register für die automatische Adresserkennung 
implementiert. Die Standard 8051er von Atmel (bei denen ein 
Maschinenzyklus 12 Takten entspricht), zu denen dein 89S52 gehört, haben 
sie nicht.

Wenn diese Register vorhanden sind, dann kann die Hardware für dich 
überprüfen, ob eine empfangene Adresse der eigenen Adresse entspricht. 
Wenn die Register nicht vorhanden sind, dann musst du in der UART 
Interupt-Routine selbst die Adresse (per Software) vergleichen und 
entscheiden, ob sich der Prozessor angesprochen fühlt oder nicht.

Wie Peter schon gesagt hat: diese Möglichkeiten der 
Multiprozessorkommunikation ("Master Slave") lohnen sich eigentlich 
erst, wenn mehrere Controller als "Slave" von einem "Master" angesteuert 
und unterschieden werden sollen. Für zwei Controller, die direkt 
miteinander verbunden sind, bringt dieser Adressierungsmechanismus 
keinen Nutzen.

von Düsendieb (Gast)


Lesenswert?

Hallo Dennis,
diese uralten 8051 Controller werden eigentlich nur noch von 
irgendwelchen Lehren benutzt die ihre Vorlesungen nicht mehr aus etwas 
Neues umstellen wollen. Daher liegt bei so einem Controller immer die 
Vermutung nahe, dass es sich um Hausaufgaben handelt.

Schreib doch mal warum es der 8051 sein muss, obwohl es den Mega88 viele 
günstiger und mit wesentlich besserer Unterstützung anhand von 
Beispielprogrammen gibt.

Axel

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

der at89s52 kostet 1 Euro er ist neuer als der at89c51 und der braucht 
drei Maschinen Zyklen deshalb denke ich eigentlich das er keine 12 
braucht weiß es aber nicht. Ich mach auch keine Hausaufgaben ich bin mit 
meinen Techniker fertig will was bauen und da reicht einer nicht da 
brauche ich 2 oder später auch mal 3. Ich verwende diesen controller 
weil ich mit dem atmega Assembler nicht zurechtkomme. Wie verbindet man 
da Bits miteinander oder geht das nicht  Beispiel Programm Taster:
1
port1 equ 20h
2
3
sein equ port1.0
4
saus equ port1.1
5
stest equ port1.2
6
7
port2 equ 21h
8
an equ port2.0
9
san equ port2.1
10
sau equ port2.2
11
see equ port2.3
12
13
merker equ 22h
14
15
Initalisierung:
16
17
mov p2,#0000000b
18
19
Hauptprogramm:
20
21
mov port1,p1
22
23
mov c,sein
24
anl c,/an
25
anl c,/merker.5
26
mov san,c
27
28
mov c,sein
29
anl c,an
30
anl c,/merker.5
31
mov sau,c
32
33
mov c,san
34
orl c,an
35
mov see,c
36
37
mov c,see
38
anl c,/sau
39
anl c,saus
40
mov an,c
41
42
mov c,sein
43
anl c,saus
44
mov merker.5,c
45
46
mov p2,port2
47
jmp Hauptprogramm
48
end
Mit dem atmega habe ich das auch schon geschrieben das ist um einiges 
länger und komplizierter außerdem gibt es neu 8051 controller die 100 
mips und mehr schaffen mit neuen Funktionen usw.

: Bearbeitet durch User
von Düsendieb (Gast)


Lesenswert?

Hi Dennis,
auch wenn du das folgende nicht hören möchtest und es Dir bei Deinem 
Problem auch nicht hilft:

Schau dir mal C Programmierung an.

Das braucht auch nur eine Woche Einarbeitungszeit. Mit ein paar 
Beispielen vielleicht noch weniger. Dann bist Du den Controller-Typ so 
halbwegs los.

Das Programm was Du da gepostet hast kannst du aus C compiliert etliche 
male in einem Mega88 unterbringen und merkst noch immer nichts von der 
Abarbeitungszeit des Programms. Bei fast allen Hobby-Programmen kommt es 
nicht auf die Millisekunde an

Wenn Du mal zu wenig IO Pins hast, nimmt man dann hat einen mit mehr 
Pins und fertig.

von Georg G. (df2au)


Lesenswert?

Hier
http://nptel.ac.in/courses/Webcourse-contents/IIT-KANPUR/microcontrollers/micro/ui/Course_home2_12.htm
findest du eine kurze Beschreibung, wie man Master Slave Betrieb mit den 
"normalen" MCS51 machen kann.

von Dennis Röckemann (cabal8051) (Gast)


Lesenswert?

erst mal danke für die Tipps und den link
naja c hab ich mir schon mal ein bisschen angekuckt. Aber ich denke für 
Steuerung aufgaben ist Assembler besser geeignet obwohl ich das 
natürlich schlecht beurteilen kann wenn ich die Sprache nicht richtig 
kenne. Wenn ich ein multiprocessor System aufbaue  können die arbeiten 
und die ressourcen aufgeteilt werden und ich habe mehr IO deshalb das 
angestrebte multiprocessor System.  Die IO kann ich auch zusätzlich 
durch multiplexen und schieberegistern erhöhen  was ich zum teil auch 
vorhabe. Habe jetzt selbst mal versucht ein Programm für einen Master 
zu schreiben weiß nicht ob man das so machen kann es werden ja 11 bits 
übertragen aber ins SBUF passen nur 8 oder ? Kann mir jemand sagen ob 
man das so machen kann oder was daran falsch ist. Weiß auch nicht wie 
ich dem Slave eine Adresse geben soll oder vergleich ich nur das 
addresbyte nur mit einer zahl?
hier das Programm
sein equ port1.0

org 0000h   ;Programmstart des Assemblers

org 0023h  ;;;;empfangen
mov R1,SBUF
clr,RI
setb SMOD2
 reti

Initalisierung:
clr RI
clr TI
mov PCON,#10000000b
mov SCON,#10110000b
setb BD
setb EAL
setb ES

mov p2,#0000000b

Hauptprogramm:

mov port0,p0
;;;;;;;;;senden
sett:
 jnb sein,nichts
mov SBUF,#10101111b :sende adressbyte
setb TB8
jnb TI,sett
clr TI
 clr TB8
sett2
mov SBUF,#11111111b :sende datenbyte
jnb TB8,sett2
clr TI
sett3
mov SBUF,#11111111b :sende datenbyte
jnb TB8,sett3

nichts:
mov A,R1
mov p2,A

jmp Hauptprogramm
end

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.