Register in EEPROM speichern 8515

OP #1328450
Lesenswert?
• ▲
▼
Hallo,
ich hab mir schon ein paar Beiträge angesehen. Leider hab ich immer noch 
nicht
verstanden wie ich die Werte eines Registers ins EEPROM lade und beim 
Neustart wieder auslese.
Vllt kann mir jemand helfen. Ich habs so verstanden dass ich wenn ich 2 
register hab einfach 2 adressen einlese und dann die Werte an EEDR 
übergebe....
klappt aber leider nicht
Gast #1330362
Lesenswert?
• ▲
▼
ich hab das hier mal probiert:
.include "8515def.inc"

main:
    ;TEST

    ldi r16,low(ramend)
    out SPL, r16
    ldi r16,high(ramend)
    out sph,r16
    rcall eplesen
    ldi r17, 0xFF
    push r17
    ldi r17, 0xF0
    out portd, r17
    pop r17
    out portb, r17
    rcall epschreiben
    rjmp main

epschreiben:cli
      push r17
      ldi r17,low(ramend)
      out EEARL, r17;(1)
      ldi r17, high(ramend)
      out EEARH, r17(1)
      cbi EECR,EEWE
      out EEDR,r17(2)
      sei
      ret

eplesen:  cli
      ldi r17,low(ramend)
      out EEARL, r17
      ldi r17, high(ramend)
      out EEARH, r17
      cbi EECR,EEWE
      in r17,EEDR
      sei
      out Porta, r17
      ret
hab alle interrupts ausgeschaltet, ich habs mal so verstanden dass man 
hier bei (1) einfach die adresse übergibt und dann bei (2) den wert. 
Beim lesen hab ichs halt umgekehrt gemacht. vllt is das ne saudumme 
frage und ich habs wirklich net drauf ^^ aber unser professor hat mit 
uns noch nie programmiert und alle seine beispielprogramme laufen nicht 
;_;
Gast #1330393
Lesenswert?
• ▲
▼
Hi

1. Lass die Finger von 'ramend' (ausser bei der Stackinitialisierung). 
Wenn du dort etwas manipulierst wird das unweigerlich zu 
Programmabstürzen führen.

2.'ramend' zu EEPROM-Adressierung zu verwenden ist unsinnig, da RAM und 
EEPROM unterschiedliche Grösse haben können. Beim 8515 ausnahmsweise 
gleich.

3. 16-Bit Register (EEAR) werden in der Reihenfolge H-Register, 
L-Register beschtrieben.

4. Wenn du Speicher im EEPROM benutzen willst, dann besser so:

    .eseg

blabla:        .byte 1  (reseviert 1 Byte im EEPROM)

    . cseg

Programm

Zugriff mit:
      ....
      ldi r17,low(blabla)
      out EEARH, r17
      ldi r17, high(blabla)
      out EEARL, r17
      ....

MfG Spess
#1330423
Lesenswert?
• ▲
▼
>2.'ramend' zu EEPROM-Adressierung zu verwenden ist unsinnig, da RAM und
>EEPROM unterschiedliche Grösse haben können. Beim 8515 ausnahmsweise
>gleich.

'RAMEND' und 'EEPROMEND" (so vorhanden) sind aber auch bei gleichgroßem 
RAM und EEPROM unterschiedlich - die Register und die IO-Adressen liegen 
ja im RAM, werden aber nicht bei der Größe mitgerechnet.

/klugscheiß
, Jörg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren