PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur oberes Nibble eines Ports beschreiben



Ruppi
23.03.2005, 14:48
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?

BlueNature
23.03.2005, 15:04
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

Ruppi
23.03.2005, 15:08
Super Erklärung, Danke Wolfgang!

ikarus_177
25.07.2008, 09:14
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