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
Beim Schreiben darf nichts dazwischenfunken (Interrupts) und die Brown-Out-Detection muss aktiviert sein. Schreib- und Leseroutinen sind hier zu finden. Gruss Otto
Danke, ich habs mal abkopiert und umgeschrieben, ich verstehs zwar leider immer noch nicht aber es funzt ^^
ach es geht doch noch nicht ;_; vllt kann mir jemand mal schreiben was ich schreiben muss damit ein register gespeichert wird, bei mir wird irgentwie keine datei erzeugt die es speichert
Hi
>ach es geht doch noch nicht ;_; vllt kann mir jemand mal schreiben was
Zeig doch mal, was du hast.
MfG Spess
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
;_;
"ramend" ist nicht die richtige Adresse ! (dient nur zur initialisierung des Stack!) Otto
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
>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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.