Gast
#70918
Hallo! Habe ein Problem mit dem Eeprom. Ich habe da drin Werte gespeichert, die ausgelesen werden müssen. Die Werte sind jeweils 12bit gross, belegen also nicht ganze 2 Byte. Der Eeprom wird in mehrere Teile unterteilt, der AVR soll dann jeweils erkennen wo ein neuer Bereich beginnt, das ist wenn bei den geraden Adressen ein ein 1 im MSB steht. Beim Neustart wird zuerst überprüft, wieviele solcher Bereiche vorhanden sind. Es werden also einfach alle geraden Adressen im Eeprom abgeklappert um zusehen ob das MSB eins oder null ist. Wenn in einer geraden Adresse FF steht, bedeutet das, dass hier der beschriebene Teil fertig ist und nur noch FFs folgen. Nun mein Problem. Der folgende Code funktioniert im AVR nicht richtig. Beim Simulieren mit AVRStudio klappt das so wie ich das will, nur im AVR scheint er immer FF zu lesen und bricht die Suche deshalb schon nach der ersten Stelle ab. Hab ich einen Fehler gemacht? Ich verwende die Lese-Routine aus dem Tutorial und die funktioniert auch. Der Eeprom ist korrekt beschriben, ich erhalte beim Auslesen mit Ponypro dasselbe, das ich herein geschrieben habe. Hier nun der Code; start: ldi adressel,0x00 ldi adresseh,0x00 ldi prognr,0x00 suchen: rcall eeprom_read ldi temp2,0xff cp daten,temp2 ;falls FF dann speicher ab hier leer breq fertig_gesucht ldi temp2,0b10000000 and daten,temp2 tst daten breq weitersuchen inc prognr ;ein Bereich mehr gefunden weitersuchen: inc adressel ;adresse um zwei erhöhen brne kein_uebertrag inc adresseh kein_uebertrag: inc adressel brne kein_uebertrag2 inc adresseh kein_uebertrag2: rjmp suchen fertig_gesucht: Achja, verwende den AtMega 8 und habe am Anfang eine halbe Sekunde Pause, der Eeprom sollte also angelaufen sein... Danke für jede Hilfe!