Forum: Mikrocontroller und Digitale Elektronik 8051 Ports


von Steffen (Gast)


Lesenswert?

Hallo!

Ich programmiere nun seit einigen Jahren die At90* und die AtMega Serie
von Atmel. Nun möchte ich zusätzlich die Programmierung von 8051er
lernen (ich habe meine Gründe dafür und will KEINE Diskussion über Vor-
und Nachteile der genannten uC auslösen).

Wie kann ich einen einzelnen Pin eines Ports als Ausgang oder Eingang
definieren? Ich habe nur die Register P0-P5 gefunden. Bei den AVRs geht
das über die Regsiter PORTx PINx und DDRx. Wie ist das bei den 8051ern
gelöst?

Ich habe leider keine Infos dazu finden können. (Wahrscheinlich fehlen
mir nur die entsprechenden Stichwörter).

Vielen Dank für eure Hilfe.
Grüße Steffen

von Thomas Schattat (Gast)


Lesenswert?

Hi Steffen,
ist ganz einfach wie immer wenn man es weiß.
Ausgang:

MOV Port1, A
Schreibt den Akku in den Port 1

Eingang:
Mov P1, FF
MOV A, P1

Funktioniert so: Ich setze die Port Pins auf 1 und lese danach aus. Das
Setzen auf 1 muß nur einmal geschehen.
Wenn ich eine 1 einlese ist der Eingabewert (bitweise) 1, wenn ich eine
0 zurücklese ist der Eingabewert 0.
Kannste auch mit jedem Bit einzeln machen, also fünf Bits ausgeben und
drei Bits einlesen oder so.
Prinzipiell: Bits die ich einlesen will auf 1 setzen, dann Bit
einlesen.

Gruß und viel Erfolg

Thomas

von Steffen (Gast)


Lesenswert?

Hallo Thomas,

danke für deine Antwort!

Ich programmiere in IAR Embedden Workbench, also C. Aber das dürfte da
ja keinen großen Unterschied machen.

Sprich: Man setzt das Portregister (alle Eingänge auf 1, alle Ausgänge
auf 0)

Anschließend liest man das Portregister ein.

Will man wieder einlesen, reicht es, dass Portregister zu lesen und die
entsprechenden Bits auszuwerten.

Will man die Ausgänge setzen, so setzt man diese wie gewünscht und die
Eingänge wieder auf 1.

Muss das Einlesen des Portregisters genau der nächste Befehl sein? Dann
werden die Pins als Eingang / Ausgang gesetzt.

Hab ich das so richtig verstanden?

Danke nochmals!!
Grüße Steffen

von Dirk B (Gast)


Lesenswert?

Es gibt nur ein Register für jeden Port. Wird dieses auf 0xFF gesetzt
liegen alle Pins auf high (mit Pull-up). Wird jetzt ein Pin extern
gegen Masse gezogen, wird auch das entsprechende Bit im Register low
und man kann es auch so auslesen.

von Peter D. (peda)


Lesenswert?

Der 8051 hat open-drain Ausgänge mit internen Pull-Up Widerständen.
Deshalb kann er keine großen High-Ströme treiben (z.B. LEDs gegen VCC
anschalten).
Eine Richtungsumschaltung gibt es deshalb nicht.
Gelesen wird immer von den Pins, geschrieben auf das Portregister.
Das Portregister kann nicht direkt gelesen werden, wird aber bei ORL,
ANL, XRL, SETB, CLR, JBC verwendet.

Nach dem Reset sind alle Ports auf High und Du kannst sie als Eingänge
benutzen.

Bei P0 fehlen die Pull-ups und Du must extern welche anschalten, sobald
P0 als Ausgang dienen soll.

Neuere schnelle 8051-er (z.B. C8051Fxx-Serie, Philips LPC-Serie) können
auch als Push-Pull Ausgagng geschaltet werden und dann größere
High-Ströme liefern.


Peter

von Hans (Gast)


Lesenswert?

Ich weiß zwar jetzt nicht welchen 8051 du verwendest, aber beim C515C
von Siemens kann man direkt auf die einzelnen Bits des Ports zugreifen
mit zb.

SETB P4.1
CLRB P4.1

von Steffen (Gast)


Lesenswert?

Hallo!

Danke für die vielen Antworten!

Ich verwende den AT89C51SND1 - als MP3 Player.
Das Datenblatt sagt natürlich nur etwas über die eigenheiten des SND1
aus - nichts über die generelle Programmierung von 8051ern. Daher meine
Fragen :-)

Aber mit der Erklärung von Peter hab ichs jetzt voll verstanden.
@Peter:
Eine Frage noch zu deiner Antwort:
"Das Portregister kann nicht direkt gelesen werden, wird aber bei
ORL,
ANL, XRL, SETB, CLR, JBC verwendet."
Wie genau ist das gemeint?
"MOV A, P1"
so kann ich das Portregister doch einlesen, oder nicht?

Grüße Steffen

von Jochen (Gast)


Lesenswert?

@Hans:

"Ich weiß zwar jetzt nicht welchen 8051 du verwendest, aber beim
C515C
von Siemens kann man direkt auf die einzelnen Bits des Ports zugreifen
mit zb.

SETB P4.1
CLRB P4.1"

Was hat denn Deine Antwort mit Peters Aussage zu tun?
Nichts. Lies Peters Antwort nochmal durch und schau ins Datenblatt des
8051ers.

von Steffen (Gast)


Lesenswert?

Ich glaube, Hans' Antwort war mehr auf meine Fragen bezogen.
Und er wollte wissen, was ich für einen 8051 er verwende ...

Grüße Steffen

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.