Forum: Mikrocontroller und Digitale Elektronik Erste Schritte beim Assembler programmieren (mit AVR Studio4


von Dany (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich bin neu auf dem gebiet Assembler programmieren und hätte da mal eine 
frage:
Verwendetes board: Avr STK200
µC: 908515

Habe versucht eine LED blinken zu lassen, hat aber irgendwie net 
funktioniert.
ich bekomm die warteschleife nicht richtig hin!!!
Im Anhang befindet sich mein Assembler programm.. was mach ich falsch 
bzw. wie kann ich unkompliziert eine warteschlefe einbauen?!?!?

Vielen Dank schonmal im vorraus

Gruß Dany

von Michael U. (Gast)


Lesenswert?

Hallo,

naj, Du hast Dir eine nette logische Falle eingebaut. :)

wait2:
  dec mp            mp -1
  brne wait2         zurück, wenn mp nicht 0 -> soweit ok
                            hier muß also wegen oben mp IMMER 0 sein.
  dec mp            und hier wird mp -1 = 0xFF
  brne wait2         und kann hier somit NIE 0 werden. ;)


Nimm 2 Register:
       ldi   temp1,100 -> Anzahl Durchläufe
       clr   temp2
loop:
       dec   temp2
       brne  loop

       dec   temp1
       brne  loop

Gruß aus Berlin
Michael

von Dany (Gast)


Lesenswert?

Hey, danke für die schnelle antwort!!!

Es funktioniert auf jeden fall, ich seh die leds blinken :D
Doch noch einige fragen:
Die LEDs blinken recht schnell, wie kann ich dies verlängern? (>Hz)

Quelltext:
; Test 1: LED soll mit einem Hz blinken

.NOLIST
.INCLUDE "8515def.inc"
.LIST

.DEF  temp1 = R16
.DEF    temp2 = R17

  rjmp main

main:
  ldi temp1,0b11111111  ;PortB wird als Ausgang definiert

  out DDRB,temp1    ;Ausgangsport wird definiert

loop:
  ldi temp1,0b01010101  ;Läd sofort einsen in R16 ein
  out PORTB,temp1           ;einsen werden an PortB ausgegeben , 
resultat LEDs leuchten nicht



;Hier folgt eine Warteschleife

       ldi   temp1,0xff    ;Anzahl Durchläufe (hab mal höchsten
                                     ;wert genommen)
       clr   temp2                  ;WARUM CLR ? was passiert mit dem R?
wait:
       dec   temp2
       brne  wait

       dec   temp1
       brne  wait




      ldi temp1,0b10101010  ;Läd sofort nullen in R16 ein
       out PORTB,temp1     ;nullen werden an PortB ausgegeben , resultat 
LEDs leuchten


;Hier folgt eine Warteschleife
     ldi   temp1,0xff      ;Anzahl Durchläufe
       clr   temp2
wait1:
       dec   temp2
       brne  wait1

       dec   temp1
       brne  wait1


     rjmp loop

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.