mikrocontroller.net

Forum: Offtopic Vergleichen


Autor: zugvogel1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
also ich möchte folgendes vergleichen und weis nicht wie.
deshalb bin ich für jeden Tip dankbar.
Vergleich das Bit aaa mit den Wert d aus bb
bbbbbbbb 1110daaa
wenn gleich dann goto.

aaa=Bit0-Bit7
d=1oder0
bb=Zahl von 0-255

dank an alle

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definition: Bit_0 = das ganz rechte bit ... bit_7=das höchstwertigste
Bit

1. Du hast ein Bitmuster bbbbbbbb (8 Bit), in dem du feststellen
möchtest ob bestimmte Bits einen bestimmten Zustand haben.

2. du hast ein Zähler aaa, welcher Werte zwischen 0 .. 7 (gleich:
Bitposition 0..7) annehmen kann. Das Bit aus "bbbbbbbb" soll an der
Zählerposition "aaa" verglichen werden ob es identisch ist zum Wert
von "d". Fals ja: Tue dies, falls nein: tue jenes

Frage 1: wielviele verschiedene Situationen werden mit "tue_dies bzw.
tue_jenes" abgebildet? Gibt es nur 2 Alternativen, oder wird es
mehrere geben?

Frage 2: In welcher Hochsprache, Pseudo-Hochsprache, Assemblersprache
hättest du es denn gerne ?

Autor: zugvogel1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

es gibt nur zwei antworten (ja oder nein)
Fals ja: Tue dies
falls nein: tue jenes

ich schreibe in Assemblersprache

danke schon mal!!!

Autor: zugvogel1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich noch mal

hier noch mal eine andere beschreibung meines Anliegens.
Vergleich das Bit aaa mit den Wert d aus bb
bbbbbbbb 1110daaa
wenn gleich dann goto

lese welches bit in aaa gemeint ist dann schaue in d ob das der wert 0
oder 1 und nun gehe an das Bit in bbbbbbbb und vergleiche auch den
Wert d also ob 0 oder 1 ist.

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Langbeschreibung deines 2. Postings beschreibt ja genau, was du
machen sollst (und ist auch nix anderes wie das im ersten Posting
benannte, also insofern sind die Beschreibungen konsistent.

Die Aufgabe ist schon soweit klar, blos wenn du_ nicht weist was _du
für einen Prozessor benutzt dann wird dir keiner helfen können
......

"ich schreibe in Assemblersprache"

Dir ist aber schon bekannt, daß es mehr wie einen Prozessor gibt?

Möchtest du nun Assembler für eine Cray XMP, oder für HAL 2000 aus
"Odyssee im Weltraum"? Ich hätt dann auch noch Assembler vom R2D2,
aber der ist in Klingonisch geschrieben und nur mit
Klingonen-Zeichensatz auf dem PC lesbar

Autor: zugvogel1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry habe ich vergessen zu schreiben.

es ist ein Pic-12F683

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich spreche kein PIC, daher sind meine Vorschläge nur theoretisch und in
"Pidgin-Programmiersprache" formuliert:

"lese welches bit in aaa gemeint ist "

>>> "irgendwo" (in einem register? von einem Port abgegriffen?) wird
ja deine Bitfolge   1110daaa  herkommen. Das nimmst du erst mal und
machst eine AND-Verknüpfung mit 00000111, um alles überflüssige
"wegzuknipsen". Das Ergebniss ist 00000aaa, mithin die Bitposition
von bbbbbbbb die du prüfen möchtest


"dann schaue in d ob das der wert 0 oder 1 "

>>> "irgendwo" (in einem register? von einem Port abgegriffen?) wird
ja deine Bitfolge   1110daaa  herkommen. Das nimmst du erst mal und
machst eine AND-Verknüpfung mit 00001000, um alles überflüssige
"wegzuknipsen". Das Ergebniss ist 0000d000, mithin dein Prüfbit. Der
Wert ist entweder NULL wenn d=0, oder NICHT NULL wenn d=1 gesetzt war.


"und nun gehe an das Bit in bbbbbbbb"

>>> du weißt, daß du das aaa-te bit in dieser bitfolge benötigst. Was
du nun machst ist Prozessor-abhängig.

a) du "schiebst" dieses Datenwort durch ein geegnetes Register
hindurch, wobei gleichzeitig das herausfallende bit im Carry-bit
aufgefangen wird. Dann kannst du abhängig vom Zustand des Carry-bit
sprungmarke_0 oder sprungmarke_1 anhopsen, und dort weiter machen
oder

b) du nimmst ein leeres Initialbitmuster 00000001 und schiebst es um
aaa Stellen nach links, dann hüpft die 1 um 1 Stelle weiter bis zur
benötigten Bitposition. Anschließend machst du eine AND-Verknüpfung mit
bbbbbbbb, so daß als Ergebniss raus kommt (angenommen, aaa=3-> )

bbbbbbbb
00001000
=========
0000b000

Damit hättest du halt auch dein betreffendes b-Bit isoliert



"und vergleiche auch den Wert d also ob 0 oder 1 ist."

mit den vorherigen Operationen hast du beide Informationen isoliert:
"d" und das relevante "b". Die vergleichst du nun noch ein bischen
miteinander, und abhängig vom ergebniss hüpfts du nach "tue_dies"
oder tue_jenes"



So, jetzt zeig mir, daß man das auch in PIC programmieren kann.

Autor: zugvogel1 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo
hast du das so gemeint????

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hattu schön gemacht - da ich ja kein PIC spreche muß jemand anderes
beurteilen ob das ein funktionsfähiger code ist.

Aber es freut mich daß mein Hinweis dir scheinbar helfen konnte

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, ich spreche auch kein PIC, kann den Quellcode deshalb nicht
überprüfen.

ABER:

Im Kommentar steht:

;Vergleich das Bit aaa mit den Wert d aus der CV bb
;D2         D3         D4        ;011110bb  bbbbbbbb  1110daaa


Nun: 'aaa' sind ja nur drei Bits, kann also nur einen Wert von 0 bis
7 annehmen, also 8 verschiedene Positionen.

Aber laut Kommentar hast Du keine 8 'b'-Bits, sondern insgesammt 10
'b' Bits. Denn in D2 sollen ja die ersten zwei 'b' stehen und dann
in D3 die nächsten 8 Stück.

Dass sieht mir so aus, als ob da irgendwas faul wäre...

Autor: zugvogel1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Ja das ist schon so richtig alles denn beim vergleichen reicht es
d3 zu vergleichen.
die anderen zwei b können vernachlässigt werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.