hab jetzt nochmal ein neues Programm geschrieben, welches mit weniger Hardware auskommt (also nur 2 ext. Interrupts) und sonst nichts
Dadurch hast du nicht immer diese blöde Timer-isr und hast mehr Zeit für andere sachen.
Hier mal der Code:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcdbus = 4
Initlcd
Cls
Cursor Off
Config Pind.2 = Input
Portd.2 = 0
Config Pind.3 = Input
Portd.3 = 0
Config Int0 = Rising
On Int0 Kanal_1
Enable Int0
Config Int1 = Rising
On Int1 Kanal_2
Enable Int1
Dim Kanal(2) As Word
Dim Rc(2) As Word
Enable Interrupts
Do
Locate 1 , 1
Lcd "Servo(1): " ; Rc(1) ; " "
Locate 2 , 1
Lcd "Servo(2): " ; Rc(2) ; " "
Waitms 100
Loop
End
Kanal_1:
While Pind.2 = 1
Waitus 10
Incr Kanal(1)
Wend
Rc(1) = Kanal(1)
Kanal(1) = 0
Return
Kanal_2:
While Pind.3 = 1
Waitus 10
Incr Kanal(2)
Wend
Rc(2) = Kanal(2)
Kanal(2) = 0
Return
Aber hier noch die Antworten auf deine Frage, falls du lieber den ersten Code verwenden möchtest:
Im label "Servo_input" schreibst du nach "Servo_wert_read = Servo_wert " noch "servo_wert = 0".
Das mit dem disablen der Interrupts kannst du dir sparen, da diese sowieso standartmäßig disabled sind (also in isr's)
Solltest du es doch verwenden wollen (aus welchen Gründen auch immer), könntest du auch "Disable Timer1" schreiben, dann wird nur dieser disabled.
Gruß
Chris
Lesezeichen