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
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
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
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.
Alle anweisungen denen ein # vorangestellt ist sind nur zur assemblierungszeit wichtig, danach sind sie weg
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.