Forum: Mikrocontroller und Digitale Elektronik Bascom-wie löse ich eine Interrupt aus


von Holger (Gast)


Lesenswert?

Hallo,
habe mit nachfolgendem Text so meine Probleme.
Mit einer Taste soll eine "Sub" aufgerufen werden, die dann losläuft.
Das klappt soweit, wenn es sich um einen "Durchgang" handelt. Sobald
das Unterprogramm aber eine Schleife (hier eine simple Blinkvariante)
darstellt (Do-Loop) kann  man natürlich nicht zur nächsten "Sub"
weiterspringen. Einzige Möglichkeit wäre der RESET-Taster. While- wend
habe ich getestet, braucht aber einen weiteren Taster.
Die Möglichkeit einen Interrupt extern bekomme ich nicht hin. Wer kann
mir was raten? Leider war eine Suche ohne Erfolg, darum dieser Thread.
MFG Holger

$regfile = "2313def.dat"
Config Pind.0 =Input  'Taster

Config Portb = Output
Pind.0 = 1
Dim A As Byte
Afg:
A = 0
Do
   Debounce Pind.0 , 0 , Cnt , Sub
   Loop
End

Cnt:
  Incr A
  If A = 1 Then Gosub Eins
  If A = 2 Then Gosub Zwei
  If A = 3 Then Gosub Drei
  If A = 4 Then Goto Afg
Return

Eins:                                                         'Sub1
'Do
Portb.0 = 1
Waitms 750
Portb.0 = 0
Waitms 750
'loop
Return

Zwei:                                                         'Sub2
'Do
Portb.1 = 1
Waitms 350
Portb.1 = 0
Waitms 350
'Loop
Return

Drei:                                                         'Sub3
'Do
Portb.2 = 1
Waitms 200
Portb.2 = 0
Waitms 200
'Loop
Return

von Oliver (Gast)


Lesenswert?

Moin Holger,

Du musst die Interrupts erstmal definieren und Enable nicht vergessen.
Du kannst die Interrupts auch in der Unterprogramm schleife
sperren, so dass sie zuerst abgearbeitet werden muss.
Zum Blinken einer LED würde ich aber immer Timer verwenden, weil
sonnst Dein Programm unnötig steht (350ms ist ne Menge).

Das Thema ist sehr schön in der Bascom Doku beschrieben, empfehle
eh das Handbuch auszudrucken ! (Wenn man Einsteiger ist)

mfg
Oliver

von Holger (Gast)


Lesenswert?

Hallo ,
danke zuerst !
Die Hilfe hatte ich sowieso gedruckt, aber ich werde nicht so richtig
schlau daraus.
Die Freischaltung des Interrupts mit  ...Enable interrupt... habe ich
eingefügt.
Aber was muß die Interruptroutine ISR enthalten.
Ich habe sie als Sub-Routine zwar angefügt, aber was muß rein?
Da ich ja keinen TIMER verwende , brauch ich ihn ja nicht auf "0" zu
setzen.
Wie wird er in einer Schleife gesperrt ?
Vielleicht könntest Du mir das etwas erläutern?
Danke und fF noch. (frohes Fest noch)
Holger

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
Noch kein Account? Hier anmelden.