PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Übergabewert einer Function



bertl100
06.05.2005, 10:01
Hallo Robots

Hab mal wieder ne Frage.

Seht euch bitte mal den beiliegenden Code an.

Beinhaltet Temp jetzt den Wert von der Unterfunktion Spannung??
kann nämlich in der If nichts machen bzw. er läuft einfach durch.
Ich möchte in der IF einen Wert vergleichen. Dieser soll <61 und >59 sein.
Natürlich ist der code nicht vollständig. Ist nur ne Verständnisfrage.




$regfile = "m128def.dat"
$crystal = 8000000
$baud = 9600
$baud1 = 9600
$eeprom

Declare Function Spannung(byval Cnt As Byte) As Single

Dim Cnt As Byte , Temp As Single


For Cnt = 0 To 3

Temp = Spannung(cnt) 'Unterfunktion +Übergabewert

If Temp < 59 And Temp > 61 Then


Function Spannung(byval Cnt As Byte)as Single


Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim Dauerch1 As Byte , Dauerch01 As Single

Start Adc 'Kanal 1 messen


Dauerch1 = Getadc(cnt)
Dauerch01 = Dauerch1 * 0.058594
Dauerch01 = Spannung



End Function

tobimc
06.05.2005, 10:11
HI!

Nein.
Du musst am ende der Funktion entweder ein return Spannung
oder
Spannung = Spannung angeben, genau weis ich das aber auch nciht mehr.

Ausserdem hast du vergessen, den ADC in der Funktion wieder zu schließen!!

Liebe Grüße,
Tobi

*EDIT:*
*HARCH* Das kann ja nciht gehen!



Dauerch01 = Dauerch1 * 0.058594
Dauerch01 = Spannung
Dauerch01 ist dann gleich Spannung.

So müsste es Heißen:
Spannung = Dauerch01

Grüße!

bertl100
06.05.2005, 10:16
Danke für deine Hilfe!!!!

Kann es erst am Abend testen.

pebisoft
06.05.2005, 10:19
dim kannst du nicht in eine funktion setzen.
mfg pebisoft

bertl100
06.05.2005, 10:23
Hab ich korregiert, hat aber funktioniert.
Nochmals Danke an die Robots!!

darwin.nuernberg
06.05.2005, 10:29
Ich hab Dir mal ein anders Programm geschrieben,
Damit kann man besser erklären wie das mit der Funktion geht:



'Function Demo

$regfile = "m32def.dat" ' Art des Prozessors bestimmen
$crystal = 16000000 ' Taktfrequenz einstellen
$baud = 9600 ' Baudrate für Serielle Schnittstelle


Declare Function Test(byval X As Byte) As Byte

Dim Temp1 As Byte
Dim Temp2 As Byte


Hauptprogramm:

' Demo 1
' Mittels Temp1 wird ein Wert übergeben
' und von der Funktion in Temp2 zurückgegeben

Temp1 = 7
Temp2 = 0

Print "Übergabe = Temp1 (";
Print Temp1;
Print ") ";
Print " - Temp2 (";
Print Temp2;
Print ") ";

Temp2 = Test(temp1)

Print " /// Berechnet = Temp1 (";
Print Temp1;
Print ") ";
Print " - Temp2 (";
Print Temp2;
Print ") ";

Print

' --- --- --- --- --- --- --- --- --- --- --- ---

' Demo 2
' Mittels Temp1 wird ein Wert übergeben
' und von der Funktion wieder in Temp1 zurückgegeben
' d.h Die Variable wird direkt verändert

Temp1 = 7

Print "Übergabe = Temp1 (";
Print Temp1;
Print ") " ;


Temp1 = Test(temp1)

Print "Berechnet = Temp1 (";
Print Temp1;
Print ")"

Print




End 'end program

' Hier die Funktion
' =================
Function Test(byval X As Byte) As Byte

Test = 2 ^ X ' Rückgabe der Berechnung = Funktionsname als Variable

End Function

End

bertl100
06.05.2005, 10:49
Habs jetzt simuliert und es Funzt.

Vielen Dank nochmal