Interrupt + Taster

OP #1273424
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:

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

5
 Config Int7 = Falling
6
 Enable Interrupts
7
 On Int7 Isr_von_int7 0
8
 Enable Int7
9
 Dim Var1 As Bit
10

11
 Do
12
   Print Var1
13
   Loop
14
 End
15

16

17

18
Isr_von_int7:                                               'ISR von Int7
19

20

21
If Var1 = 0 Then
22
   Var1 = 1
23
Else
24
   Var1 = 0
25
End If
26

27

28
Return


Hat jemand eine Ahnung was da haben könnte?

Beste Grüße
OP
Ok hier die Lösung:
1
  $regfile = "m128def.dat"                                   'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
2
 $crystal = 16000000                                        'Die Frequenz des verwendeten Quarzes
3
 $baud = 4800
4

5
 Config Int7 = Falling
6
 Enable Interrupts
7
 On Int7 Isr_von_int7
8
 Enable Int7
9

10
Dim Switch As Bit
11
Config Portd.4 = Input                                      'Hier isteine Taste angeschlossen
12
Config Portg.3 = Output
13
Portd.4 = 1
14
Config Debounce = 100
15

16
 Do
17
   If Switch = 1 Then
18
    Portg.3 = 1
19
   End If
20
   If Switch = 0 Then
21
    Portg.3 = 0
22
   End If
23
   Loop
24
 End
25

26

27

28
Isr_von_int7:                                               'ISR von Int7
29

30

31
Debounce Pind.4 , 0 , Schalter , Sub
32

33

34
Schalter:
35
Toggle Switch
36
Return
37

38

39
Return

war doch nicht so schwer ;)
Markus Duschek schrieb:
>
1
> Config Debounce = 100
2
> ...
3
> Isr_von_int7:                                               'ISR von
4
> Int7
5
> Debounce Pind.4 , 0 , Schalter , Sub
6
>
>
> 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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.