www.mikrocontroller.net

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


Autor: Dany (Gast)
Datum:
Angehängte Dateien:

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

Autor: Michael U. (Gast)
Datum:

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

Autor: Dany (Gast)
Datum:

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

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.