Mikrocomputertechnik Bit´s maskieren

Ganz simpel ausgedrückt:
wenn dein Akku den Wert #F8hex enthält, lädst du den Wert #12hex und verknüpfst diese Werte mit UND.

Dann bleiben am Ende folgende Bits stehen:
0001 1000 also #18hex
 
Danke aber ich versteh nicht ganz wo du die Adresse vom Akku bekommst😬 könntest du mir es anhand von den Folgenden Beispiel erklären?

P0 soll auf die Adresse 20H gespeichert werden und P1 auf 22H. Bei beiden Ports sollen die
unnötigen Bits ausmaskiert werden.
 
Und welche Bits sind davon unnötig?
Bisschen mehr input bitte.. Wie lautet die Aufgabe genau? Hast du einen groben Ansatz?
Stell das mal alles ein (Urheberrechte beachten), dann können wir helfen
 
Hallo,

schau mal in deine Formelsammlung S.29.
Dort findest du Anweisung ANL A,@Ri.

Oft kommt die Aufgabenstellung, dass du jeweilige Ports maskieren sollst.
Nehmen wir also an, dich interessieren nur die Ports 5 - 8.
Binär wären das also die letzten vier Bits.
Also ließt du jetzt den jeweiligen Port in deinen Akkumulator als Hex ein.
Nehmen wir als Beispiel AFhex:
= 1010 1111

Jetzt musst du die ersten 4 Bits (1111) maskieren, da sie dich nicht interessieren.
Dies realisierst du, in dem du den jetzigen Hex-Wert im Akkumulator UND verknüpfst, wie @RoH es schon beschrieben hat.

Deine Anweisung lautet also:

ANL A,#F0

AFHex = 1010 1111
F0Hex = 1111 0000
___________________
= 1010 0000

"Es werden immer die Bitstellen zu "0", in denen die Maske ihre Nullstellen besitzt.

So lange du also keine zwei gleichen "1-Signale" hast, ist das Ausgangsbit immer 0.
Heißt also, egal was mit den ersten 4 Bits passiert, der Wert ist immer "0" und du hast sie aus maskiert.

Der Wert F0Hex entsteht, weil du dir anschaust, welche Eingänge deines Ports dich interessieren.
 
Hallo,

schau mal in deine Formelsammlung S.29.
Dort findest du Anweisung ANL A,@Ri.

Oft kommt die Aufgabenstellung, dass du jeweilige Ports maskieren sollst.
Nehmen wir also an, dich interessieren nur die Ports 5 - 8.
Binär wären das also die letzten vier Bits.
Also ließt du jetzt den jeweiligen Port in deinen Akkumulator als Hex ein.
Nehmen wir als Beispiel AFhex:
= 1010 1111

Jetzt musst du die ersten 4 Bits (1111) maskieren, da sie dich nicht interessieren.
Dies realisierst du, in dem du den jetzigen Hex-Wert im Akkumulator UND verknüpfst, wie @RoH es schon beschrieben hat.

Deine Anweisung lautet also:

ANL A,#F0

AFHex = 1010 1111
F0Hex = 1111 0000
___________________
= 1010 0000

"Es werden immer die Bitstellen zu "0", in denen die Maske ihre Nullstellen besitzt.

So lange du also keine zwei gleichen "1-Signale" hast, ist das Ausgangsbit immer 0.
Heißt also, egal was mit den ersten 4 Bits passiert, der Wert ist immer "0" und du hast sie aus maskiert.

Der Wert F0Hex entsteht, weil du dir anschaust, welche Eingänge deines Ports dich interessieren.
Danke ich werde mir es mal durch den Kopf gehen lassen ob ich es jetzt verstehe ;)
 
Um mal kurz auf die Aufgabe einzugehen...
Wir nehmen Port 0. Dich interessiert nur P0.0 ; P0.1 ; P0.2

Wenn wir uns den ganze Port anschauen, hast du aber:
P0.8; P0.7; P0.6; P0.5; P0.4; P0.3; P0.2; P0.1; P0.0

nun müssen wir die nicht fett markierten Eingänge maskieren.
Das tun wir, in dem wir die Eingänge "0" setzen die du nicht haben möchtest, und die Eingänge "1" setzen, die du haben möchtest.
Also ist das Ergebnis 0000 0111 = 07hex

In deinem Programm würdest du jetzt den Wert von P0 in deinen Akkumulator bringen und anschließend mit 07hex UND verknüpfen.

