Hallo Furtion, hallo roboterheld,

mir gehts eigentlich gar nicht um die Lösung meiner Programmieraufgabe, sonder eher darum, dass ich herausbekomme, warum ausgerechnet diese Konstellation nicht funktioniert. So ein Kleinkram kann für eine Menge Verwirrung sorgen wenn man mal ein umfangreicheres Projekt hat.

Könnt ihr dasselbe Problem beobachten wenn ihr die Funktion mal bei euch laufen lasst?

Im Anhang nochmal das komplette Programm (mittlerweile recht zerrupft).
Allein durch die Zeile "Local Pe As Word" ändert sich der Ausgabewert der Funktion obwohl nirgens mit "Pe" gearbeitet wird.


Code:
$crystal = 8000000

Config Lcd = 20 * 4                                         'Anzeigemodus 40 x 4 Zeichen
Config Lcdpin = Pin , E = Portb.6 , Rs = Portb.7 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E2 = Portb.5

Dim X As Integer , Mini As Byte , Maxi As Byte , Ausgabe As Byte , Teststring As String * 10
Dim A As Long , B As Long
Dim ___lcdno As Byte

Config Servos = 1 , Servo1 = Portc.0 , Reload = 10 , Timer = Timer0
Config Portb = Output
Config Portd = Input
Enable Interrupts

Declare Function Ausgabe(byval Prozent As Byte) As String

___lcdno = 0
Initlcd
Cls


Portd = 1
Mini = 30
Maxi = 160
X = Maxi - Mini
X = X / 2
X = X + Mini


Do
   If Pind.0 = 0 Then X = X + 1
   If Pind.1 = 0 Then X = X - 1
   If Pind.2 = 0 Then X = X + 10
   If Pind.3 = 0 Then X = X - 10
   Waitms 50

   Dim P As Integer , P2 As Integer , Y As Integer
   Y = X
   P = Maxi - Mini
   P = P / 100
   P2 = Mini + Y
   P = P2 / P


   Locate 1 , 1
   Teststring = Ausgabe(90)

   Servo(1) = X
Loop
End


Function Ausgabe(byval Prozent As Byte)
Local Pe As Word
Local Temp As Integer
Lcd Prozent
Local Temp2 As Word
Local Temp3 As String * 20

Temp = Prozent / 10
For Temp2 = 1 To Temp Step 1
Temp3 = Temp3 + "##"
Next

Ausgabe = Str(prozent) + " " + Temp3
Temp3 = ""
Temp2 = 0
Ausgabe = Str(prozent)

End Function