Hallo, ist das nromal wenn eine Interrupt-Routine beendet wird (mit reti) das es lange dauert bis der Controller zum Hauptprogramm zurück springt? Bei mir ist das nämlich der Fall, wenn der Hardwareinterrupt (ATmega16 @16MHz) ausgelöst und abgearbeitet wurde, dauert es ca. 1 Minute bis das Hauptprogramm wieder ausgeführt wird.
Hallo Steffen, das ist nicht normal. Du mußt aber schon ein wenig mehr schreiben, wenn Du Hinweise haben möchtest. Gruß Gerd
ne eigentlich ist das sogar ziemlich unnormal! was genau ist dein Prob?
Also ich frage im HP Bitzustände am PORTC ab und gebe dementsprechend Meldungen auf einem LCD aus. Der Hardwareinterrupt wird durch ein Funksignal ausgelöst. Dadurch wird dann ein Bit an PORTx auf High gesetzt und eine Meldung am LCD erscheint, danach wird das LCD gelöscht und die Routine mit "reti" beendet. Normalerweise sollten doch sofort wieder am PORTC die Zustände abgefragt werden, aber das LCD bleibt für ca. 1 Minute leer. Erst danach läuft wieder alles wie gehabt. .org 0x0000 rjmp Main .org INT0addr rjmp ZV Das ist doch so korrekt oder?
Poste mal deinen Code, dann können wir dir besser helfen. Ich tippe auf einen Fehler in der Routine, wo das LCD gelöscht wird. Vielleicht ret vergessen oder so??? Was anderes kanns eigentlich nicht sein. Ein Interrupt is schneller als die Polizei erlaubt...der geht keine Minute.
Also den Code posten wäre wahrscheinlich zu unübersichtlich. Der ist nämlich sehr lang. Liegt das vielleicht an den Vektoren (siehe Seite 43 Datenblatt)?
Hallo Steffen, natürlich kann das an den Vektoren liegen. Aber wenn Dein Code sehr lang und sehr unübersichtlich ist, dann liegt es vermutlich an Deinem Code. Hast Du schon mal etwas mit Interrupts programmiert? Wenn nein, dann schreib doch mal ein ganz einfaches und kurzes Programm, was ein Hauptprogramm und eine Interruptroutine beinhaltet. Vielleicht erkennst Du dann was. Ich kann Dir jedenfalls mit Deinen sehr spärlichen Angaben nicht weiterhelfen. Und ein ewig langes Programm mag ich auch nicht lesen. Gruß Gerd
Hallo Steffen , hast du deinen Fehler gefunden ? Wenn ja, was war denn das Problem ...
Hi! Ist das der einzige Int. der da läuft? Es klingt jedenfalls wie Stackfehler. Irgendwas gesichert und nicht zurückgeschrieben? Stack initialisiert? ISR falsch verlassen?.... Leider kannst du uns dein Prog ja nicht zeigen, weshalb unsere Hilfe auch nur Vermutung sein kann. MFG Uwe
Meine Kristallkugel sagt: Du hast vergessen das Interruptbit zu löschen und dann wird immer nur ein Befehl des HP und ständig der Interrupt ausgeführt. Peter
Wie meinst du das ? Mit RETI wird doch der Betreffende Interrupt gelöscht oder ?
Welches Interrupt Flag durch RETI gelöscht wird und welches nicht wird bei den einzelnen Prozessortypen ziemlich unterschiedlich gehandhabt. Am besten das Datenblatt ausführlich zu diesem Thema durchlesen und zwar zu allen im Programm benutzten Interrupts. Dieter
"Mit RETI wird doch der Betreffende Interrupt gelöscht oder ?" RETI löscht garnichts ! Manche Interrupts werden mit Einsprung in den Interruptvektor gelöscht und manche müssen manuell gelöscht werden, steht aber im Datenblatt bei jedem Interruptbit mit dabei. Peter
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.