Hallöchen Ich bräuchte ein paar Informationen zum Reset-Vector des 8051, speziell des 80c32x2 von Philips. Ich weiss dass an der Adresse 0000h des internen SRAM wohl ein drei-Byte-großer Sprungbefehl zum Beginn des eigentlichen Hauptprogramms stehen soll. Das wäre der sogenannte Reset-Vector. Nun beabsichtige ich aber externen EEPROM-Programmspeicher zu benutzen. Da stellt sich mir die Frage wie das jetzt ist mit diesem Interrupt-Vector. So wie ich das verstehe steht dieser Vector im internen SRAM. Auf diesen kann ich ja nicht zugreifen wenn der erste Befehl aus dem externen EEPROM kommt (EA-Pin auf Low). Kann ich den Reset-Vector-Eintrag ignorieren und einfach mein Hauptprogramm im externen EEPROM ab 0000h durchgehend stehen lassen ? Ist dieser Reset-Vector im internen SRAM vielleicht für Software-Resets ?
Mal abgesehen davon, dass der 80c32x2 veraltet ist und ein akteller 8051 mit Flash und On-Chip RAM dringend zu empfehlen wäre z.B. http://www.silabs.com/products/mcu/8-bit/Pages/efm8.aspx Beim 8051 gibt es drei Speicher: internes RAM (IRAM) externes RAM (XRAM) und Programmspeicher (ROM/EEPROM/Flash) dementsprechend gibt es die Adresse 0 auch dreimal. Programme werden aus dem Programmspeicher ausgeführt, dort ist also bei Adresse 0 auch der Reset-Vektor. Das Programm kann dort direkt losgehen (erster Befehl) oder eben ein Jump zum Programmanfang. Allerdings war es unüblich, jedesmal das EEPROM neu zu brennen, stattdessen wurde das Programm im XRAM ausgeführt. Dazu wurde im EEPROM ein Bootloader gebrannt, der dann über die serielle Schnittstelle das Programm ins XRAM geschoben hat z.B. https://www.pjrc.com/tech/8051/paulmon2.html Dafür müsste dann an den 80c32x2 ein kleines EEPROM für den Bootloader und wenigstens ein 32K RAM angeschlossen werden: Beitrag "Mikrocontroller 8031 ROM/RAM"
Georg G. schrieb: > Der Reset Vektor steht nicht im RAM sondern im ROM. Oha ... dann stehen da wohl auch die ganzen Interrupt-Vektoren. Am besten wird wohl sein einen Sprungbefehl an 0000h bis 0002h des externen EEPROM zu setzen und ein paar Byte für die Interruptvektoren freizulassen. Danke dir ! @Lothar: Code per Bootloader booten werde ich wohl beim Folgeprojekt.
:
Bearbeitet durch User
MCs mit internem Flash gab es erst ab ~1993 von Atmel (AT89C51) und ISP-Flash noch einige Jahre später. Davor hat man in den PROM einen Monitor gebrannt, der die Interruptvektoren weitergeleitet hat:
1 | org 0h |
2 | ljmp 08000h |
3 | org 03h |
4 | ljmp 08003h |
5 | org 0Bh |
6 | ljmp 0800Bh |
7 | ;usw. |
Nach Ende des internen PROM führte der 8051 dann Code aus externem PROM aus, wo man aber auch einen SRAM anschließen konnte. Ich würde da einfach nen Flash-8051 mit UART-Bootloader einsetzen, z.B. P89C51RD2 oder AT89C51RD2. Die alten Downloadtools der Entwicklungsboards dürften unter 64Bit-Windows eh nicht mehr laufen.
:
Bearbeitet durch User
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.