Guten Abend,
ich wollte mal nachfragen ob es möglich ist beim 8051er während dem
Betrieb, also wenn das Programm ausgeführt wird Daten im Flash
abzuspeichern?
Ich benutze das uVision4 von Keil
Der Controller ist ein AT89S8253
Oder gibt es eine andere Möglichkeit, Daten die während dem Betrieb
erzeugt werden zu hinterlegen, das sie nach einem Neustart des Programms
noch vorhanden sind?
Ich bedanke mich schon mal für eure Antworten =)
Hey, danke für die schnelle Antwort, ja, mir gehts eigentlich direkt um
die Befehle.
Ich mache eine schulische Ausbildung zum Systemelektroniker und meine
Lehrer haben den EEPROM noch nie verwendet und können mir dazu keine
Hilfe geben, sie werden nicht mal aus dem Datenblatt schlau =/
Im Kapitel "6. Data Memory – EEPROM and RAM" vom Datenblatt stehen alle
notwendigen Infos. Unter "6.1 Memory Control Register" sind die Details
und in der Befehlsreferenz findest du die Erklärungen für die Funktion
von MOVX.
Einfach Werte an die entsprechende Stelle schreiben oder von da lesen.
Was für Werte musst du ablegen? Wie sehen diese aus?
Ja, ich habe gegoogelt, jedoch finde ich nicht das Richtige, ich kann
zwar den RAM beschreiben, der jedoch flüchtig ist und wie es im
Datenblatt beschrieben ist, habe ich es mit movx versucht, er speichert
den Wert nicht…
Ich möchte einen 8stelligen Binärcode hinterlegen (eventuell auch
mehrere).
Ich baue grade einen Lieferroboter, der per Infrarot über eine Station
seine zu fahrenden Routen bekommt, das ist ein 8stelliger Binärcode, der
Ziel 1 und Ziel 2 enthält.
Ich würde das dann auch gerne so machen, das ich dem Roboter bis zu 3
Binärcodes sagen kann und dies eingespeichert werden, so das diese
solange gespeichert sind, bis er sie abgefahren halt.
Warum er sie abspeichern soll?
Aus einfachem Grund, ich möchte, das wenn z.B. die Akkus leer sind, und
sie ausgewechselt werden, das er noch weiß, was er machen soll.
Phylus schrieb:> Ich mache eine schulische Ausbildung zum Systemelektroniker und meine> Lehrer haben den EEPROM noch nie verwendet und können mir dazu keine> Hilfe geben, sie werden nicht mal aus dem Datenblatt schlau =/
Tolle Lehrer man sollte sie auswechseln.
Phylus schrieb:> Aus einfachem Grund, ich möchte, das wenn z.B. die Akkus leer sind, und> sie ausgewechselt werden, das er noch weiß, was er machen soll.
Da empfiehlt es sich aber, das ganze im SRAM zu halten und den µC bei
Stromausfall mit einem Pufferkondensator (Goldcap, vllt. 1F) am Leben zu
halten. Der µC kann ja solange in den Energiesparmodus gehen. Das hält
durchaus einen Tag lang.
Gruß
Jonathan
Danke an Matthias K.
Ist seh interresant, jedoch kann ich kein Stück C =/
Aber habe anhand deiner Kommentare versucht es in Assembler zu
übersetzen, jedoch ohne erfolg, ich werde es bis heute Abend weiter
versuchen und wenn es nicht klappt, werde ich mich geschlagen geben,
trotzdem danke =)
naja, für son schulische projekt will ich nicht unbedingt so geld
ausgeben...
ich habe das programm ja fast fertig, ich weiß nur nicht wie ich das
XBYTE[0x0000] = x; // Deinen Daten...
XBYTE[0x0001] = y;
XBYTE[0x0002] = z; // u.s.w.
umsetzen kann, ich weiß das diese daten irgend wie und irgendwo
hinterlegt werden, aber die frage ist wo?!
Wenn man mir das sagen könnte, dann komme ich eventuell weiter und
bekomme es zu laufen...
Das andere Problem bei dem von dir genannten baustein in eBay ist, das
ich an Roboter und Stations Controller alle Ports belegt habe, bis auf
den letzten Pin ^^
ok, ich habe die Lösung zwar von Peter bekommen, jedoch versuche ich
noch immer den C Code von.... in Assembler-Sprache umzusetzen, das habe
ich jetzt, wer findet den Fehler?!
1
ledschreiben equ p3.0
2
ledfertig equ p3.1
3
4
eecon data 096h
5
eeconreadin data 00111000b
6
eeconreadout data 00001000b
7
eeconwrite data 00011000b
8
9
cseg at 0
10
11
;---------------------------- Auf Internen EEPROM schalten, Write-Enable setzen und Page-Mode 32Byte aktivieren
12
13
mov a,#eeconreadin
14
mov r0,#eecon
15
mov @r0,a
16
17
;---------------------------- 32Byte Daten in den "data buffer" laden/stapeln
18
19
mov a,#00000101b
20
mov dptr,#000h
21
movx @dptr,a
22
23
;---------------------------- Auslösen des Schreibevorgangs und abwarten bis er beendet ist
Wenn Du kein C kannst, dann lade Dir einen C Compiler für die 8051, zB
SDCC und schau Dir an, was für ein ASM draus entsteht.
Hier der ASM von SDCC. Der ist aber berüchtigt, dass er es nicht optimal
macht. Aber ein Anhaltspunkt sollte es sein!
1
00E3750844578mov_x,#0x44// nur ein paar Testdaten für x,y,z