Naja, wenn man in der Function den adc nicht startet, ist nix mit Werte auslesen 
Zweiter Fehler war, dass ich den kompletten portA auf Output gesetzt habe, jetzt läuft es.
Der Vollständigkeit halber hier der richtige Code.
Habe das Ganze ein wenig umgebaut, jetzt finde ich es eleganter gelöst als oben
Code:
Declare Function Readbuttons() As Byte
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Adc = Single , Prescaler = Auto 'für Tastenabfrage
Config Pina.7 = Input 'für Tastenabfrage
Porta.7 = 1
Config Porta.0 = Output 'für Servo
Config Servos = 1 , Servo1 = Porta.0 , Reload = 10 'für Servo
Config Portc = Output 'für LEDs
Enable Interrupts
Dim Button As Byte
Dim Servopos As Byte
Dim Led As Byte
Led = 1
Servopos = 95
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1
'*******************Main function**************************
Do
Servo(1) = Servopos
If Led = 0 Then
Portc.0 = 0
Portc.1 = 1
Portc.2 = 1
Elseif Led = 1 Then
Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Elseif Led = 2 Then
Portc.0 = 1
Portc.1 = 1
Portc.2 = 0
End If
Button = Readbuttons()
If Button <> 0 Then
Select Case Button
Case 1
Servopos = 45
Led = 2
Print "Servo rechts"
Case 2
Servopos = 95
Led = 1
Print "Servo mittig"
Case 3
Servopos = 145
Led = 0
Print "Servo links"
End Select
End If
Waitms 100
Loop
End
'**********************Functions***********************************
Function Readbuttons() As Byte
Local Ws As Word
Readbuttons = 0
Start Adc
Ws = Getadc(7)
'Print "ws= " ; Ws
If Ws < 1010 Then
Select Case Ws
Case 400 To 455
Readbuttons = 1
Case 335 To 380
Readbuttons = 2
Case 250 To 305
Readbuttons = 3
End Select
End If
End Function
Lesezeichen