Forum: Mikrocontroller und Digitale Elektronik CPI funktioniert nicht


von gast (Gast)


Lesenswert?

Hallo!!1

ich schreibe die werte des ADC´s in r17, und möchte sie mit eienr 
konstanten vergleichen. nur leider bringt mir das avr stuido beim 
simulieren fehlermeldungen:

"invalid register"
und
"Wrong number of operands"

hier noch der code:

vergleichen:
;ldi r16, 153
;cp r16, r17
cpi r17, 153
brlo kl12v ;kleiner 12V

;ldi r16, 184
;cp r16, r17
cpi r17, 184
brsh gr14V ;größer 14V

;ldi r16, 130
;cp r16, r17
cpi r17, 130
brlo kl11v ;kleiner 11V
ret


ich weiß nicht was ich falsch mache, vielleicht kann mir ja jemand 
helfen. danke und gruß

von Philipp B. (philipp_burch)


Lesenswert?

Hast du r17 irgendwie umdefiniert (.equ r17 = ...)? Ansonsten fällt mir 
da kein Fehler auf, das sollte eigentlich schon funktionieren.

von Otto (Gast)


Lesenswert?

Hallo,

ich nehme an, dass Du mit AVR arbeitest....."verträgt" der Assembler das 
SPACE nach dem Komma ?

Gruss Otto

von Michael U. (Gast)


Lesenswert?

Hallo,

Du solltest mal kären, in welcher Zeile der Fehler auftritt, in diesem 
Code-Ausschnitt gbt es jedenfalls keinen derartigen Fehler beim Build.

Gruß aus Berlin
Michael

von Spess53 (Gast)


Lesenswert?

Hi

Die Fehlerquelle lässt sich leicht durch anklicken der Fehlermeldung 
finden. Die Zahl in der Klammer bezeichnet übrigens die Zeilennummer.

MfG Spess

von gast (Gast)


Lesenswert?

Hallo!!!

Vielen Dank erstmal für die antwoten
ja, ich arbeite mit avr, dem mega8.
die fehlermeldungen "invalid register" sind in den zeilen mit dem cpi 
befehl.
wenn ich es jedcoh nach der ausgeklammerten version mache, also erst die 
konstante in ein register schreiben und dann vergleichen, funktioniert 
es tadellos. aber mit der methode habe ich eben 6 takte/wörter mehr 
verbraucht .

die fehlermeldung "wrong number of operands" kommt jedoch in diesem 
block:

kl11v:
ldi r16, 0b00000000
out PORTB, r16
ldi r16, 0b00000010       ; LED einschalten
out PORTD, r16     <------------- in dieser zeile ist die fehlermeldung
ret


ich weiß leider auch nicht welche probleme der hat, aber für mich sieht 
alles io. aus. ich werde noch ein bisschen rumprobieren...

von gast (Gast)


Lesenswert?

nochmal ich.

habe das avr studio nun nochmal neu gestartet, und es scheint zu 
funktionieren....

danke nochmal an alle.

von Spess53 (Gast)


Lesenswert?

Hi

In deinem Code kann ich im Moment keinen Fehler erkennen. Das AVR-Studio 
hat allerdings die Eigenschaft manchmal nach dem eigentlichen Fehler 
noch weitere Fehlermeldungen zu erzeugen, obwohl der Code ok ist.
Hast du die richtige Includedatei 'm8def.inc' eingebunden?

MfG Spess

von gast (Gast)


Lesenswert?

Hallo!!!

ja hatte ich, war auch alles ok soweit.
programm hat nach dem neustart vom avr studio funktioniert und kann nun 
simulieren, keine ahnung was da los war...

von Christoph Wagner (Gast)


Lesenswert?

schau dir deine Zeilen nochmal genau an.

in allen 3 Beispielen oben hast du zwischen cp und cpi die parameter 
vertauscht.

cp r16,17 ist nunmal etwas anderes als cpi r17,[r16]


verdrehst du die Parameter, musst du auch die Sprunglogik umkehren.

statt brsh <-> brlo
statt breq <-> brne
statt brcs <-> brcc

...

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.