Ceci est une ancienne révision du document !
—-
Un sous-programme est un petit programme à l'intérieur du programme principal. Les sous-programmes sont utilisés typiquement quand une opération a besoin d'être répétée plusieurs fois dans différentes parties du programme principal.
Il y a deux usages principaux des sous-programmes :
Quand le programme du PIC arrive à un sous-programme, il sauve son adresse dans le programme présent avant de sauter au commencement de celle-ci, ou appel le sous-programme. Une fois qu'il atteint la fin du sous-programme il retourne au programme principal, y continue de parcourir le code qu'il a laissé avant.
Normalement, il est possible que les sous-programmes peuvent appeler d'autres sous-programmes. Cependant il y a des limites au nombre de fois qu'un sous-programme puisse en appeler d'autre, ceci varie selon les puces, comme on l'observe dans la table suivante:
Famille de PICs
Ancho de Instruccion
Numero de subs llamadas
10F*, 12C5*, 12F5*, 16C5*, 16F5*
12
1
12C*, 12F*, 16C*, 16F*, except those above
14
7
18F*, 18C*
16
31
Esos limites son debidos al monto de memoria en el PIC el cual salva la localizacion antes de brincar a una nueva subrutina. Algunos comandos de GCBASIC son subrutinas, de manera que usted podria permitirse de 2 a 3 llamadas a subrutinas mas de la que su programa pueda tener.
Otra comodidad de las subrutinas es que ellas se permiten aceptar parametros. Esos son valores que son pasados desde le programa principal a la subrutina cuando ella es llamada, y son retornados cuando la subrutina finaliza.
Usando Subrutinas
Llamar a una subrutina es muy sencillo - todo lo que se necesita es el nombre de la subrutina, y una lista de parámetros. Este código podra llamar a una subrutina llamada “Buzz” que no tiene parametros:
Buzz
Si la subrutina tiene parametros, entonces ellos deberan ser listados despues del nombre de la subrutina. Este podria ser el comando para llamar una subrutina llamada “MueveBrazo” esta tiene tres parametros:
MueveBrazo NuevaX, NuevaY, 10
Crear una subroutina casi siempre es tan simple. Debera haber una linea al comienzo la cual tiene “sub ”, y entonces el nombre de la subrutina. Tambien, se necesita tener una linea al final de la subrutina que debe decir: “end sub”. Para crear una subrutina llamada “Buzz”, este es el codigo requerido:
sub Buzz
'codigo para la subrutina va aqui
end sub
If the subroutine has parameters, then they need to be listed after the name. For example, to define the “MueveBrazo” sub used above, use this code:
sub MueveBrazo(BrazoX, BrazoY, BrazoZ) #NR
el codigo para la subrutina va aqui
end sub
En la subrutina de arriba, BrazoX, BrazoY and BrazoZ son todas variables. si la llamada de arriba es usada, las variables deberan tener esos valores al comienzo de la subrutina:
· BrazoX = NuevoX
· BrazoY = NuevoY
· BrazoZ = 10
”#NR” significa “No Return” (No Devolver). si es especificado, entonces GCBASIC no copiara los valores de los parametros hacia atras dentro de las viariables originales cuando la subrutina finaliza. Si ”#NR” es removido del final de la linea, entonces GCBASIC copiara los valores hacia atras - en el ejemplo, NuevoX podria ser puesta como BrazoX y NuevoY tomaria el valor de BrazoY cuando la subrutina finalize.
Es posible usar variables tipo word (16-bit) como parámetros para las subrutinas - justo añada “As Word” al final del nombre del parámetro. Por ejemplo:
sub MueveBrazo(BrazoX As Word, BrazoY As Word, BrazoZ As Word)
…
end sub
Vea Tambien:
Funciones