Hallo,
Ich bin noch ein blutiger Anfänger was µC angeht und versuche gerade mit
einem Taster 2 Leds anzuschalten und mit einem Taster sie wieder
auszuschalten.
Das Einschalten funktioniert einwandfrei nur das Ausschalten nicht.
Kann mir jemand sagen was ich falsch gemacht habe?
Hilfen zur Selbsthilfe:
- was passiert, wenn die Taste "an" nicht gedrückt ist (Programmablauf)?
- wann gelangt der Prozessor in den Programmteil, wo die "aus"-Taste
abgefragt wird?
- Stichwort "maskieren"
PS: mit Zeilennummern könnte man auch gleich noch leichter einen Hint
auf das Fehlerchen posten (Z26/27+Z36/37, wenn ich mich nicht verzählt
habe)
Hallo,
kann sein das du beim Einlesen von PIND in aus: 0b11001000 bekommst,
weil die LEDs an sind und du das mit 0b00001000 (->8) vergleichst. bin
mir aber nicht sicher
Hi
Deine 'aus'-Schleife wird nur einmal nach der 'an'-Schleife ausgeführt.
Bemerkungen:
- es gibt den Befehl 'cpi' -> cpi r16,4
- mit in xx,PIND liest du auch den Status der anderen Portleitungen ein.
Um eine Abfrage zu machen musst du die Eingänge die dich interessieren
maskieren:
in r16,PIND
andi r16,0b00001100
cpi r16,4
...
- Woher kommt eigentlich dieses .def tmpxxx= rYY? Es macht weder das
Programm
übersichtlicher noch verhindert es ein versehentliches Überschreiben
dieser
Register. Wahrscheinlich diese C-Programmierer.
MfG Spess
Hallo,
Ich versteh zwar nicht genau was du mir sagen willst, aber ich
beantworte einfach mal deine Punkte soweit ich kann:
Wenn die Taste an nicht gedrückt wird bleibt das Prog in der
An-Schleife.
Wenn die Taste an gedrückt wurde gehen die LEDs an und das Prog hängt in
der Aus-Schleife.
Wenn die Taste aus gedrückt wurde sollen die LEDs ausgehen und das Prog
soll wieder in die An-Schleife gehen.
Wenn ich das Prog mit AVR-Studio simuliere funktioniert das auch so nur
nicht in realitas
Mit Z27 und Z37 meinst du doch die brne Befehle.
mit cp vergleiche ich doch die beiden Register (subtraktion), wenn beide
gleich sind wird Z-Flag=1 wenn nicht ist das Z-Flag=0. Wenn jetzt die
Taste nicht gedrückt wird, dann ist auch Z=0 und ich spring mit brne
zurück zu an bzw. aus, oder nicht ?
Also mit breq geht es gar nicht .
Grüße
Hi
Streich mal meine erste Zeile(nach Hi)
Aber, wenn du auf PORTD 0b11000000 ausgegeben hast, wirst du mit 'in
PIND' auch 0b1100xx00 einlesen. Wobei xx der Status deiner Tasten ist.
Und das ist auf jeden Fall >8. Selbst bei nicht gedrückter Taste.
Deshalb ist das 'andi ...' notwendig.
MfG Spess
Hallo,
Ja ich weiß das noch aus der µC-Vorlesung daß das wichtig sit mit SPH
und SPL
habe das auch immer standartmäßig dabei nur diemal habe ich wohl SPH
vergessen zu kopieren.
Grüße