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