Forum: Mikrocontroller und Digitale Elektronik Ports beim 8051


von Mr Gast (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Wir gehn gerade die Ports des 8051 durch, laut angehängten Bild gibt es 
4, aber wo sind die Ports? Im 8051-IC? Wo genau?

Was haben diese für einen Sinn?

Wir haben Übungen dazu gemacht z.B. ein Rechtecksignal darzustellen:

SQUAREWAVE:
MOV R2,#0
loop:CPL P1.3
DJNZ R2,loop
RET

Wo sehe ich das das Rechtecksignal? Was hat das mit einem Port zu tun?

Viele Anfänger fragen, aber ich hab schon das Internet durchforstet, 
aber für mich nichts verständliches gefunden.

Danke schonmal im voraus!

mfg

Mr Gast

von Peter D. (peda)


Lesenswert?

Mr Gast schrieb:
> Wo sehe ich das das Rechtecksignal?

Öffne das Datenblatt, schaue unter Pinbelegung, welcher Pin der ominöse 
P1.3 ist und schließe dort das Oszi an.


Peter

von Gert (Gast)


Lesenswert?

Zum Thema Ports bein 8051 gibt es bei ET-Tutorials.de eine Videos-Reihe.
http://et-tutorials.de/mikrocontroller/

Speziell für die Funktiobsweise von Ports könnte DIr dieses Video 
helfen:
http://et-tutorials.de/4339/lesen-aus-portpins/

von Mr Gast (Gast)


Lesenswert?

Danke! Jetzt verstehe ich schon ein bisschen mehr was so ein Port kann, 
aber für was ist er gut?

Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo 
ist der?

Und den oben geposteten Code verstehe ich noch immer nicht.

CPL P1.3 --> komplementiert das Bit(0 oder 1). D.h. 0 wird zu 1 und 1 
wird zu 0 richtig?

DJNZ R2,loop --> dekrementiert R2 um 1 und springt wenn R2 nicht 0 ist.

R2 ist aber immer 0, d.h. die Schleife wird nur einmal durchgegangen, 
was hat das für einen Sinn?

Und was steht in P1.3 drinnen?

von Mr Gast (Gast)


Lesenswert?

Mr Gast schrieb:
> R2 ist aber immer 0, d.h. die Schleife wird nur einmal durchgegangen,
> was hat das für einen Sinn?

Achso ne, was rede ich da...^^.

R2 ist nicht 0, sondern wird immer um 1 dekrementiert, d.h. die Schleife 
wird viel viel öfter durchgelaufen.

Wie weit sinkt den R2 ab? Wann kommt es den zu einen Überlauf?

von Mick M. (highlow)


Lesenswert?

0 - 1 = 255 --> 0xFF

Verstanden ?

von Mr Gast (Gast)


Lesenswert?

Nein leider nicht wirklich :(.

Was meinst du damit genau?

von spess53 (Gast)


Lesenswert?

Hi

> Wie weit sinkt den R2 ab? Wann kommt es den zu einen Überlauf?

Bis r2 wieder Null wird.

MfG Spess

von Icke (Gast)


Lesenswert?

Mr Gast schrieb:
> Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo
> ist der?

P1.X wobei x für 0 bis 7 steht.

P1.3 Konkret ist PIN 4 am Controller Gehäuse(bei 40 Pin DIL).

Der Sinn?
Damit Signale rein und raus können.

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Wo ist den auf dem Bild P1.3? Ich schätze mal Port 1 und pin 3? Aber wo
> ist der?

Auf dem Bild steht die Schaltung eines Bits von Port 3; es gibt davon 8 
Stck., daher auch P3.X mit X=0...7

> CPL P1.3 --> komplementiert das Bit(0 oder 1). D.h. 0 wird zu 1 und 1
> wird zu 0 richtig?

Ja.

> Und was steht in P1.3 drinnen?

Nach Reset steht irgendwas drin (müsste man im Datenblatt nachschauen), 
und das wird bei jedem Durchlauf invertiert.

Zu R2: 8-Bit-Register, Wertebereich 0...255. Beim inkrementieren kommt 
nach 255 wieder 0 (Überlauf), beim dekrementieren umgekehrt 
("Unterlauf").

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Danke!

Bei meinem Programm geht ja das ganze in den Minusbereich.

Also geht R2 bis -255 und dann kommt der "Unterlauf" und R2 wird dann 0?

von Uwe (Gast)


Lesenswert?

Bei 8 Bit ist der Wertebereich von 0-255 oder von -127 bis +127es gibt 
keine -255. Also 0 minus 1 gleich 255.

von Dietrich L. (dietrichl)


Lesenswert?

Uwe schrieb:
> oder von -127 bis +127

Damit Mr Gast nicht verwirrt wird:
bei 2er-Komplement (meist verwendete Kodierung): -128 bis +127

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Ok danke!

Ich hab hier 2 andere Programme:

Übung 1(WRITE_DD):
P1.4-P1.7

WRITE_DD:
ANL a,#0xF
SWAP A
ANL P1
ORL P1,A
RET

Was ist hier überhaupt die Aufgabenstellung, also was soll man hier 
erreichen? Und was macht dieses Programm?

Übung 2(Wait4Edge(4Low)):

WAIT4EDGE:
JB P1.0,$
JNB P1.0,$ ;jump if bit is not set
RET

WAIT4LOW:
JB P1.0,$ ;jump if bit is set
RET

Was können die Dollar-Zeichen hier? --> JMP $ ist ja eine 
Endlosschleifen, aber hier?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Übung 2(Wait4Edge(4Low)):
>
> WAIT4EDGE:
> JB P1.0,$
> JNB P1.0,$ ;jump if bit is not set
> RET
>
> WAIT4LOW:
> JB P1.0,$ ;jump if bit is set
> RET
>
> Was können die Dollar-Zeichen hier? --> JMP $ ist ja eine
> Endlosschleifen, aber hier?

Das ist aber nur ein JMP, wenn die Bedingung erfüllt ist; sonst geht das 
Programm weiter (zu RET).

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Ah ok jetzt ist mir das auch klar danke!

Und was soll das mit dem WRITE_DD? Ich verstehe gar nicht was die 
Grundidee dahinter ist?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Übung 1(WRITE_DD):
> P1.4-P1.7
>
WRITE_DD:
ANL a,#0xF  ; Akkuinhalt: D0...D3 bleibt, D4...D7 wird gelöscht
SWAP A      ; D0...D3 wird mit D4...D7 getauscht
ANL P1      ; der Befehl ist falsch: da fehlt der 2. Parameter
ORL P1,A    ; Port 1 wird mit der Oder-Verknüpfung von Port 1 und Akku
            ; geladen
RET         ; Rückkehr aus Unterprogramm

Was das Ganze soll, ist mir auch nicht klar, zumal da mindestens ein 
Fehler drin ist.

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Ahja, ok danke!

Ich habe mir jetzt Port 1 näher angeschaut. Die verschiedenen Fälle 
etc., wann der FET durchschaltet und wann nicht, dass weis ich jetzt.

Man kann ja hier den Port-pin lesen und beschreiben. Und dann auch noch 
den Port-Latch lesen(kann man den Port-Latsch auch beschreiben?)

Ich verstehe nicht wie man jetzt liest oder beschreibt? Wie macht man 
das?

Bei meinen Codes hab ich das gelesen oder geschrieben und vorallem was 
Port pin oder Port latch?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Man kann ja hier den Port-pin lesen und beschreiben. Und dann auch noch
> den Port-Latch lesen(kann man den Port-Latsch auch beschreiben?)

Nein, schau Dir die Schaltung nochmal an:
- Port-Pin als Ausgang:
  * Du schreibst in das Latch und bestimmst damit den Zustand der 
Port-Pins
  * Du kannst das Latch lesen; so brauchst Du im Programm den Zustand 
der Bits nicht woanders merken, wenn Du später mal ein Bit ändern willst
- Port-Pin als Eingang:
  * das Latch muss auf "1" geschrieben sein, damit der Transistor 
abgeschaltet ist und den Eingang nicht auf "0" zieht (und damit das 
Eingangssignal kurzschließt)
  * den Pin kannst Du nur lesen (schreiben ist ja auch nicht logisch)

> Ich verstehe nicht wie man jetzt liest oder beschreibt? Wie macht man
> das?
> Bei meinen Codes hab ich das gelesen oder geschrieben und vorallem was
> Port pin oder Port latch?

Schreiben des Latch von Port 1 z.B.   MOV P1,A
Lesen der Pins von Port 1 z.B.        MOV A,P1
Bei einigen Befehlen wir aus dem Latch gelesen, z.B.
  ORL P1,#1  wird so ausgeführt: aus dem Latch Lesen, #1 dazuodern, 
wieder in das Latch schreiben

Genaueres muss man bei den Befehlen nachlesen.
siehe auch: 
http://electrofriends.com/articles/electronics/microcontroller-electronics-articles/8051-8951/8051-microcontroller-port-programming/

- Alle Angaben ohne Gewähr -
Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Danke dir!

Aber hier steht: Port lesen, Port schreiben und Port Latch Lesen, aber 
kein Port Latch schreiben? Jetzt bin ich verwirrt.

>>>Du kannst das Latch lesen; so brauchst Du im Programm den Zustand
der Bits nicht woanders merken, wenn Du später mal ein Bit ändern 
willst.

Ich verstehe nicht was damit gemeint wird. Wo brauch ich kein Bit merken 
und warum? Kann mir einer das bitte näher erklären?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Aber hier steht: Port lesen, Port schreiben und Port Latch Lesen, aber
> kein Port Latch schreiben? Jetzt bin ich verwirrt.

Port schreiben ist Latch schreiben, denn der Latch-Ausgang geht (mehr 
oder weniger) direkt auf den Port-Pin als Ausgang.

>> Du kannst das Latch lesen; so brauchst Du im Programm den Zustand
>> der Bits nicht woanders merken, wenn Du später mal ein Bit ändern
>> willst.
>
> Ich verstehe nicht was damit gemeint wird. Wo brauch ich kein Bit merken
> und warum? Kann mir einer das bitte näher erklären?

Das war wohl auch nicht ganz richtig. So wie ich das verstanden habe 
wird das wohl nur intern benutzt, z.B. beim ORL P1,#1 (s.o.: Lesen - 
Ändern - Schreiben).
Denn wenn es das "Lesen Latch" physikalisch nicht gäbe und man nur ein 
Bit im Port ändern wollte, müsste man den Zustand der anderen Bits ja 
kennen, um sie nicht zu verändern.

Es gibt auch die Möglichkeit, direkt Einzelbits zu ändern 
(Bitadressierung). Wie das aber jetzt intern abläuft, weiß ich nicht.

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Ok danke!

auf dieser seite da: 
http://electrofriends.com/articles/electronics/microcontroller-electronics-articles/8051-8951/8051-microcontroller-port-programming/

Da ist ja überall beschrieben wie ein Port als Input funktioniert, warum 
ist das nicht beschrieben wie die Ports als Output funktionieren?

Alle Ports können I/O oder?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> auf dieser seite da:
> http://electrofriends.com/articles/electronics/mic...
>
> Da ist ja überall beschrieben wie ein Port als Input funktioniert, warum
> ist das nicht beschrieben wie die Ports als Output funktionieren?

Ist es doch: bei "Port 0:" wird es benutzt als Ausgang, bei "Port 0 as 
Input:" als Eingang.
Wenn es Eingang sein soll, muss das Latch auf "1" geschrieben werden, 
sonst gibt es Kurzschluss mit der externen Quelle.

> Alle Ports können I/O oder?

Ja.

Gruß Dietrich

von Mr Gast (Gast)


Lesenswert?

Alle Ports(inklusive Pins) müssen beim D-Eingang eine 1 haben das sie 
als input wirken?

D.h. am FET liegt Low Pegel an --> Er sperrt oder? Die 
Drain-Source-Spannung ist niedrig, dadurch ist er offen oder?

Warum muss am Pin High Pegel(3-5V) anliegen, das der Port als Input 
gilt?

Und warum muss am Pin Low Pegel anliegen, das der Port als Output gilt?

Read-modify-write:

Vom Port lesen, Wert verändern, zurückschreiben.

z.B.

MOV P0,A
ANL P0,#FFhex

Kann man dazu noch was näheres sagen zu Read-modify-write?

von Dietrich L. (dietrichl)


Lesenswert?

Mr Gast schrieb:
> Alle Ports(inklusive Pins) müssen beim D-Eingang eine 1 haben das sie
> als input wirken?

Ja.

> D.h. am FET liegt Low Pegel an --> Er sperrt oder? Die
> Drain-Source-Spannung ist niedrig, dadurch ist er offen oder?

Ja. Aber das gilt für alle Ports.

> Warum muss am Pin High Pegel(3-5V) anliegen, das der Port als Input
> gilt?

Nein, muss nicht. Nur der FET muss abgeschaltet sein (d.h. Latch=1), 
damit das externe Signal, das man am Eingang "sehen" will, ungestört 
durchkommt. Dieses externe Signal kann natürlich High oder Low sein, 
sonst wäre das ja Unsinn ;-)

