Forum: Mikrocontroller und Digitale Elektronik Interrupt + Taster


von Markus D. (trmax)


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

von Markus D. (trmax)


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 ;)

von Peter D. (peda)


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

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.