8051 Interne Pullups

Gast #407593
Lesenswert?

Hallo

Wenn Du die 0xff Hexzahl in eine binäre Zahl umwandelst, dann
entspricht jedes Bit einem Port-Pin.

Also P1=0x01 würde nur den ersten Pin ansteuern, P1=0x02 den zweiten,
P1=0x03 den ersten und zeiten.....

Wenn Du nicht alle Pins gleichzeitig setzen willst, dann kannst Du
einzelne setzen/löschen, indem Du dies mit binären UND oder ODER
Verknüpfungen realisierst.

Also sagen wir, Bit 0 und Bit 1 sind gesetzt, also P1 = 0x03 und Du
willst nur Bit 0 wieder auf 0 setzen, dann machst Du das so:

P1 = P1 & ~0x01;

Man nimmt also den aktuellen Zustand von P1 und macht eine UND
Verknüpfung mit b11111110 (die Wellenlinie invertiert den Wert), somit
wird das Bit 0 gelöscht.

Um es wieder zu setzen, einfach eine ODER verknüpfung machen:

P1 = P1 | 0x01;

..und das Bit 0 ist wieder gesetzt.

Das geht so mit allen Bits bzw. Pins.

Gruss
Johnny
Gast #407596
Lesenswert?

Seid ihr sicher, das das so klappt?

Ich bin der Meinung, der 8051iger hat Open-Collector Ausgänge. und
keine Ausgangsregister. Dadurch läßt sich der aktuelle Zustand eines
Pins nicht unbedingt wieder einlesen.

Wenn du also einzelnen Pin setzen oder löschen willst, mußt du entweder
ein eigenes Pinregister führen, oder es gibt compiler, die die Pins
einzeln ansprechen können. µVision konnte das allerdings mußten die Pin
da vorher definiert werden und ich weiß gerade nicht mehr, wie das ging.
#407598
Lesenswert?

Der 8051 hat Read-Modify-Write-Instruktionen, die das Ausgangsregister
lesen und ändern.

Es ist also gefahrlos möglich, mit SETB, CLR, XRL, ANL, ORL nur
bestimmte Pins zu ändern, ohne Pins zu beeinflussen, die extern low
gezogen werden.


In C:
Willst Du einen Pin auf Low, nen andern auf High ziehen, mußt Du das
hintereinander machen:

P2 |= 0x01;
P2 &= ~0x02;

Falsch (wenn Pins des gleichen Ports extern low gezogen werden) wäre:

P2 = P2 & ~0x02 | 0x01;

da dann das Eingangsregister gelesen wird. Damit würden alle extern low
gezogenen Pins nun zu low aktiven Ausgängen.


Peter

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