EEProm screiben und lesen

Gast #8016
Lesenswert?
• ▲
▼
;========================================
;=  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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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 #496292
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
(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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.