okok, hier der Code:
Code:
$regfile "m8def.dat"
$crystal = 16000000
$framesize = 24
$swstack = 8
$hwstack = 32
Config Timer1 = Timer , Prescale = 8 'timer für Servos
Enable Timer1
Timer1 = 62535
Config Portc = Output
Portc.5 = 0 'hier hängt servo1
Portc.4 = 0 'hier hängt servo2
Portc.3 = 0 'hier hängt servo3
Portc.2 = 0 'hier hängt servo4
Config Portb.1 = Output
Config Portb.2 = Output
Portb.1 = 1
Portb.2 = 0
On Timer1 Servoirq 'servo
Enable Interrupts
Dim Kanal As Byte
Dim Servo(4) As Word 'min: 61535, mitte 62535, max 63535 = 2000 schritte
Waitms 100
Portb.2 = 1
Portb.1 = 0
Do
Servo(1) = 63535
Servo(2) = 61535 'Mitte
Servo(3) = 62535 'Mitte
Servo(4) = 62535 'Mitte
Loop
Servoirq:
If Kanal = 0 Then
If Portc.5 = 0 Then 'wenn port low
Timer1 = Servo(1) 'dann timer auf entsprechende verzögerung
Portc.5 = 1 'und port anschalten
Else 'das hier passiert erst bei dem darauf folgenden interrupt
Portc.5 = 0 'dann port wieder ausschalten
Incr Kanal 'und den nächsten kanal bearbeiten
End If
End If
If Kanal = 1 Then
If Portc.4 = 0 Then
Timer1 = Servo(2)
Portc.4 = 1
Else
Portc.4 = 0
Incr Kanal
End If
End If
If Kanal = 2 Then
If Portc.3 = 0 Then
Timer1 = Servo(3)
Portc.3 = 1
Else
Portc.3 = 0
Incr Kanal
End If
End If
If Kanal = 3 Then
If Portc.2 = 0 Then
Timer1 = Servo(4)
Portc.2 = 1
Else
Portc.2 = 0
Incr Kanal
End If
End If
If Kanal = 4 Then
Timer1 = 40000
Kanal = 0
End If
Return
End
Lesezeichen