AVR stack

Gast
mit
pop Register
pop Register 2* die alte Rücksprungadresse vom Stack holen

dann mit rjmp oder ajmp zur neuen adresse oder mit 2* push Register die
neue Rücksprungadresse laden und dann reti auf die gesetzte Adresse

Nicht gerade die feine englische Art, funktioniert aber

HTH,
Klaus
Gast
blöd nur, dass es pop und push und auch einen per Software
manipulierbaren SP bei Hardware-stack gar nicht gibt...:-)
Das betrifft alle Typen ohne RAM (1200, Tiny11, 12, 15)
Gast
@Karl Heinz:
Wenn Du einen kleinen Tiny mit 8 Pins benötigts und unbedingt ne
Rückspringadresse ändern willst, nimm den Tiny13.
Der hat als einziger Mini-AVR SRAM mit normalem Stack im SRAM.

Gruß
Andi
Gast
ok,
ich sehe schon, mein tiny15 gibt das wohl nicht her...
die Anwendung ist halt ziemlich zeitkritisch, d.h. ich habe in der
Anwendung keine Zeit noch ein Bit auszuwerten, welches in der ISR
gesetz werden würde.
dann halt doch ein 12er. der läuft etwas schneller und verschafft mir
Luft um besagtes Bit zu checken...

Danke.
Gast
Was heißt hier keine Zeit?
Bei 2, 4 oder mehr MHz hat man alle Zeit der Welt sofern ein
IRQ-Programm nicht 100.000 mal je Sekunde ausgeführt werden soll.
Und wenn es mal etwas länger dauert, da Variabel, wird nach dem RETI
aus dem IRQ-Prog das IRQ-Prog durch das Interrupt-Flag sofort wieder
aufgerufen.
Was hast Du genau vor?

Gruß
Andi
Gast
das ist alles ein bißchen kompliziert:
mein tiny15 pollt unentwegt einen Pin, überwacht damit einen seriellen
Datenstrom und checked ob das Protokoll passt. Die Bitzeit liegt bei
4us, d.h bei den 1,6MHz des Tiny15 kann ich mit SBIC nur einmal checken
ob sich am Pin was getan hat (worst case). Den timer nutze ich zum
testen des data timings(ich will nur einen nutzen, um später auch
andere tinys verwenden zu können. der t15 lag halt rum und bei reichelt
gibts noch keine t13).
Jetzt gibt es zwei Fälle:
1. es kommen keine daten an
der timer läuft über und generiert einen INT
2. es kommem Daten an, haben aber das falsche Protokoll, d.h. es gibt
keinen timer überlauf, da ich immer wieder das timing prüfe und dazu
den zähler rücksetze

aber ich merke schon, ohne zweiten timer gehts nicht. habs gerade mal
mit dem WDR probiert und schalte nach jedem WDR auf ein anderes
Protokoll um, das ich testen will; das läuft soweit.

Grundsätzlich nochmal:

wenn ich in der ISR folgendes mache:
pop rxxx
pop rxxx
ldi r16,low(zielmarke)
ldi r17,high(zielmarke)
push r17
push r16
reti
müßte ich doch nach reti zu 'Zielmarke' springen, oder?

Grüße,
KH
Gast
Hi...

Tiny15 hat kein SRAM, daher auch kein pop und push!!!

Tiny15 muss kalibriert werden, sonst läuft er nicht mit 1,6MHz.

Tiny15 hat doch 2 Timer, einer ist sogar sehr schnell.

Tiny15 hat Ext. Int, da brauch man nicht pollen...

...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.