Hi, ich benutze den AT98C51ED2 von Atmel. Dieser hat ein 2kB EEPROM, welches ich gerne nutzen möchte. :) Aus der Manual werde ich einfach nicht schlau (als Anlage beigefügt). Ich check es einfach nicht! Kann mir bitte einer erklären, wie ich in das EEPROM schreibe, auslese? Wäre echt super! Danke im Voraus. liebevoll .. Sebastian Barth
hi, ich hab das gleiche problem wie du. versuch das ganze in c hinzubekommen. wenn du schon irgendetwas hast was funktioniert (egal ob assembler, basecom) koenntest des ja posten oder mir schicken. werds selber auch weiter probieren und dann hier posten (wenns laeuft) sash
Im Turorial auf deiser Seite ist doch beschrieben wie man aufs EEProm zugreift...
ja fuer den avr, aber nicht fuer den 89c51ed2 (8051er). das datenblatt versteh ich ja soweit, nur das dptr is nicht direkt vorhanden. dafuer zwar des dpl und dph. aber soweit komm ich eigentlich gar nicht weill mein eeprom anscheinend sehr beschaeftigt ist, auch wenn ich alle interrupts deaktiviere. auch wenn ich die abfrage uebergehe, ob das busyflag gesetzt is, funktionierts net. sash
Da gibt es doch nicht so viel zu kapieren. Seite 91 bis 94 anschauen. Die Flussdiagramme sagen doch alles. Schreib doch mal was nicht funktioniert, oder was Du am Flussdiagramm nicht verstehst. Michael
hier mal kurz mein ansatz: void write (unsigned int adresse, unsigned char wert) { EA = 0; while (EECON =! 0) {;} // warten eebusy = 0 DPL = adresse; EECON = 0x02; DPL = wert; EECON = 0x00; EA = 1; } unsigned char read (unsigned int adresse) { EA = 0; while (EECON =! 0) {;} DPL = adresse; EECON = 0x02; wert = DPL; EECON = 0x00; EA = 1; return (wert); } hatte es anstatt mit while (eecon != 0) auch mit eebusy probiert, wobei ich eebusy so festgelegt hab: Sbit (EEBUSY , 0xD2, 0) blieb dann aber immer in der while schleife haengen. hab se dann einfach ganz rausgenommen, klappt aber trotzdem nicht sash
while (EECON =! 0) // Falsche Syntax while (EECON != 0);// Ist richtig cli(); // Interrupts sperren Dann als Assembler... out EEAR, address ; EEPROM-Adresse sbi EECR, EERE ; Lesevorgang starten in data, EEDR ; gelesenes Byte nach "data" sei(); // Interrupts freigeben Michael PS: Ist aus dem Tutorial von dieser Seite
Der EEPROM wird in den XDATA-Space gemappt, unter C also die Adresse zu einem xdata-Pointer casten und dann einfach das Byte reinschreiben und dann warten bis das Schreiben beendet ist, das nächste Byte usw. Bzw. in Assembler:
1 | mov eecon, #002h |
2 | mov dptr, #Adresse |
3 | mov a, #Daten |
4 | movx a, @dptr |
5 | busy: |
6 | mov a, eecon |
7 | jb acc.0, busy |
8 | mov eecon, #000h |
Peter
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.