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?
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
"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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.