mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 'if' und 'else' im assembler?


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an Alle,

bin noch ziemlicher Neuling und habe "IF und ELSE" im Assembler
entdeckt. Mit diesen wollte ich dan auch gleich mal ausprobieren, ob
ich mit einm Schalter an PortD0 die LEDs an PortB2 und PortB3
umschalten kann.Leider funktioniert dies im nachfolgenden Code nicht.
Der Debugger zeigt mir zwar die 1 (in R16, bzw. PortD,1) an, das if
interressiert das aber nicht die Bohne.Wenn mir jemand meinen
Denkfehler aufzeigen kann wäre ich ihm sehr verbunden. Auch würde ich
gerne etwas mehr über diese Art der Assemblerprogrammierung erfahren,
aber wo? Dank schon mal im voraus.

Gruß
;***************************************
.include "m16def.inc"

.def  Temp     =r16    ;Temp Register

;Ausgabeport ist PORTB

ser  Temp
out  DDRb, Temp
com  Temp
out DDRD, Temp

main:

in temp,portd

#if temp==1

    sbi  portb,2
#else
    sbi  portb,3

#endif

end:
  rjmp main

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind doch nur Statements für die bedingte Assemblierung.
D.h. man kann damit nur Ausdrücke tesetn, die zur Assemblezeit bereits
bekannt ist.
Daher sollte er eigentlich meckern, wenn Du versuchst ein Register zu
testen.

Deine ifs must Du also selber mit CPI, BRNE usw. zusammenbasteln.


Peter

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

folgende Code ist direkt von ATMEL geschrieben.
Die übergebenen Argumente sind doch zu Assemblierungszeit auch noch
nicht bekannt, oder?
Nein, der Assembler hat keinen Fehler angezeigt beim letzten Code.

Gruß


.MACRO SETB     ;Arguments: Address, Bit, Register
  #if @1>7
    #error "Only values 0-7 allowed for Bit parameter"
  #endif
  #if  @0>0x3F
    lds  @2, @0
    sbr  @2, (1<<@1)
    sts  @0, @2
  #else
    #if @0>0x1F
      in  @2, @0
      sbr  @2, (1<<@1)
      out  @0, @2
    #else
      sbi  @0, @1
    #endif
  #endif
.ENDMACRO

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch, die werte sind bekannt - das sind die parameter die man dem makro
übergibt und die, die in den if's verwendet werden müssen(!)
konstanten sein.

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle anweisungen denen ein # vorangestellt ist sind nur zur
assemblierungszeit wichtig, danach sind sie weg

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!!

Gruß Mike

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.