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
Lesezeichen