www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik doppelte Endlosschleife?


Autor: Aaron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich schau mir eben das AVR-Tutorial an und habe ein Programm getestet, 
das beim drücken des ersten Tasters die 2., 4., 6. und 8. LED leuchten 
lässt.
Nun wollte ich es etwas modifizieren, so dass das Programm danach noch 
weiter läuft, und man, wenn man nun den Taster 2 drückt, die 3. LED 
leuchtet.

Warum funktioniert das folgende Programm nicht?


.include "m8515def.inc"

ldi r16, 0b11111111
out DDRB, r16

ldi r16, 0b00000000
out DDRD, r16

ldi r16, 0xFF
out PORTB, r16

loop: sbic PIND, 0
rjmp loop

cbi PORTB, 3
cbi PORTB, 1
cbi PORTB, 5
cbi PORTB, 7

loop: sbic PIND, 1
rjmp loop

cbi PORTB, 4

ende: rjmp ende

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

na welche Fehlermeldung bekommst Du denn wohl vom Assembler? :)

PS: Dein Programm hat nur eine Endlosschleife:
ende: rjmp ende

Wäre sonst ja auch ziemlich sinnlos.

Gruß aus Berlin
Michael

Autor: Aaron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doppeltes loop, schon klar

aber wie soll ich es sonst machen? Kann mir nicht vorstellen, dass man 
in einem assemblerprogramm nur eine endlosschleife verwenden kann

Autor: Vorname Nachname (logout-name)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast zwei mal das gleiche Label, das geht nicht (sollte mindestens 
eine Warnung geben?!)

Autor: Vorname Nachname (logout-name)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuuuuuu spääät

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die loop1 und loop2 sind keine Endlosschleifen, sondern Warteschleifen.
Die warten, bis ein Taster gedrückt ist.....
.include "m8515def.inc"

ldi r16, 0b11111111
out DDRB, r16

ldi r16, 0b00000000
out DDRD, r16

ldi r16, 0xFF
out PORTB, r16

loop1: sbic PIND, 0
rjmp loop1

cbi PORTB, 3
cbi PORTB, 1
cbi PORTB, 5
cbi PORTB, 7

loop2: sbic PIND, 1
rjmp loop2

ldi r16, 0xFF    ; erst mal alle led aus
out PORTB, r16

cbi PORTB, 4     ; dann die led 3 an

ende: rjmp ende

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

naja, ich hatte es nur nicht korrigiert, weil ich so dacht, er bemerkt 
die Fehlermeldung und tauft eins der Label selbst um...

PS: ich habe meinen AVR jetzt übertaktet.
Nun schafft er eine Endlosschleife in 10 Sekunden... ;-))

Gruß aus Berlin
Michael

Autor: Sepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dichtmaster!

Autor: Daniel F. (df311)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für die loops (warteschleifen) musst du eine abbruchbedingung einbauen.
im moment hast du insgesamt drei endlosschleifen (loop1, loop2, ende), 
wobei es schon aus der ersten kein "entkommen" gibt.

als tipp nenne ich die sbis/sbic (bzw. sbrs/sbrc) befehle. wenn du diese 
passend in die warteschleifen einbaust, kannst du diese ganz einfach 
beenden...

Autor: Vorname Nachname (logout-name)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Daniel F. (df311): Lesen ist nicht jedermanns Stärke

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nun schafft er eine Endlosschleife in 10 Sekunden... ;-))

Das geht aber nur mit der undokumentierten H7P3RSP33D Fuse, oder ;-)

Autor: mitwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nun schafft er eine Endlosschleife in 10 Sekunden... ;-))

Ich hab' mein PC übertaktet... Der wartet jetzt viel schneller auf 
Tastatureingaben.

Autor: Aaron (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke lkmiller. :-)

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.