www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit mov Befehl


Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhardt (Gast)
Datum:

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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thomas, wie macht man das?

Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mul gibts, aber wie sieht dann der Befehlssatz aus?

Autor: Christian Zietz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, Avusgalaxy

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und mul gibts beim 2313 nicht

...

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Peter, genau das habe ich gemeint und gesucht.

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das brauche ich, danke crazy horse. Dadurch spare ich mir 8
Register.

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.