Schau mal, ich hab das ein wenig unstrukturiert, spart Code.
Code:
$regfile = "m16def.dat"
$framesize = 24
$swstack = 8
$hwstack = 32

$crystal = 16000000
$baud = 9600

Ddrc = &B10000000
Ddrb = &B11111000
Ddrd = &B00000000
Portb = 255
Portd = 0

Dim A As Word
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim Result As Byte

   B = 0
   C = 0
   D = 0
Waitms 200

Gosub Drehbereich

Enable Interrupts
Enable Int0
Config Int0 = Change
On Int0 Drehbereich
Config Adc = Single , Prescaler = Auto
Start Adc

   Do
      A = Getadc(b)
      A = A / 8
      Select Case A
         Case 59 To 69 : A = 64
         Case 128 : A = 127              ' gibt es aber eigentlich nicht
      End Select

      Result = Pind.3
      On Result Gosub Links , Rechts

      Incr B
      B = B And 7
      Waitms 1

   Loop
End

'----------------------------------------------------
Rechts:
   Portb.3 = 0
   Portb.4 = 1
   Portc.7 = 1
   '128 ; Servodevice ; Servocommand ; Servonummer ; Servodata
   Print Chr(128) ; Chr(1) ; Chr(2) ; Chr(b) ; Chr(a)
   Return
'----------------------------------------------------
Links:
   Portb.3 = 1
   Portb.4 = 0
   Portc.7 = 0
   C = B + 8
   '128 ; Servodevice ; Servocommand ; Servonummer ; Servodata
   Print Chr(128) ; Chr(1) ; Chr(2) ; Chr(c) ; Chr(a)
   Return
'----------------------------------------------------
Drehbereich:
   If Pind.2 = 1 Then
      Result = Pinb And 7
      Select Case Result
      Case 0 : D = 4
      Case 1 : D = 12
      Case 2 : D = 8
      Case 3 : D = 16
      Case 4 : D = 6
      Case 5 : D = 14
      Case 6 : D = 10
      Case 7 : D = 18
      End Select
   Else
      D = 20
   End If

   For C = 0 To 15 Step 1       'besser C, da sonst b (SrvNr) falsch ist
         '128 ; Servodevice ; Servocommand ; Servonummer ; Servodata
         Print Chr(128) ; Chr(1) ; Chr(0) ; Chr(c) ; Chr(d)
   Next
   Return