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.
Es soll folgendes passieren. Druck auf Taste PortB0 und der Inhalt des EEs soll gelesen werden. - das funktioniert.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
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:
Sicher liegt es nicht am Code, sondern daran, dass ich es nicht auf den ATMega8 umsetzen kann.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
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







Zitieren

Lesezeichen