Hi, habe folgenden Code erstellt, bin aber noch nicht fertig :-) (sieht man eigentlich). Ich will in pwm0 den Wert 0x05 laden, in pwm1 den Wert 0x05 mal 2. Wie kann ich das realisieren? mov pwm1, teil+teil hab ich auch schon probiert, geht aber nicht. Ist es überhaupt möglich? Gruß avusgalaxy .include "2313def.inc" .def pwm0 = R0 .def pwm1 = R1 .def teil = r19 ldi teil, 0x05 mov pwm0, teil mov pwm1, teil*2
wende das mal 2 nach der Zuweisung auf pwm1 an. Was du da schreibst kann der Assembler freilich nicht verstehen.
mov pwm0, teil mov pwm1, teil*2 mul pwm1, 2 weiss leider nicht ob es den befehl MUL / IMUL auch bei AVRs gibt. beim x86 heisst er jedenfalls mul/imul.
@avusgalaxy: Multiplikation mit zwei macht man sinnvollerweise mit einem Left-Shift um ein Bit: mov pwm1, teil lsl pwm1 Setzt natürlich voraus, dass teil*2 nicht zu groß ist, um in ein Byte zu passen. Christian
Der Assembler kann nur Konstanten berechnen. Es geht also nur so: .def pwm0 = R16 .def pwm1 = R17 .equ teil = 0x05 ldi pwm0, teil ldi pwm1, teil*2 Peter
Hab noch ein Problem: .equ teiler = 0x05 Wenn ich im nachhinein den Wert des Teilers im Programm ändern möchte (.equ teiler = 0x02), dann sagt er mir, das ich das Symbol schon einmal defeniert habe. Gibt es eine andere Möglichkeit, den Wert zu ändern?
.equ ergibt eine dauerhafte Zuweisung. Entweder in der .equ-Anweisung den Wert ändern. Oder, sollen verschiedene Werte benutzt werden, auch verschiedene Symbole benutzen .equ teiler1=0x05 .equ teiler2=0x02 Dann gibts es noch die .set-Anweisung (halte ich persönlich aber nicht allzuviel von, mir sind eindeutige Zuweisungen lieber. .set teiler=0x05 ldi r16, teiler .set teiler=0x02 ldi r17, teiler Wenn du nun teiler mehrfach umdefinierst, musst du höllisch aufpassen, welcher Wert im Assemblerlauf gerade aktuell ist.
Genau das brauche ich, danke crazy horse. Dadurch spare ich mir 8 Register.
Auwe, zu Früh gefreut... dimmen1 und dimmen2 bleiben immer 0x01 led1: ldi temp, dimmen1 add pwm1, temp cpi pwm1, dimmende brne led11 .set dimmen1 = 0xff rjmp led2 led11: cpi pwm1, dimmanfang brne led2 .set dimmen1 = 0x01 led2: ldi temp, dimmen2 add pwm2, temp cpi pwm2, dimmende brne led22 .set dimmen2 = 0xff rjmp led3 led22: cpi pwm2, dimmanfang brne led3 .set dimmen2 = 0x01 Da ist ja nichts falsch, oder?
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.