Hi,
ja, das mit dem Zerschießen des EEProms habe ich mittlerweile kapiert.

In der Zwischenzeit habe ich diesen Code geschrieben. (Wie gesagt - ich habe fast noch 0 Ahnung.


Code:
.NOLIST
.include "m8def.inc"
.LIST

.DEF rTemp = R16
.DEF rT1 = R17
.DEF rP1=R18
.DEF rP2=R19

        ldi rTemp, LOW(RAMEND)	          ; Stackpointer initialisieren
        out SPL, rTemp
        ldi rTemp, HIGH(RAMEND)
        out SPH, rTemp



        ldi rTemp, 0xFF
        out DDRD, rTemp                     ; Port D: Ausgang
 
        

LDI rTemp, 0B11111111
OUT PORTD, rTemp

LOOP:
sbis PinB, 0							; Auf Tastendruck  abfragen
rCall READ								; EEProm lesen 
sbis PinB, 1							; Auf Tastendruck  abfragen
rCall SAVE								; EEPROM schreiben
sbis PinB, 2							; Auf Tastendruck  abfragen
rCall AddT1								; Zufällige Zahl ermitteln
rJmp Loop

AddT1:
inc rT1									; Zufallszahl einstellen
OUT PortD, rT1
RET


READ:
RCall EEPROMLesen
Mov rT1, rTemp
OUT PORTD, rTemp
Ret

SAVE:
MOV rTemp, rT1
rCall EEPROMSchreiben
rCall Pause
rCall Pause
RET


EEPROMLesen:
		ldi rTemp, HIGH(W1)             ; Adresse laden
        out EEARH, rTemp 
        ldi rTemp, LOW(W1)
        out EEARL, rTemp
        sbi EECR, EERE                  ; Lesevorgang aktivieren
        in rTemp, EEDR
		rCall Pause
RET

EEPROMSchreiben:

         ldi rTemp, HIGH(W1)	; High-Adresse im EEPROM laden
        out EEARH, rTemp		; und ins EEARH schreiben 
        ldi rTemp, LOW(W1)		; Low-Adresse im EEPROM laden
        out EEARL, rTemp		; und ins EEARL schreiben	                                   
        sbic EECR,EEWE			; Vorherigen Schreibvorgang abwarten                 
    	rjmp EEPROMSchreiben
		out EEDR,rTemp			; Daten ins EEPROM-Datenregister
	    sbi EECR,EEMWE			; Schreiben vorbereiten
	    sbi EECR,EEWE       
		rCall Pause
RET

Pause:
DEC rP1
brne Pause
DEC rP2
brne Pause
Ret

.eseg  ; EEPROM  
W1: 
.db 0B10101010
Es soll folgendes passieren. Druck auf Taste PortB0 und der Inhalt des EEs soll gelesen werden. - das funktioniert.

Druck auf Taste PortB2 wird aufgrund variabler Dauer ein zufälliger Wert im Register rT1 erzeugt - das funktioniert.

Druck auf Taste PortB1 soll nun den Inhalt des Registers rT1 an rTemp übergeben und im EE speichern. Das funktioniert nicht. Im EE steht nun nichts mehr. Kontrolle Taste0

Im EE habe ich aber die .eep geladen. Kontrolle Taste0 - Wert war anfangs da.


Wenn ich Deinen Code umsetzen will (ATMEGA, bekomme ich folgende Fehler:

E:\Assemb\S\TIMER\ATM8\Test2.asm(40): error: Undefined symbol: EEPE
E:\Assemb\S\TIMER\ATM8\Test2.asm(50): error: Undefined symbol: EEMPE
E:\Assemb\S\TIMER\ATM8\Test2.asm(51): error: Undefined symbol: EEPE
Sicher liegt es nicht am Code, sondern daran, dass ich es nicht auf den ATMega8 umsetzen kann.

Hast Du vielleicht ein funktionierendes Beispiel für den ATM8?

Das wäre super! Wie ich sehe, gehts Dir leicht von der Hand.

Ciao Lothar