www.mikrocontroller.net

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


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.