mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt + Taster


Autor: Markus Duschek (trmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich würde gerne mittels einen Taster eine Variable setzten. Der Taster 
soll dazu einen IR auslösen. Leider läuft der Code nicht ganz:

  $regfile = "m128def.dat"                                   'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
 $crystal = 16000000                                        'Die Frequenz des verwendeten Quarzes
 $baud = 4800

 Config Int7 = Falling
 Enable Interrupts
 On Int7 Isr_von_int7 0
 Enable Int7
 Dim Var1 As Bit

 Do
   Print Var1
   Loop
 End



Isr_von_int7:                                               'ISR von Int7


If Var1 = 0 Then
   Var1 = 1
Else
   Var1 = 0
End If


Return


Hat jemand eine Ahnung was da haben könnte?

Beste Grüße

Autor: Markus Duschek (trmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok hier die Lösung:

  $regfile = "m128def.dat"                                   'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
 $crystal = 16000000                                        'Die Frequenz des verwendeten Quarzes
 $baud = 4800

 Config Int7 = Falling
 Enable Interrupts
 On Int7 Isr_von_int7
 Enable Int7

Dim Switch As Bit
Config Portd.4 = Input                                      'Hier isteine Taste angeschlossen
Config Portg.3 = Output
Portd.4 = 1
Config Debounce = 100

 Do
   If Switch = 1 Then
    Portg.3 = 1
   End If
   If Switch = 0 Then
    Portg.3 = 0
   End If
   Loop
 End



Isr_von_int7:                                               'ISR von Int7


Debounce Pind.4 , 0 , Schalter , Sub


Schalter:
Toggle Switch
Return


Return


war doch nicht so schwer ;)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus Duschek schrieb:
>
> Config Debounce = 100
> ...
> Isr_von_int7:                                               'ISR von
> Int7
> Debounce Pind.4 , 0 , Schalter , Sub
> 
>
> war doch nicht so schwer ;)

Ist ja auch nicht richtig.

Wenn Dein Programm mal größer werden wird (wovon beim Mega128 Monster 
auszugehen ist), wirst Du merken, daß elend lange 100ms Warten im 
Interrupt ziemlich tödlich ist.
Z.B. eine UART wird dann Zeichen verlieren, eine SW-PWM flankern wie 
wild usw.

Ich kann Dir nur zeigen, wie man es in C macht. Ich glaub, daß das 
jemand schonmal nach Bascom portiert hatte.


Peter

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.