Interrupt + Taster

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

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 #1273439
Lesenswert?
• ▲
▼
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 ;)
#1273637
Lesenswert?
• ▲
▼
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

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