Problem mit mov Befehl

Gast #139869
Lesenswert?

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
Gast #139874
Lesenswert?

@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
Gast #139879
Lesenswert?

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?
Gast #139880
Lesenswert?

.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.
Gast #139882
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren