Forum: Mikrocontroller und Digitale Elektronik Befehl gesucht


von Lukas -. (lukas)


Lesenswert?

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?

von oder hier (Gast)


Lesenswert?

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

von oder hier (Gast)


Lesenswert?

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.

von Lukas -. (lukas)


Lesenswert?

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?

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

@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.

...

von bla (Gast)


Lesenswert?

Bitte beachte, dass cbi NICHT cpi ist!

cbi = clear bit in I/O-Register
cpi = compare immediate

von SIGINT112 (Gast)


Lesenswert?

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

von Lukas (Gast)


Lesenswert?

Oh ha, da aber ich wohl zu schnell geschaut! Vieln dank für die gute und 
schnelle hilfe! Jetzt sollte es klappen! Vielen Dank!

von Axel R. (Gast)


Lesenswert?

>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??

von johnny.m (Gast)


Lesenswert?

> 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...

von Axel R. (Gast)


Lesenswert?

Ich hatte meinen Post absichtlich als Frage ausformuliert...

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
Noch kein Account? Hier anmelden.