Forum: Mikrocontroller und Digitale Elektronik Problem mit mov Befehl


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von avusgalaxy (Gast)


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

von Thomas Burkhardt (Gast)


Lesenswert?

wende das mal 2 nach der Zuweisung auf pwm1 an. Was du da schreibst
kann der Assembler freilich nicht verstehen.

von avusgalaxy (Gast)


Lesenswert?

Hi Thomas, wie macht man das?

von Axos (Gast)


Lesenswert?

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.

von avusgalaxy (Gast)


Lesenswert?

mul gibts, aber wie sieht dann der Befehlssatz aus?

von Christian Zietz (Gast)


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

von avusgalaxy (Gast)


Lesenswert?

Vielen Dank, Avusgalaxy

von ...HanneS... (Gast)


Lesenswert?

Und mul gibts beim 2313 nicht

...

von peter dannegger (Gast)


Lesenswert?

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

von avusgalaxy (Gast)


Lesenswert?

Vielen Dank Peter, genau das habe ich gemeint und gesucht.

von avusgalaxy (Gast)


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?

von crazy horse (Gast)


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.

von avusgalaxy (Gast)


Lesenswert?

Genau das brauche ich, danke crazy horse. Dadurch spare ich mir 8
Register.

von avusgalaxy (Gast)


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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.