Ziel war es den einzelnen Speicherzellen des Registers Labels zuzuordnen die ich dann später im Programm direkt ansprechen kann. Ungefähr so wie bei 8051 der bitadressierbare Bereich.
Leider klappt es nicht so wie ich es mir vorgestellt habe. Wo ist mein Denkfehler?
Jetzt kann man mit SBR und CBR Bits setzen und löschen:
SBR temp, rs_recv CBR temp, rs_recv
Bei diesen Befehlen hat der zweite Parameter die Funktion einer Maske, d.h. alle Bits die in der Konstante gesetzt sind, werden im Register gelöscht/gesetzt. Also löscht
ja das dachte ich mir. Das ist das Problem an meiner Idee: Die EQUs enthalten potenzierte Werte und keine Bit-Nummern, aber SBRS & Co. verlangen Bit-Nummern. Das solltest Du zwei EQUs pro Bit machen, einen mit der Nummer und einen Potenzierten.
Mit diesen Definitionen funktioniert der sbrs-Befehl ohne weiteres. Beim Setzen oder Loeschen von Bits im Register muss man im Hinterkopf haben, dass der Befehl sbr das gleiche macht (und logischerweise den gleichen Opcode liefert) wie der Befehl ori. Hierbei kann man natuerlich gleichzeitig mehrere Bits setzen. Das sieht dann so aus:
Vielen Dank Euch allen für die Hilfe. Jetzt funktionierts.
Damit hat es jetzt funktioniert, und noch besser, ich habe es verstanden. Jetzt wo es funktioniert werde ich auch die anderen Lösungsvorschläge ausprobieren.
Bit 8 (int_Rx_Ready) ist in Register r15=0x04 (a_flag) nicht gesetzt, daher ist sbrs -> no skip. Es wird rjmp ausgefuehrt. Hmm, eigentlich sollte es eine Compiler-Warnung bei Bit 8 geben.
Du solltest die Bitnummnern verwenden.
Sonst empfehle ich (aehnlich wie Mathias Weierganz) die Befehle CBR (intern wie ANDI) und SBR (intern wie ORI) und Bitmasken (1
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.