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


von Mike (Gast)


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

von Peter D. (peda)


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

von Mike (Gast)


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

von Tobi (Gast)


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.

von Achim (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

Danke!!

Gruß Mike

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.