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.