EEProm screiben und lesen

Gast #8016
;========================================
;=  R20 -> Adresse      =
;=  R21 -> Daten      =
;========================================

;----EEPROM-Daten lesen-----------------
eeprom_read:  out  EEAR, r20  ;EEPROM Adresse setzen
    sbi  EECR, 0    ;EEPROM lesen-Bit setzen
eeprom_r_wait:  sbic  EECR, 0    ;Bit wieder gelöscht?
    rjmp  eeprom_r_wait  ;nein
    in  r21, EEDR
    ret
;---------------------------------------

;----EEPROM-Daten schreiben-------------
eeprom_write:  sbic  EECR, 1
    rjmp  eeprom_write
    out  EEAR, r20  ;EEPROM Adresse setzen
    out  EEDR, r21  ;Daten
    sbi  EECR, 2    ;EEPROM MasterWriteEnable
    sbi  EECR, 1    ;EEPROM WriteEnable
eeprom_w_wait:  sbic  EECR, 1
    rjmp  eeprom_w_wait
    ret
;---------------------------------------

Danke an Steffen
Admin Persönliche Seite #8019
Das Warten auf den Reset von EECR, 0 kann man sich laut Datenblatt 
sparen. Stattdessen sollte lieber geprüft werden, ob ein möglicherweise 
vorhergehender Schreibvorgang schon abgeschlossen wurde.
Und beim Schreiben würde es auch mehr Sinn machen am Anfang zu prüfen ob 
das EEPROM bereit ist, da das Programm NACH dem schreiben ja ruhig 
weiterlaufen kann, auch wenn der Schreibvorgang noch läuft.

MfG
Andreas
Gast #8020
Hallo,

ich programmiere noch nicht lange ASM, und genau dieses Prog habe ich 
gesucht.
Ich habe es versucht für meinen 8515 umzuschreiben, es tut bei mir ohne 
Probleme.

Vielleicht hat ja jemand interesse daran.

Vielen Dank an Steffen.

MfG

Heye-Tammo
Angehängte Dateien:
Gast #8021
Hier noch die passende ASM Datei. Wieder für den 8515, bzw für AVRs mit 
16Bit Stack und Zeigern

Am besten bei debuggen irgendetwas (Möglichst nicht nur 0x00) in den 
EEPROM schreiben, damit man was sieht.
Angehängte Dateien:
Gast #496292
Hallo,

ich habe da irgendwie ein komisches Problem beim Arbeiten mit dem EEPROM 
im Mega162:

Am Ende des Listings habe ich folgendes zu stehen:
.eseg
text:
.db "Hallo!",0

Die Adressen werden korrekt in die EEARL/H geschrieben aber trotzdem 
landet nach einem sbi EECR,EERE immer nur 0xFF im EEDR.
Der EEPROM-Bereich ist korrekt beschrieben, wie ich nach einem Auslesen 
durch die ISP-Software festgestellt habe.

Hat jemand einen Tipp?

Gruß Max
Gast #496451
Kleiner Tip. Um bösen Überaschungen vorzubeugen sollte man für die 
Schreibsequenz die Interrupts sperren. Also

;----EEPROM-Daten schreiben-------------
eeprom_write:  sbic  EECR, 1
    rjmp  eeprom_write
    out  EEAR, r20  ;EEPROM Adresse setzen
    out  EEDR, r21  ;Daten
    in   r16,sreg   ; SREG sichern
    cli             ; Interrupts garantiert ausschalten
    sbi  EECR, 2    ;EEPROM MasterWriteEnable
    sbi  EECR, 1    ;EEPROM WriteEnable
    out sreg,r16    ; SREG wieder herstellen, mit oder ohne I Bit
eeprom_w_wait:  sbic  EECR, 1
    rjmp  eeprom_w_wait
    ret
;---------------------------------------

MFG
Falk
Gast #496625
(Noch) benutze ich ja keine Interrupts.

In dem Handbuch vom Mega162 steht, dass der interne Oszillator für das 
Timing des EEPROMs verwendet wird. Ich takte den Prozessor aber mit 
einem externen Clock. Ist das ein Problem?

Gruß Max

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 24 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.