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
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.
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!
Deinem Code fehlen sämtliche Kommentare. Außerdem enthält er jede Menge Tippfehler. Der Assembler sollte das so eigentlich gar nicht erst annehmen.
> 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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.