Hallo ich siche einen befehl im AVR-Assembler, mit dem ich ganze register auf einen bestimmten inhalt prüfen kann und dementsprechend ragieren kann, also z.b. wenn r16 gerade 0b01011010 hat, dann z.B. der nächste befehö übersprungen werden. wenn nicht, dann wird nicht gesprungen. WIe kann ich, wenn die Zahl 2 8bit register benötigt überprüfen? Gibt es da einen extra befehl? oder muss ich einfach beide einzeln überprüfen?
Wie wärs mit einem Vergleich und anschließendem bedingten Sprung? Oder Wert abziehen und Sprung falls Null? Wenn du zwei Register überprüfen willst, musst du (soweit ich weiss) beide nacheinander testen. Gruss
Guckst du hier http://www.avr-asm-tutorial.net/avr_de/beginner/commands.html#Functions CPI wäre eventuell nett um Register mit Konstante zu vergleichen.
ok, dasist gut, vielen dank, aber eine frage bekam ich beim testen ich hab bei einem älteren projekt gesehen, da wollte ich die interne taktfrequens vom mega8 eintellen. und habe dafür die bits CKSEL0, CKSEL1, CKSEL0 und CKSEL3 geändert, aber das alles mit dem befehl cpi, also so: cbi CKSEL0, 0 cbi CKSEL1, 0 cbi CKSEL2, 1 cbi CKSEL3, 0 und das hat auch funktioniert, ibwohl ich doch nur das bit CKSEL0 mit der Konstanten 0 vergleichen habe, oder?
wenn es nur ein Bit zum vergleichen geht dann sbrc r16,7 ;skip if bit in register is cleared rjmp bla ;if bit 7 in r16 is cleared this will be skiped mov..... ;lala ansonsten cpi r16,0xf0 ;compare breq lala ; if true jump ;else do this ... grüüße
@Lukas: Am Ende des Datenblatts befinden sich zwei Tabellen. Eine listet den Befehlssatz auf, die andere die I/O-Adressen. Beide solltest Du Dir als Arbeitsunterlage (Handzettel) ausdrucken. Weiterführende Informationen zu den Befehlen gibt es dann in der Hilfe zum AVR-Studio. Dazu einfach Befehl eintippen, Cursor draufstellen, F1-Taste drücken, lesen, verstehen. ...
Bitte beachte, dass cbi NICHT cpi ist! cbi = clear bit in I/O-Register cpi = compare immediate
Die myAVR-Referenzkarte ist auch optimal als Befehlreferenz geeignet: http://www.myavr.de/download/myavr_referenzkarte_15.pdf Das Teil hab ich mir ausgedruckt und laminiert.... was besseres gibts nicht. Gruß, SIGINT
Oh ha, da aber ich wohl zu schnell geschaut! Vieln dank für die gute und schnelle hilfe! Jetzt sollte es klappen! Vielen Dank!
>wollte ich die interne taktfrequens vom mega8 eintellen. >--------- cbi CKSEL0, 0 cbi CKSEL1, 0 cbi CKSEL2, 1 cbi CKSEL3, 0 >--------- CKSELx klingt nach Fusebits, geht das überhaupt aus dem laufenden Programm heraus??
> geht das überhaupt aus dem laufenden Programm heraus??
Nein, natürlich nicht. Und wenn es ginge, dann wäre die Syntax falsch.
@Lukas:
1.: Die Taktquelle lässt sich nicht aus dem Programm heraus ändern.
2.: Versuch mal, die Beschreibung der Befehle im Tut und in der Hilfe zu
verstehen. Und nicht nur die Befehle, sondern auch den Unterschied
zwischen Registern, Bits und Fusebits...
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? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.