CALL/de

From MCS Wiki AVR
Jump to: navigation, search

Contents

Funktion

Ruft eine Subroutine auf und führt sie aus.

 

 

Syntax

CALL Test [ (var1, var-n) ]

 

 

Remarks

Var1

BASCOM-Variable oder Konstante.

Var-n

BASCOM-Variable oder Konstante.

Test

Name der Subroutine. In diesem Fall Test.

 

Man kann Subroutinen mit oder ohne Parameterübergabe aufrufen.

 

Es ist wichtig, dass die Subroutine deklariert wird bevor sie aufgerufen wird. Natürlich muss die Anzahl der deklarierten Parameter mit der Anzahl der übergebenen Parameter übereinstimmt.

 

 

Es ist außerdem wichtig, dass die Parameter bei Übergabe von Konstanten mit BYVAL deklariert werden.

 

Mit dem CALL-Befehl kann man Prozeduren und Subroutinen aufrufen.

 

Zum Beispiel: Call Test2

 

 

Der CALL-Befehl ermöglicht es, eigene Befehle zu definieren.

Man muss CALL nicht explizit schreiben:

Test2 ruft ebenfalls die Subroutine test2 auf.

 

 

Wenn man CALL nicht explizit schreibt dann müssen die Klammern weggelassen werden.

Also muss Call Routine(x,y,z) geschrieben werden als Routine x,y,x

 

Im Gegensatz zu normalen Unterprogrammen die mit GOSUB aufgerufen werden erlaubt der CALL-Befehl die Übergabe von Parametern.

 

Notice.jpg
Durch Benutzung von CONFIG SUBMODE=NEW braucht man nicht jede Subroutine bzw. Funktion vorher zu deklarieren.

 

 

Siehe auch

DECLARE , SUB , EXIT , FUNCTION , LOCAL , CONFIG SUBMODE

 

 

Beispiel


$regfile = "m48def.dat" ' Mikrocontroller
$crystal = 8000000 ' Taktfrequenz
$baud = 19200 ' Baudrate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
 
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 
 
Dim A As Byte , B As Byte 'Einige Variablen dimensionieren
Declare Sub Test(b1 As Byte , Byval B2 As Byte) 'Subroutine deklarieren
A = 65 'Der Variablen A einen Wert zuweisen
Call Test(a , 5)'Subroutine Test mit einer Variablen und einer Konstanten aufrufen
Test A , 5 'alternative Aufrufmöglichkeit
Print A 'Den neuen Wert ausgeben
End
 
Sub Test(b1 As Byte , Byval B2 As Byte) 'Benutzen Sie die selben Variablennamen wie bei der Deklaration
Print B1 'Ausgabe
Print Bcd(b2)
B1 = 10 'Neuzuweisung
B2 = 15 'Neuzuweisung
End Sub

Notice.jpg
Ein wichtiger Punkt ist, dass b2 in der Subroutine verändert werden kann aber sich diese Veränderung nicht im aufrufenden Programm auswirkt!

Variable A wird verändert.

 

Das ist der Unterschied zwischen dem BYVAL und dem BYREF im Deklatationsteil der Subroutine.

 

Wenn man BYVAL benutzt bedeutet das, dass man den WERT des Arguments übergibt. Es wird eine Kopie der Variablen erzeugt und der Subroutine übergeben. Dadurch kann der Wert in der Subroutine benutzt und verändert werden aber Veränderungen beeinflussen nicht den aufrufenden Parameter. Das wäre bei Übergabe einer Konstanten ja auch unmöglich.

 

 

Wenn BYVAL nicht angegeben wird dann wird standardmäßig BYREF verwendet und die Adresse der Variablen übergeben. Wenn im obigen Beispiel eine Neuzuweisung an B1 erfolgt dann wird tatsächlich der Parameter A verändert.


Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language