Ein bisschen, aber das kriegen wir hinOder stehe ich aufem Schlauch?
Die Idee mit dem "Maskieren" beruht auf folgendem Ansatz:
Wenn X ein Bit ist (also die Werte 0 oder 1 annehmen kann), dann gilt folgendes:
X AND 0 = 0 (egal welchen Wert X hat: Eine "und"-Verknüpfung mit 0 ergibt immer 0)
X AND 1 = X (0 AND 1 = 0, 1 AND 1 = 1)
Wenn Du also folgenden Befehl ausführst:
Byte = Byte AND &B00001111
dann werden die linken 4 Bits auf 0 gesetzt, während die rechten 4 Bits ihren Wert unverändert beibehalten. Logisch, oder?
Und darauf bezog sich auch die Antwort von da_reefer: Wenn der BCD-Wert an PIND.0-3 anliegt, Du aber den kompletten Port abfragst (Byte = PIND), könnte es theoretisch sein, dass die Bits PIND.4-7 das Byte verfälschen. Deshalb solltest Du sie sicherheitshalber mit dem AND &B00001111-Befehl löschen. Und der ist in der Tat nur ein mal erforderlich, und zwar nachdem Du den Wert von PIND in ein Byte übernommen hast.
Lesezeichen