Nein, die beiden Codezeilen sind etwas anders zu verstehen.
Wenn Du in Bascom X = A schreibst, bezeichnet "X" eine Variable um die es geht, und "A" den Wert, den sie haben soll. Konkret also z.B.
Dim Zähler as Byte
Zähler = 20
Zähler = Zähler + 1
(Zähler hätte am Schluss den Wert 21.)
Da ein Byte 8 Bits hat, könnte man statt der 20 auch den Binärwert schreiben:
Zähler = &b00010100
Oder Hexadezimal:
Zähler = &h14
Du kannst einer Variablen aber nicht nur einen numerischen Wert (also eine Zahl) zuweisen, sondern auch gleich direkt den Inhalt eines Registers:
Dim Programmwahl as byte
Programmwahl = PINA
Damit nimmt die Variable Programmwahl den Wert an, der gerade im 8-bit-Register PINA steht.
Zur Erinnerung: Im Register PINA steht das Muster aus Einsen und Nullen, das an den Anschlüssen A.7 bis A.0 anliegt (vorausgesetzt sie sind per DDR-Register als Eingänge konfiguriert). Diesem Register kannst Du also nicht auf Befehlsebene einen Wert zuweisen, sondern sein Inhalt hängt ausschließlich von den Highs und Lows an den Anschlüssen ab. PINA = XYZ macht also keinen Sinn - man kann dieses Register nur auslesen, d.h. XYZ = PINA.
Liegt also z.B. an den Anschlüssen A.4, A.2 und A.0 ein High (und an den anderen ein Low), stünde im Register PINA der Wert &b00010101. Mit dem Befehl Programmwahl = PINA übernimmst Du also das "Muster" aus Highs und Lows aus dem Register PINA direkt in Deine Variable Programmwahl. Klar?
Jetzt könnte es ja aber sein, dass Du die Anschlüsse A.7, A.6 und A.5 für was ganz anderes brauchst - zu den Bits, die die Programmwahl steuern, gehören sie ja definitiv nicht. Du kannst aber nur das ganze Register PINA auf die Variable Programmwahl übertragen. Wenn also nur die Bits Programmwahl.4 bis Programmwahl.0 ausgewertet werden sollen, musst Du gegebenenfalls die höchsten 3 Bits der Variable Programmwahl auf 0 setzen. Das geht entweder einzeln:
Programmwahl.7 = 0
Programmwahl.6 = 0
Programmwahl.5 = 0
oder eben am Stück, indem Du die oberen 3 Bits mit einer 0 Und-verknüpfst (das Ergebnis einer UND-Verknüpfung mit 0 ist immer 0), und die unteren 5 Bits mit einer 1 UND-Verknüpfst (das Ergebnis ist immer die Ausgangsvariable selbst: 0 UND 1 = 0, 1 UND 1 = 1).
Kurz und gut: Programmwahl = Programmwahl AND &b00011111 setzt die obersten 3 Bits der Variable auf 0, egal was vorher drin gewesen war, während die unteren 5 Bits unverändert bleiben.
Lesezeichen