AVRStudio 4.10.356 Tiny15 SIM Problem

Gast #111974
Hallo,
bin Newbie und
habe ein kleines Assembler Programm fuer einen Tiny15 geschrieben,
(ext. Int, timer1) das wollte ich jetzt mit AVRStudio 4.10.356 im
Simulator testen.
Da geht aber so einiges schief, timer1 overflow endlos interrupts, TIFR
flags loeschen geht nicht, BREQ werden nicht ausgefuehrt trotz equal.
Sind die Probleme bekannt, was waere eine stabile Version, die fuer
Tiny15 geht. Die vorherige Version hatte auch schon Probleme mit
Tiny15.

mfg Volker
Gast #111975
Hier ist der Source code dazu.
Die Zeitkonstanten sind noch nicht entgueltig, habe ich fuer Testzwecke
heruntergedreht, will ja keine 50 Min. Realtime am Simulator abwarten.
Bedanke mich schon mal.

mfg Volker
Angehängte Dateien:
Gast #111978
Probier es doch aus. Was genau passiert kann ich Dir auch nicht sagen.
Es ist generell empfehlenswert Interruptroutinen mit Reti zu verlassen,
da sonst das Interruptflag nicht gelöscht wird. Vielleicht ist das ja
dein Problem
Gast #111979
Hallo Werner, jetzt muss ich aber mal dumm fragen.
Mein RESET ist doch auch eine Interrupt Routine muss ich die auch mit
RETI abschliessen und wie komme ich dann in mein Hauptprogramm ?
mfg Volker
Gast #111980
Hi Volker...

Reset ist keine Interrupt-Routine. Der Reset-Vektor steht an Adresse 0
und wird nur beim Power-On-Reset, beim Reset per Reset-Pin, bei
Watchdog-Reset aufgerufen.

Nach der Reset-Routine "fällt" die Abarbeitung ins Hauptprogramm, das
ja als Endlos-Schleife aufgebaut ist (zwischen Main: und tjmp Main).

Deine ISR (Interrupt-Service-Routinen) werden von den stattfindenden
Hardware-Ereignissen (Timer-Überlauf, Pegelwechsel am Input) ausgelöst
und müssen durch 'reti' abgeschlossen werden (so wie du es in deinem
Programm gemacht hast).

Trotzdem haben deine ISR einen gravierenden Fehler: Du sicherst das
Statusregister (SREG) nicht! Daher kann der Programmablauf total
durcheinander kommen. Falls du noch ein unteres Register übrig hast,
dann deklariere es exclusiv als SREG-Kopie (heißt bei mir immer
'srsk') und füge zu Beginn jeder ISR den Befehl 'in srsk,sreg' ein
und vor jedem 'reti' 'out sreg,srsk'. Damit sicherst du das SREG
für dein Hauptprogramm, deine ISR kann also deinem Hauptprogramm nicht
mehr die Flags 'verbiegen'.

Bei größeren AVRs mit SRAM und wenn Registermangel herrscht, ist es
üblich, das SREG auf dem Stack zu sichern.

Dein ganzes Programm habe ich nicht analysiert, die Kommentare sind zu
verwirrend, sieht aus, wie wild zusammenkopiert... - Sorry...

Bit- & Bytebruch...
...HanneS...
Gast #111981
Sorry, Tippfehler, 'tjmp main' soll natürlich 'rjmp main' heißen,
die Tasten 't' und 'r' sind aber auch verdammt dicht zusammen...

...HanneS...
Gast #111983
Hi Volker...

Nix draus machen, da bist du nicht der erste (ist bei mir noch garnicht
lange her), aber noch lange nicht der letzte, dem das passiert...

...HanneS...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.