-
        

Ergebnis 1 bis 4 von 4

Thema: Nur oberes Nibble eines Ports beschreiben

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216

    Nur oberes Nibble eines Ports beschreiben

    Anzeige

    Hallo!
    Ich möchte gerne an einem ATMega8 die als Ausgang geschalteten Pins PD4 bis PD7 schalten und dies gerne mit der Übergabe eines Wertes, also z.B. Portd=Wert. Allerdings sind die anderen Pins von Port d als Eingang geschaltet und ich weiss nicht, ob ich damit etwas beschädigen könnte, daher die Frage: ist es möglich, nur dem oberen Nibble des Ports einen Wert zuzuweisen?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.08.2004
    Ort
    Stuttgart
    Alter
    42
    Beiträge
    849
    Das geht am besten indem du den Wert aus dem Port ausliest und ihn mit AND ausblendest. Dann das zu schreibende Byte mit OR wieder hinzugügen und fertig:

    ' Wert der geschrieben werden soll ins obere Nibble
    Wert = 123
    ' Wert oberen Nibble ausmaskieren
    Wert = Wert And &B11110000
    ' Aktuellen Zustand des Ports im unteren Nibble ausblenden
    TempWert = PortD And &B00001111
    ' Beide Werte wieder kombinieren und auf Port schreiben
    PortD = TempWert Or Wert

    Anstatt der &B00001111 kann man auch einfach &H0F schreiben

    Prinzip des AND:

    xxxxxxxx
    00001111
    -----------
    0000xxxx

    Prinzip des OR:

    xxxxxxxx
    01100000
    -----------
    x11xxxxx

    Grüße Wolfgang

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.03.2005
    Ort
    OWL
    Beiträge
    216
    Super Erklärung, Danke Wolfgang!

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    24
    Beiträge
    601
    Hi,

    tschuldigung, dass ich den Thread jetzt einfach so ausgrabe, aber ich hätte auch eine Frage zur Nibble-Kommunikation.

    Ich möchte ein Byte (also Wertebereich 0 - 255) auf 5 Ports senden. 4 zum parallelen Übertragen der Nibble und quasi eine als "Statusanzeige", die auf high gesetzt wird, wenn das Nibble das höherwertige ist.

    Das Senden hat ja Wolfgang schon sehr anschaulich beschrieben, mir ist nur das Empfangen unklar. Ich könnte ja den Port auslesen, den Wert in eine Variable schreiben, wenn das höherwertige Nibble übertragen wurde, in die eine Variable, ansonsten in die andere. Danach könnte ich die beiden Werte einfach mit OR kombinieren.

    Den Port, welchen ich zum Empfangen verwenden möchte, ist aber nicht unbelegt, da hängt auch noch der Quarz drauf. Nun meine Frage, kanns da zu Problemen mit dem Auslesen kommen?


    Viele Grüße
    ikarus_177

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •