Forum: Mikrocontroller und Digitale Elektronik muss man ports als Ausgänge definieren?


von Herbert Hassinger (Gast)


Lesenswert?

Hallo,
danke für die Antworten zum 8051 Befehlssatz, jetzt habe ich noch ne
Frage, habe in Keil ein kleines programm geschrieben um zu testen,
allerdings wird nix angezeigt. Muss man vielleicht z.B. den Port 2 als
Ausgang definieren wie z.B. beim Atmega um ne Led anzusteuern.
Habe ne LED an Port 2.0 geklemmt und wollte das nur diese Leuchte.

main: mov p2, #01 ;damit die led am ersten bit leuchtet
ljmp main
end

Mach ich nen Denkfehler, dieser Pin müsste doch dann auf VCC gehen
oder?

von Jens (Gast)


Lesenswert?

evtl ist 00 = alles an?
aber den port muss man im ddr schon definieren
sonnst weiss der µC nicht, um was es sich handelt

von plitzi (Gast)


Lesenswert?

Die 8051 haben keine Gegentaktausgangsstufen. D.h. sie können zwar
teilweise bis zu 20mA "aufnehmen" (also gegen GND schalten) aber nur
seeeehr wenig Strom "ausgeben". Ein H-Pegel am Ausgang wir nur durch
einen internen PullUp gegen VCC in Größenordnung von 100kOhm erzeugt,
das reicht oft nichteinmal, um einen npn-Transistor durchzuschalten.

Deshalb beim 8051: "Verbraucher" sollten grundsätzlich gegen VCC
geschalten werden (LED mit der Anode an VCC, Katode über R an den
Ausgang, LED leuchtet, wenn Ausgang auf 0 geschalten wird).

Jörg

von Markus_8051 (Gast)


Lesenswert?

Hallo Herbert,

vergiß mal ganz schnell was Jens geschrieben hat: Beim 8051 gibt es
keine DDR (DataDirectionRegister). Vermutlich bezieht er sich da auf
einen anderen Prozessor.

Was Jörg schrieb war da schon eher die Antwort auf Deine Fragen. Also,
schalte die LED mit Vorwiderstand gegen Vcc, dann klappt es. Denke auch
daran, daß beim 8051 alle Portpins nach dem Reset High-Potential
führen.
Weiterhin solltest Du beachten, Wenn du mehrere LEDs betreibst, daß es
nicht nur eine Strombegrenzung pro Pin, sondern auch noch eine gesamte
maximale Stromaufnahme gibt, die einzuhalten ist. (Steht im Datenblatt
deines µCs)
Zu den internen Pullups: 100kOhm ist etwas viel, der Wert liegt eher
bei 15-20kOhm. Port 0 hat gar keine Pullups, wenn man hier ein High
erwartet, muß man die Leitungen extern hochziehen. (So ist es zumindest
bei der AT89... Serie von Atmel.

Welchen 8051 verwendest Du?

Gruß,
Markus_8051

von Krischan (Gast)


Lesenswert?

Hi,

Jens hat mit dem DataDirectionRegister nicht ganz unrecht (sorry
Markus). Soweit ich weiß gibt es von Philips 8051-Derivate (LPC9xx) die
über Gegentaktausgangsstufen verfügen. Sie benehmen sich an den Ports
nicht wie der Ur-8051 sondern die Portleitungen müssen bei der
Verwendung als Ausgang über das entsprechende Register
(PxM1.y-Register) initialisiert werden.

Gruss

Krischan

von Markus_8051 (Gast)


Lesenswert?

Hallo Krischan,

danke für die Info. Tz, das so etwas noch den Namen 8051 tragen
darf....

Nun, ich werde mir diese Käfer mal anschauen, nicht das ich hier
weiterhin solchen Unsinn erzähle.

Gruß,
Markus_8051

von Peter Dannegger (Gast)


Lesenswert?

Es stimmt, einige neuere Derivate, z.B. von Silabs oder der neue 20MIPS
von Atmel können auch echte Gegentaktausgänge.

Allerdings schlachtet keiner die heilige Kompatibilitätskuh, d.h. nach
dem Reset sind es ganz normale 8051-Ausgänge und high.

D.h. die Philipse bilden eine Ausnahme, die können per Fuse als "nach
reset low" definiert werden.


Ich würde aber sagen, daß es keine Schande ist, wenn ein
8051-Programmierer nicht alle der über 600 Typen kennt.


Peter

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.