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
#1328504
Beim Schreiben darf nichts dazwischenfunken (Interrupts) und die Brown-Out-Detection muss aktiviert sein. Schreib- und Leseroutinen sind hier zu finden. Gruss Otto
Gast
#1328506
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
Gast
#1329657
Hi
>ach es geht doch noch nicht ;_; vllt kann mir jemand mal schreiben was
Zeig doch mal, was du hast.
MfG Spess
Gast
#1330362
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
#1330376
"ramend" ist nicht die richtige Adresse ! (dient nur zur initialisierung des Stack!) Otto
Gast
#1330393
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.