Forum: Mikrocontroller und Digitale Elektronik 8051 Programm von ext. EEPROM laden


von fragender (Gast)


Lesenswert?

Hallo,

ich versuche gerade mit einem 8051 eine Art Mini-Computer zu bauen.
Im Moment bin ich soweit, dass ich eine kleine Lib habe mit den 
nötigsten Funktionen und die Ausgabe auf einem 20x4 Display. 
Letztendlich soll da noch eine Tastatur drankommen, TV-Out und ein 
Piepser.... aber das ist jetzt erstmal nebensächlich.

Wegen Programmen, dachte ich an einen kleinen I2C EEPROM, auf dem ich 
compilierte Programme speichere und die dann lade.
Nun zu meiner Frage, ob ich mir das so ungefähr richtig vorstelle...

Ich habe 64K Programmspeicher. Wenn ich nun die Ausgabe-Routinen, Laden 
vom EEPROM usw mit einem org irgendwo z.B. an die Adresse von 40kb setze 
und dann einfach vom externen Speicher Byte für Byte das Programm hole, 
könnte ich das dann so machen und ausführen?
1
(ganz grob vereinfacht....)
2
hole byte0 an 0x0000
3
hole byte1 an 0x0001
4
...
5
...
6
7
und dann, sobald alles geladen ist einfach ein:
8
9
ljmp 0x0000
Natürlich muss ich da die RAM-Benutzung beachten, Interrupt-Vektoren 
uswuswusw.

Aber vom Prinzip her, würde das so funktionieren?

von Bertram S. (bschall)


Lesenswert?

Klingt gut - aber Achtung: auf Flash & RAM Bereiche achten (write while 
exec usw.)

von fragender (Gast)


Lesenswert?

Na das würde ich grob so lösen:
1
(Pseudo-Code)
2
"Speicher-Layout":
3
0x0000 ljmp @40kb
4
0x0003 ext int0 Interrupt Vektor
5
0x000B timer 0 IV
6
...
7
...
8
0x0053 spi IV
9
0x0054: start des user-programmplatzes
10
...
11
...
12
...
13
0x40kb: start des "betriebssystems":
14
Code für Display, UART, I2C, EEPROM, Tipse, TV-Out...
Damit umgehe ich ja das Problem, dass ich Speicher überschreibe, in dem 
mein "Betriebssystem" liegt. Er hüpft ja gleich an den Start bei 40kb 
und dann habe ich Platz von dem Ende der Interruptvektoren bis zum Start 
meines Codes, der immer da sein muss.

Also das ist nun nur ein grober Umriss vom ganzen, je mehr ich darüber 
nachdenke, umso schwieriger wird es :D aber genau das macht ja den Spass 
aus ;)

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

es ist dir aber schon klar, dass 8051 eine Havard-Architektur hat, dass 
also Programm- und Datenspeicher getrennt adressiert werden? Oder hast 
du das entsprechend extern verknüpft (ich habe eine Brücke "Von 
Neumann", um den Speicherzugriff zu vereinheitlichen).

Gruss Reinhard

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
Noch kein Account? Hier anmelden.