MOV A,P0
ANL A,#07
MOV 20H,A
 
meine µC Prüfung liegt schon über 2 Jahre zurück... Aber was machst Du mit dem letzten Befehl? Den braucht man doch nicht, bzw macht der Sinn? 🤨

@Huber161 es ist wichtig, dass du immer im Akku den Vergleich durchführst. Du kannst keinen P0 direkt mit P1 vergleichen.
Also wie es @Billly gemacht hat: P0 in Akku laden; im Akku den Vergleich durchführen. Das Ergebnis liegt dann im Akku.

Um es weiter zu verarbeiten, kannst Du den Wert entweder mit
MOV R0, A ---> den Wert im Register 0 speichern oder
MOV P2, A ---> den Wert auf dem Port 2 ausgeben lassen.
 
Tatsache. Habe eben die FoSa rausgekramt. Ich hatte noch was im Kopf, dass man erst ORGanisieren müsste.
Aber den Befehl gibt es so wirklich :p

Bin schon ruhig und besänftigt 😂😂
 
jetzt habe ich noch eine frage und zwar muss ich vor jeden Vergleich den zu vergleichenden Wert in den Akkumulator laden?

ich möchte R1 und R0 vergleichen:
MOV A, R1
SUBB, A-R0
----> dann kann ich vergleichen

Stimmt dass so?
 
Ja und nein.

Operationen gehen nur im Akku.
Aber der Befehl lautet wenn
SUBB A, R0

Vor Subtraktionen sollte zudem immer erst das Carry Bit gelöscht werden
 
MOV A, P1 --> Soll- und Istwert in den Akku eingelesen
MOV R1, A --> Soll- und Istwert sind temporär in einem Register zwischengespeichert - somit in einem Zyklus eingelesen, zum Weiterverarbeiten.
ANL A, #08h --> das L-Nibble wird maskiert (unteren 4 Bits sind der Sollwert)
MOV 32H, A --> der Sollwert wird auf Adresse 32H gelegt
MOV A, R1 --> den vorher eingelesenen Wert wird in Akku laden
SWAP A --> H- und L-Nibble tauschen (Soll- und Istwert tauschen)
ANL A, #08h --> wieder L-Nibble maskieren (ist jetzt der Istwert)
MOV 30H, A --> der Istwert wird auf Adresse 30H gelegt

Kommt natürlich drauf an, wie die Werte gespeichert werden sollen. Bin mal davon ausgegangen, dass sie jeweils im L-Nibble liegen sollen. Hab jetzt nicht detailliert nach den Adressen geschaut.
 
MOV A, P1 --> Soll- und Istwert in den Akku eingelesen
MOV R1, A --> Soll- und Istwert sind temporär in einem Register zwischengespeichert - somit in einem Zyklus eingelesen, zum Weiterverarbeiten.
ANL A, #08h --> das L-Nibble wird maskiert (unteren 4 Bits sind der Sollwert)
MOV 32H, A --> der Sollwert wird auf Adresse 32H gelegt
MOV A, R1 --> den vorher eingelesenen Wert wird in Akku laden
SWAP A --> H- und L-Nibble tauschen (Soll- und Istwert tauschen)
ANL A, #08h --> wieder L-Nibble maskieren (ist jetzt der Istwert)
MOV 30H, A --> der Istwert wird auf Adresse 30H gelegt

Kommt natürlich drauf an, wie die Werte gespeichert werden sollen. Bin mal davon ausgegangen, dass sie jeweils im L-Nibble liegen sollen. Hab jetzt nicht detailliert nach den Adressen geschaut.
Da du ja das ganze H-Nibble ausmaskieren möchtest, solltest du hier auch mit ANL A, #0FH maskieren. Da du ja die Ports P0.0 - P0.3 noch behalten möchtest.
 

Jobs

Jobmail abonieren - keine Jobs mehr verpassen:

Ich möchte die wöchentliche Jobmail erhalten und akzeptiere die Datenschutzerklärung.
Du kannst die Jobmail jederzeit über den Link in der Mail abbestellen.

Wir verwenden Sendinblue als unsere Marketing-Plattform. Wenn Du das Formular ausfüllst und absendest, bestätigst Du, dass die von Dir angegebenen Informationen an Mailchimp zur Bearbeitung gemäß den Nutzungsbedingungen übertragen werden.

Top