Forum: Mikrocontroller und Digitale Elektronik AT89C51RD2/ED2: Adresse des Startprogrammes?


von Dieter (Gast)


Lesenswert?

Hi,

wenn ich ein Programm in den AT89C51RD2 oder in den AT89C51RED2 laden
will, muss ich eine Startadresse angeben (ORG 0000h). Bei manchen µC
befindet sich bei 0000h ein fester ROM, den man nicht beschreiben kann.
Erst ab z. B. 4000h fängt der Flash EEPROM an, welchen man beschreiben
kann kann. Bei manchen Programmen ist es sogar so, dass man dem
Prozessor vorher manuell noch ein einen Befehl geben muss, damit er das
Programm ab einer bestimmten Adresse abarbeitet (z. B. go 4100h).

Weiß jemand, wo ich mein Programm beim AT89C51RD2/ED2 hinschreiben
muss, damit es z. B. gleich nach dem Einschalten ausgeführt wird? Wenn
es die Adresse 0000h ist, wo steckt dann der ISP Bootloader, der die
ganzen Befehle für das Beschreiben des Speichers annimmt?

von Klaus...(Norad) (Gast)


Lesenswert?

Hmm..

Nun JA die sache ist eigentliche einfach, nach der Startadresse fangen
ja bekantlich schon die Interrupt Einsprungadressen  an z.B. Timer 0
etc...

Ich mach es folgendermaßen:

org     0000h
        ljmp START

org     4000h    ; kann auch 1000h sein oder 2000h

START:
        MOV ...

         .
         .
         .
       sjmp $

END

Also von 00h - 07Fh 128 Bytes Unteres interne RAM und
von 80h - 0FFh   128 Bytes Oberes interne RAM dort sollte dein Programm
aufjedenfall nicht beginnen.

Ab 100h kannste schon dein Programm ablegen und Starten.

Der Bootloader von Atmel liegt in einem geschüzten Bereich von 2k

Ich benutze zum übertragen Flip von Atmel

MfG Klaus

von Tobias S. (tobias)


Lesenswert?

"Also von 00h - 07Fh 128 Bytes Unteres interne RAM und
von 80h - 0FFh   128 Bytes Oberes interne RAM dort sollte dein
Programm
aufjedenfall nicht beginnen."

Ein 8051er hat eine Harvard Archtektur. Da haben Code und Datenspeicher
nichts miteinander zu tun (Außer man verwendet so ein Monitorprogramm,
das das Programm in den externen Ram bringt, der auch als
Programmspeicher beschaltet ist, was hier aber nicht der Fall ist).
Dein Programm kann also problemlos auch in den ersten 256 Byte
beginnen. Nur solltest du, wie von Klaus beschrieben, die
Interruptvektoren beachten.

Der Bootloader des RD2 liegt nicht am Anfang des Flashspeichers sondern
in einem eigenen ROM im Chip, das im fuer das ISP einfach eingeblendet
wird. Darum musst du dir also keine Sorgen machen.

Gruss Tobias

von Klaus-Dieter Reimers (Gast)


Lesenswert?

Hallo Dieter,

das Programm muss bei Adresse 0000h starten. Wenn Du in Assambler
programmierst, solltest Du ,wie Klaus schon sagte, den unteren Bereich
überspringen, aber nicht nach 4000h sondern allerhöchstens nach 100h.
Du verschenkst sonst kostbaren Speicherplatz. Hast Du keine Interrupts
kann das programm gleich bei 0000h losgehen. Das gild aber nur für
eigenständig laufende Programme, die mit Flip übertragen werden. Läuft
auf deinem üC aber ein Monitorprogramm, dann muss die Startadresse auf
die des Monitorprogramms angepasst werden. Meist 4000h, weil dann das
Monitorprogamm das Programm startet.

von Ralf (Gast)


Lesenswert?

Hab mal ne Frage zu den ED2/RD2: Kann man das interne
ATMEL-Bootloader-Programm auslesen bzw. neu draufbrennen? Ich hab hier
zwei Stück, von denen es heisst, dass der Bootloader gelöscht ist.
Kann mir jemand den Bootloader von seinen RD2s auslesen und schicken?

Ralf

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.