Forum: Mikrocontroller und Digitale Elektronik 8051 Reset Vector Frage


von H-G S. (haenschen)


Lesenswert?

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 
?

von Georg G. (df2au)


Lesenswert?

Der Reset Vektor steht nicht im RAM sondern im ROM.

von Lothar (Gast)


Lesenswert?

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"

von H-G S. (haenschen)


Lesenswert?

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
von Peter D. (peda)


Lesenswert?

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