mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Reset per Software


Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich bin langsam am verzweifeln! Ich möchte einen Software-Reset
auslösen, also per Software den µC resetten, wenn in externer Interrupt
kommt.
Ich springe einfach an Adresse 0 und dann sollte alles von vorn
anfangen, doch laufen die Timer nach dem Reset nicht mehr. Ich habe mir
schon die Inhalte der Register TCON, TMOD, IE und IP ausgeben lassen,
jeweils vor und nach dem Reset, aber die Inhalte stimmen überein. Was
läuft das schief??
Ich behelfe mich jetzt mit dem Watchdog-Timer, aber ich finde das ist
keine elegante Lösung :-(

Hat da jemand eine Idee?

Thx Tabi

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hatten wir vor kurzem hier, such mal danach.
Aber im Prinzip hast du die beste Lösung schon selbst gefunden -
watchdog. Was ist dir daran nicht elegant genug? Bzw. was wäre an einer
anderen Lösung eleganter?

Autor: Tim O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin..

Wenn noch nen I/O Pin frei ist,
bau dir doch den sich selbst reset-enden
Prozessor per I/O-Leitung mit Inverter
gegen \Reset .. aber das ist ja dann kein
"Software-Reset" ..

Gruss,
Tim

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Timer laufen schon, bloß Du kriegst keinen Interrupt mehr.

Du hast nämlich kein RETI gemacht und deshalb denkt die 8051-CPU, sie
ist immer noch im Interrupthandler.

Und wenn Dein externer Interrupt die hohe Priorität hat, können sogar
noch 2 Interrupts am Laufen sein. D.h. dann must Du 2 RETIs machen um
alle Interrupts zu beenden.


Peter

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Peter:
Das hört sich logisch an. Wenn ich so schnell drüber nachdenke, macht
doch ein RETI nichts anderes, als ein RET-Befehl und setzt gleichzeitig
noch das EAL-Bit oder nicht? Weil ich im Programmstart dieses Bit auch
wieder setze, muss ich doch dann kein RETI machen - also nach meinen
Überlegungen. Offenbar sind die falsch, aber was macht RETI denn noch?
Weil mir fällt grad nicht wirklich ein Weg ein, vor dem Reset 2 mal
RETI auszuführen, weil er doch dann 2 mal springt und zwar an ein mir
zu dem Zeitpunkt unbekanntes Ziel. Oder sollte ich auf den Stack 2
Adressen legen, die dann angesprungen werden? Ist ne Idee, oder?
Was mich aber wie gesagt interessiert, um das auch wirklich zu
verstehen: Was macht RETI genau, dass es ohne dies solche Problemen
gibt?

Tabi

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 8051 hat eine Hardware-Prioritätslogik, d.h. er merkt sich zu jeder
Prioritätsstufe, ob ein Interrupt gerade abgearbeitet wird.
Das EA-Bit wird nirgends beeinflußt, sonst könnte ja die
Prioritätslogik nicht funktionieren.

Die 2 RETis gehen z.B. so:

...
      call leave_interrupts
      call leave_interrupts
...


leave_interrupts:
      reti


Peter

Autor: Tabaluga (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ja! Alles klar. Ich komme also um die RETI's nicht herum, wenn ich
springen will. Ist ne gute Lösung so :-)

Dankeschön!!!

Tabi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.