Hallo,
habe mir ein Programm geschrieben, welches 10 Werte über einen Taster
abfrägt und im EEProm speichert.
Ist der Taster gedrückt wird 0xFF gespeichert, ist er nicht gedrückt
0x00.
Nachdem 10 Messwerte aufgenommen wurden sollen diese wieder über eine
LED ausgegeben werden.
0xFF = LED_an und 0x00=LED_aus
Hier ist der ProgrammCode
Mein Problem ist, dass beide Routinen, also das Erfassen der Messwerte
und speichern im EEPROM, als auch die Ausgabe über die Led EINZELN
funktionieren. Das Programm das beides macht funktioniert nicht.
Die Werte werden dann zwar aufgenommen und gespeichert aber die Ausgabe
funktioniert nicht.
Ich vermute das mein Fehler irgendwo dort liegt wo ich den ZPointer noch
mal auf das Daten-Label setzte.
Ich denke mal, du hast dich selbst mit diesen vielen Sprüngen verwirrt.
Sowas nennt man Spaghetticode, wenn da einen Haufen Sprünge kreuz und
quer durch das Programm führen und Spaghetticode wird zu Recht verpönt.
Jetzt weißt du auch warum
Zu deinem Problem:
...
Main3:
adiw ZL,1 ; Zeiger erhöhen
inc zaehler
cpi zaehler, 10
brne Main2 ; wenn ungleich, springen
Wenn der Zähler noch nicht bei 10 angelangt ist, gehts weiter bei Main2.
Was passiert dort?
Main2:
ldi ZL,low(daten) ; Zeiger zurücksetzen
ldi ZH,high(daten)
rcall EEPROM_read
Autsch, damit zeigt dein Z-Pointer immer an den Anfang des
Datenbereichs.
Das erhöhen war völlig für die Katz.
Oooops, das war dumm von mir. Bin noch Anfänger auf dem Gebiet, von
daher der verwirrte Code.
Das lustige an der ganzen Sache war das ich mir den Teil vom Code in dem
die Ausgabe erfolgt rauskopiert habe. Und genau die 2 Zeilen
Main2:
ldi ZL,low(daten) ; Zeiger zurücksetzen
ldi ZH,high(daten)
in die Submain verschoben hab.
Kein Wunder das dann die Ausgabe einzeln funktioniert hat xD
Danke