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.