Forum: Mikrocontroller und Digitale Elektronik Probleme mit Assembler Code


von brooklyn (Gast)


Lesenswert?

Hallo!

Habe folgenden Assembler Code programmiert.

Es soll eine LED zum blinken gebracht werden. Irgendwie funktioniert das
Programm nicht.
Bin noch Anfänger und weiss einfach nicht weiter...

Hoffe ihr könnt mir den Assembler Code korrigieren!

Danke im Vorraus!


.include "8515def.ic"

ldi r 16, 255
out ddrc, r16
out portc, r16
Anfang:

cbf portc, pc0

ldi r23, 255
W1: ldi r21, 255
W2: ldi r21, 255
W3: dec r21
  brne W3
  dec r22
  brne w2
  dec r23
  brne W1

sbi portc, pc0

W1: ldi r21, 255
W2: ldi r21, 255
W3: dec r21
  brne W3
  dec r22
  brne w2
  dec r23
  brne W1

rjmp Anfang

von Karl heinz B. (kbucheg)


Lesenswert?

Ein Hinweis:
Im AVR-Studio gibt es einen wunderbaren Simulator.
Der Einstieg dazu läuft über den Menüpunkt 'Debug' / 'Start Debugging'

Der Simulator zeigt dir dann deinen simulierten µC mit all
seinen Registern. Mittels F10 bzw. F11 kannst du in Einzel-
schritten durch dein Programm durchgehen und in den simulierten
Registern sehen, was jede Anweisung bewirkt. Du kannst
auch mit der Maus eine Zeile markieren und mittels F9
einen Breakpoint dorthin setzen. Wenn du dann das Pgm
laufen lässt (mit F5) so führt der Simulator alle Befehle
aus, bis er auf einen Breakpoint trifft. Dann gibt er
die Kontrolle wieder zurück zu dir.

Du wirst noch viele Stunden mit diesem Debugger verbringen, wenn
du weiter in Assembler programmierst. Fang also besser gleich
damit an, dich mit dem Ding vertraut zu machen. Schau auch mal
ins Debug Menü. Der Simulator kann noch viel, viel mehr.

von brooklyn (Gast)


Lesenswert?

Hallo!

Also Problem ist behoben und es blinkt!

Wunderbar, danke.

Jetzt würde ich gerne ein Lauflicht, also alle LEDs nacheinander blinken 
lassen. Die Verzögerung kann ich ja erstmal manuell über die Zahlenwerte 
erreichen.

Aber wie "stricke" ich das jetzt zusammen? Was muss ich erweitern um ein 
Lauflicht hinzubekommen?

Gruß
und danke im Vorraus!

von Rolf Magnus (Gast)


Lesenswert?

Deinem Code fehlen sämtliche Kommentare. Außerdem enthält er jede Menge 
Tippfehler. Der Assembler sollte das so eigentlich gar nicht erst 
annehmen.

von Karl heinz B. (kbucheg)


Lesenswert?

> Was muss ich erweitern um ein
> Lauflicht hinzubekommen?

Du musst erst mal weg vom: die LED blinkt, indem
du direkt am Port ein Bit setzt, bzw. löscht.

Mal angenommen, du hättest ein Register: r17
In diesem Register ist 1 Bit gesetzt. Also so

   +---+---+---+---+---+---+---+---+
   | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
   +---+---+---+---+---+---+---+---+

Wenn du dieses Register am Port C ausgibst, leuchtet
eine LED, die an Position 0 (hoffe ich zumindest, das
hängt jetzt davon ab, wie deine LED verschaltet sind)

Jetzt schaust du dir mal den Befehle ROL bzw. LSL in der
Befehlsübersicht an. Die hast du dir doch von Atmel geholt,
oder nicht? Wenn nicht: Macht nichts, in Hilfe vom
AVR-Studio ist sie auch drinnen. Einfach F1 drücken.

Ein LSL zb. schiebt ein Register eine Stufe nach links.
Aus

   00000001

wird also

   00000010

wenn du das jetzt wieder am Port C ausgibst, was passiert dann?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wie wär´s mit: Lerne in aller Ruhe Assembler, benutze die 
Hilfefunktionen dazu im AVR-Studio und dann erklärt sich - im Verbund 
mit Probieren und Testen - der ganze Assembler-Kram fast von alleine. 
Das macht doch viel mehr Spaß, als alles zu erfragen und es dann 
vielleict nicht zu verstehen.

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.