AVRli wrote:
> Hallo,
>
> ist das eigendlich eindeutig definiert das nach einem externen RESET
> oder nach dem Einschalten der Inhalt der Register IMMER 0x00 ist?
Nein, der Registerinhalt (r0..r31) ist Zufall. Übrigens, wie kommst Du
auf $00? Eine "leere" (nicht initialisierte) Speicherzelle hat in vielen
Technologien nicht den Inhalt $00, sondern den Inhalt $ff.
>
> Ich möchte einen RESET aus dem Programm ausführen indem ich zu Adresse
> 0x000000 springe.
Ein Sprung zu 0 sollte reichen... ;-)
> Vorher wollte ich im Register 16 einen Wert
> reinschreiben, wenn der dann beim initialisieren mit einem festgelegten
> Wert überein stimmt, soll eine bestimmte Aktion ausgeführt werden.
>
> Kann man das so machen?
Das wird Dir nichts bringen, ein Sprung nach Adresse 0 ist kein Reset.
Aaaaaber:
Du könntest Deinen "Merker" im I/O-Bereich ablegen. Denn der I/O-Bereich
wird bei einem echten Reset per Hardware initialisiert, siehe im
Datenblatt die "initial value"-Angaben bei den Registerbeschreibungen.
Wenn Du also einen sonst nicht genutzten Timer (ohne Interrupt)
einschaltest, bevor Du Deinen Nullsprung machst, dann solltest Du das in
der Init-Routine wiedererkennen.
Du könntest auch beim Init prüfen, ob der Analog-Comparator bereits
deaktiviert ist und ihn danach zwecks Stromsparen deaktivieren.
Willst Du einen echten Hardware-Reset auslösen, dann solltest Du den
Wachhund-Timer starten und in einer Endlos-Schleife auf dessen
Anschlagen warten.
>
> MfG AVRli...
...