Probleme INT in BASCOM

Gast #138954
Lesenswert?

Hallo zusammen,
habe hier ein kleines Problem:
Sobald in meinem Prog ein bestimmtes ereignis vorkommt aktiviere ich
INT1 und gebe über pind.6 daten aus. Die Daten sollen immer geschickt
werden wenn ich an INT1 eine steigende Flanke habe. Das Funktioniert
auch ganz gut nur arbeitet der Controller ja im Hintergrund weiter so
dass es zu Fehlern bei der ausgabe kommen kann.

Meine Frage: Kann man es irgendwie schaffen dem Controller zu sagen
dass er nur die ISR auszuführen hat und sonst nix anderes?
Konkret nochmal: Ich will dass, sobald die ISR aktiviert ist dass der
Controller nur diese Ausführt (und sonst nix) bis in meinem Fall X=68
ist und danach per Goto in ne andere Sub.

Bin ziemlich am verzweifeln.
Freu mich schon auf eure antworten.
Gruß
AVR Newbie


hier mal ein Codestück:

Config Int1 = Rising
On Int1 Geben
Enable Interrupts

......

Reset Portd.5
Enable Int1


Geben:
Incr X
Portd.6 = G(x)

If X = 68 Then
Set Portc.0
Set Portd.5
Disable Int1
Goto Rto
End If

Return
Return

rto:
........
Gast #138955
Lesenswert?

wusste noch garnicht, dass ein avr 2 sachen gleichzeitig ausführen
kann...
der uC macht immer nur eine sache zur gleichen zeit, alles andere wird
solange eingefroren und nach dem int fortgesetzt
Gast #138956
Lesenswert?

Hi,
ja schon nur reagiert, d.h. die ISR wird ja nur ausgeführt wenn sich am
INT ne steigende Flanke ergibt.
wenn diese Ausgeführt ist geht er wieder dahin zurück wo man ihn
rausgeholt hat.
Ich will jetzt aber, dass sobald einmal die ISR aktiviert ist NUR noch
diese ausgeführt wird bis X=68.
Also bei jeder Flanke in die ISR ansonnsten nix tun.

Gruß
AVRNewbie
Gast #138957
Lesenswert?

Da spielen noch andere Faktoren eine Rolle.

- Gibt es noch andere Interrupts im Programm? (z.B. Timer)
- Wie schnell hintereinander kann so ein Ext.-INT anliegen?
- Wie wird der Int erzeugt? (doch nicht etwa von einem mechanischen
  Schalter?)

Viele meiner Programme sehen im Hauptprogramm so aus:

main: rjmp main ;Nix tun...

Denn wenn nicht allzuviele Dinge (quasi-) gleichzeitig zu tun sind,
dann läuft die eigentliche Arbeit in einem Timer-Int. Man muss nur
darauf achten, dass "sich die Katze nicht in den Schwanz beißt", also
das Programm nicht länger dauert als der Inerruptabstand ist. Sind dann
noch andere zeitkritische Int's erforderlich, dann mach' ich diese
ISRs extrem kurz und setze im Timer-Int das I-Flag, worauf andere Ints
höhere Priorität haben, den Timer-Int also unterbrechen können.

Das geht aber nur, wenn man selbst die Übersicht über die Ressourcen
behält, also besonders in ASM. Überlässt man das einem Compiler, behält
man die Übersicht nur, wenn man den Compiler und seine Arbeitsweise sehr
gut kennt.

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren