Appel d'une procédure

Dans ce chapitre, nous allons voir comment utiliser « procedure », et de comprendre l’intérêt des routine qui se situent dans MikroPAscal.

procédure nom_procédure (paramètres_list);
//déclaration local
Begin
//corps de la procédure
End ;

 

 

 

Le nom d'une procédure peut être un identificateur valide. Entre parenthèses (paramètre_list) est une liste de paramètre très similaire à la déclaration de variable. il faut donc déclarer la ou les variables . En pascal, les paramètres passe toujours par la valeur de la procédure.

"déclaration local"sont des déclaration facultative de variables et / ou constantes, . Puis "corps de la procédure"est une séquence d'instructions à exécuter sur l'appel du nom de la procédure.

--------------------------------------------------------------------------------------------------------------------------------------------------------------

Exemple 1)

 

Figure 2.1.1.a : Le port A, toutes ses bronches  sont configurées en entrée et pour le port B, toutes ses broches sont configurées en sortie.

Prenons l’exemple de la figure 2.1.1.a, lorsque nous appuyons dur le bouton poussoir (Bp1), nous faisons clignoter la led D1, et lorsque nous le relâchons ce bouton poussoir il faut que la scrutation du programme se termine, à la fin de la scrutation du programme la led D1 s’éteint. Nous faisons appel à la procédure « allumer_led_d1 », à ce moment précis on scrute le sous programme qui à pour objectif de faire clignoter la led D1 toutes les 50ms.

Le programme s’écrit de cette façon

program Exemple_1;

procedure Init;

begin

  TRISA:= $11; // port A configuré en entrée

  TRISB:= $00; // port B configuré en sortie

  PORTB:=$00;   // toutes les sorties du port b sont au niveau bas logiques

  CMCON:=7; // désactivation comparateurs

end;

procedure allumer_led_d1;

begin

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

end;

begin

Init;

while true do

  if PORTA.0=1 then allumer_led_d1;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

Faire clignoter une led plusieurs fois

Admettons que cette fois-ci nous vouons que la led clignote 5 fois, lorsque nous relâchons le bouton poussoir la led D1 doit donc clignoter 5 fois, il faut donc attribuer à la procédure « allumer_led_d1 », un paramètre qui permet de scruter le programme 5 fois de suite, le montage reste inchangé et correspond toujours à la figure 2.1.1.a, par contre en ce qui concerne le programme lui est différent sans aucun doute. 

Le principe est le suivant, « iCount » correspond à la valeur que nous voulons, on peut dire que c’est la valeur finale, et la variable « i » qui correspond au point de départ, c’est-à-dire que lorsque le programme va scruter plusieurs fois la procédure « allumer_led_d1(iCount: byte); » celui-ci va compter jusqu’à la valeur iCount qui est de 5, puis arrivé à cette valeur et quand le programme aura terminé de scruter son dernier passage dans ce cas la led D1 s’éteindra.

program Exemple_1;

procedure Init;

begin

  TRISA:= $11; // port A configuré en entrée

  TRISB:= $00; // port B configuré en sortie

  PORTB:=$00;   // toutes les sorties du port b sont au niveau bas logiques

  CMCON:=7; // désactivation comparateurs

end;

procedure allumer_led_d1(iCount: byte);

var

  i:byte;

begin

  for i:=1 to iCount do  // lorsqu'il va arriver à 5 la led D1 s’éteindra

begin

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

end;

end;

 begin

  Init;

while true do

  if PORTA.0=1 then allumer_led_d1(5);

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

On aurait pus écrire aussi de cette façon mais qui est plus longue, bon il est vrai que nous avons mis 5 rien de nous empêche de faire un copier coller 5 fois, mais admettons qu’au lieu de 5 fois nous aurions mis 1000 fois….hum !! cela fais long pour recopier à moins d’avoir le temps.

program Exemple_1; 

procedure Init;

begin

  TRISA:= $11; // port A configuré en entrée

  TRISB:= $00; // port B configuré en sortie

  PORTB:=$00;   // toutes les sorties du port b sont au niveau bas logiques

  CMCON:=7; // désactivation comparateurs

end; 

procedure allumer_led_d1;

begin

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

  PORTB.0:=1;

  delay_ms(50);

  PORTB.0:=0;

  delay_ms(50);

 end; 

begin

  Init;

while true do

  if PORTA.0=1 then allumer_led_d1;

end.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L’avantage d’une procédure c’est qu’il suffit de faire appel au « nom » de la procédure et le tour est joué !! Cela nous évite de récrire à chaque fois le programme si par exemple celui-ci se trouve utilisé plusieurs fois. Prenons l’exemple de la figure 2.1.1.b

Figure 2 1 1 b

 

 

 

 

 

 

 

 

 

 

 

 

 

Figure 2.1.1.b : trois boutons poussoir qui exécute le même programme.

Bien entendu ils existent beaucoup d’exemples, mais je vous donne une base à vous de faire de que vous voulez, le principe reste le même il faut arriver à appelé une procédure sans refaire toutes une ligne de programmation.

En voici le programme 

program exemple_1; 

procedure init;

begin

  TRISA :=$FF; // port A configuré en entrée

  TRISB :=$00; // port B configuré en sortie

  PORTB:=$00;

  CMCON := $07; // désactivation comparateurs

end; 

Procedure Light_output;

begin

  PORTB:=$FF; // avec ce bit on désignent toutes les sorties

  delay_ms(50); // durée de 50ms

  PORTB:=0;   // et on éteint toutes les leds

  delay_ms(50);

  PORTB:=$FF;

  delay_ms(50);

  PORTB:=0;

  delay_ms(50);

end; 

Procedure Input;

begin

  if ((PORTA.0=1) or (PORTA.1=1) or (PORTA.2=1)) then

  Light_output

else if

  PORTA=0 then

  PORTB:=0;

  end; 

begin

init;

  while true do // on vérifie indéfiniment la boucle

begin

  if PORTA.0=1 then Input; // on fait appel à la procédure Input c’est

  if PORTA.1=1 then Input; // beaucoup plus rapide

  if PORTA.2=1 then Input;

end;

end.

 

 

Créer un site gratuit avec e-monsite - Signaler un contenu illicite sur ce site