Prog.problem mit 90

Gast #263806
Lesenswert?

hallo leute!

hab ein kleines prog.problme mit meinem stk500:

wollte mit 2 schaltern (sw0 und sw1) die zugehörigen LED´s einschalten
und diese sollten nach kurzer zeit wieder automatisch ausgehen.

aber ich bekomm das nicht hin.

zur verzögerung hab ich R1 verwendet.

wer kann mir helfenß

mfg.
Robert
Angehängte Dateien:
#263808
Lesenswert?

rcall erfordert ein ret. Wenn man vorher mit rjmp zu einer anderen Marke
springt, gibt es irgendwann einen Stack-Überlauf.
DDRx = 0 (clr LED) macht PORTx zu einem Eingang.
Den hast du aber für die Taster nicht eingestellt. Vielleicht auch noch
die internen Pull-Up-Widerstände aktivieren.

Dann solltest du das "rjmp Beginn" vielleicht lieber vor die
LED-Label setzen.

Und nicht zu Beginn springen, sondern zu "Taster1:".
Entprellt wird dein Tastendruck auch nicht.

Vielleicht solltest du dir vorm Programmieren mal einen Plan (auch
Struktogramm genannt) machen, um dir die Funktion des Programms
bildlich darzustellen.
#263809
Lesenswert?

Da sind mehrere Sachen im Argen:

R1 ist 8 Bit breit, d.h. die Verzögerung ist gerade mal 768 Takte und
entspricht etwa 48µs bei 16MHz. Das kann kein Mensch sehen.
Für lange Verzögerungen ist eigentlich der Timer das optimale.


Vom Ablauf her ist das Programm wohl nicht das gewünschte. Du wartest
in  einem Programmteil auf das Ende einer Verzögerung und damit ist
solange die 2. Taste tot.

Üblich ist daher eine Hauptschleife, in der hintereinander Bedingungen
getestet werden und dann die gewünschten Aktionen ausgeführt werden.
D.h. auch wenn eine Bedingung noch nicht eingetroffen ist, wird
trotzdem zur Hauptschleife zurückgekehrt ohne die Aktion auszuführen.
Damit sind andere Programmteile nicht tot und es entsteht der Eindruck
das viele verschiedene Programme gleichzeizig laufen.


Ein Beispiel, was genau das macht, was Du willst:

http://www.mikrocontroller.net/forum/read-4-49709.html#new

Ist allerdings in C geschrieben und nicht so leicht zu verstehen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren