doppelte Endlosschleife?

Gast #936942
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
Gast
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
Gast
Die loop1 und loop2 sind keine Endlosschleifen, sondern Warteschleifen.
Die warten, bis ein Taster gedrückt ist.....
1
.include "m8515def.inc"
2

3
ldi r16, 0b11111111
4
out DDRB, r16
5

6
ldi r16, 0b00000000
7
out DDRD, r16
8

9
ldi r16, 0xFF
10
out PORTB, r16
11

12
loop1: sbic PIND, 0
13
rjmp loop1
14

15
cbi PORTB, 3
16
cbi PORTB, 1
17
cbi PORTB, 5
18
cbi PORTB, 7
19

20
loop2: sbic PIND, 1
21
rjmp loop2
22

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

26
cbi PORTB, 4     ; dann die led 3 an
27

28
ende: rjmp ende
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
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...
Gast
>Nun schafft er eine Endlosschleife in 10 Sekunden... ;-))

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.