> Und warum muss am Pin Low Pegel anliegen, das der Port als Output gilt?

Nein, muss nicht. Es kann natürlich High oder Low sein, sonst könntest 
Du ja mit dem Ausgang nicht anfangen. Nur: High ist relativ hochohmig 
(nur der Pull-Up-Widerstand), darum kann in diesem Zustand der Pin 
auch als Eingang benutzt werden.

> Read-modify-write:
>
> Vom Port lesen, Wert verändern, zurückschreiben.
>
> z.B.
>
> MOV P0,A
> ANL P0,#FFhex
>
> Kann man dazu noch was näheres sagen zu Read-modify-write?

(Am Rande: In diesem Beispiel kannst Du ANL P0,#FFH weglassen, da 
UND-Verknüpung mit 0FFH kein Bit verändert..)

Das Read-modify-write macht der µC ganz alleine. Das gilt für bestimmte 
Befehle, z.B. ANL P0,#FFH oder ORL... Es gibt aber noch mehr Befehle, 
die das Port verändern, wo der Ablauf so ist. Ich habe jetzt aber nicht 
alle Befehle daraufhin durch geforstet. Das kannst Du bei Bedarf selber 
machen:
http://www.keil.com/dd/docs/datashts/philips/p51_pg.pdf
Schau dort mal z.B. auf Seite 97.

Gruß Dietrich

PS: Diese etwas "komplizierte" Art von Ports ist eine Spezialität von 
8051er µCs. Bei neueren µCs gibt es üblicherweise eigene 
"Richtungs-Register", in denen man hineinschreibt, ob der Pin Eingang 
oder Ausgang ist.

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.