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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.