C2H6O
06.11.2009, 22:37
Hallo
Ich brauche mal wieder eure Hilfe:
Ich will, dass ich die Abstände, in denen das Interrupt ausgeführt wird, ändern kann.
Das Problem ist jetzt, dass wenn ich den Taster langsam und regelmäßig drücke, der Wert auch erhöht wird, wie ich im Terminal gut sehen kann. Manchmal passiert es aber, dass der Wert plötzlich wieder bei 0 ist, oder krummer Werte wie 1045 kriegt, was eigentlich nicht sein kann. Hat jemand ne Idee?
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
'LEDs konfigurieren
Config Pind.5 = Output
Led1 Alias Portd.5
Config Pind.6 = Output
Led2 Alias Portd.6
'Taster konfigurieren
Config Pind.2 = Input
Config Pind.3 = Input
Taster1 Alias Portd.2
Taster2 Alias Portd.3
'Pieper
Config Pind.7 = Output
'Timer einstellen
Config Timer1 = Timer , Prescale = 1024
On Timer1 Timer_irq
Timer1 = 30000
Enable Timer1
Enable Interrupts
'Variablen
Dim Tempo As Word
'#######################
'Hauptprogramm #
'#######################
Do
'schalter entprellen
Debounce Pind.2 , 1 , Langsammer , Sub
Debounce Pind.3 , 1 , Schneller , Sub
Loop
End
'Interruptroutine
Timer_irq:
Timer1 = Tempo
Print "Piep"
Print Tempo
Toggle Led1
Portd.7 = 1
Portd.7 = 0
Return
'entprell routinen
Schneller:
Tempo = Tempo + 1000
Return
Langsammer:
Tempo = Tempo - 1000
Return
Mfg und Danke fürs ansehen
Ich brauche mal wieder eure Hilfe:
Ich will, dass ich die Abstände, in denen das Interrupt ausgeführt wird, ändern kann.
Das Problem ist jetzt, dass wenn ich den Taster langsam und regelmäßig drücke, der Wert auch erhöht wird, wie ich im Terminal gut sehen kann. Manchmal passiert es aber, dass der Wert plötzlich wieder bei 0 ist, oder krummer Werte wie 1045 kriegt, was eigentlich nicht sein kann. Hat jemand ne Idee?
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
'LEDs konfigurieren
Config Pind.5 = Output
Led1 Alias Portd.5
Config Pind.6 = Output
Led2 Alias Portd.6
'Taster konfigurieren
Config Pind.2 = Input
Config Pind.3 = Input
Taster1 Alias Portd.2
Taster2 Alias Portd.3
'Pieper
Config Pind.7 = Output
'Timer einstellen
Config Timer1 = Timer , Prescale = 1024
On Timer1 Timer_irq
Timer1 = 30000
Enable Timer1
Enable Interrupts
'Variablen
Dim Tempo As Word
'#######################
'Hauptprogramm #
'#######################
Do
'schalter entprellen
Debounce Pind.2 , 1 , Langsammer , Sub
Debounce Pind.3 , 1 , Schneller , Sub
Loop
End
'Interruptroutine
Timer_irq:
Timer1 = Tempo
Print "Piep"
Print Tempo
Toggle Led1
Portd.7 = 1
Portd.7 = 0
Return
'entprell routinen
Schneller:
Tempo = Tempo + 1000
Return
Langsammer:
Tempo = Tempo - 1000
Return
Mfg und Danke fürs ansehen