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
Lesezeichen