la programmation en mikropascal

29
République tunisienne Ministère de l'éducation et de la formation Direction générale des programmes et de la formation continue Module de formation Technologie (génie électrique) 3ème et 4ème années secondaire Section sciences techniques La programmation A V E C La programmation en mikropascal . Page 1/29

Upload: chokri-chaibi

Post on 09-Aug-2015

2.719 views

Category:

Documents


23 download

TRANSCRIPT

Page 1: La Programmation en Mikropascal

République tunisienne

Ministère de l'éducation et de la formation

Direction générale des programmes et de la formation continue

Module de formation

Technologie (génie électrique)

3ème et 4ème années secondaire

Section sciences techniques

La programmation AVEC

La programmation en mikropascal . Page 1/20

Page 2: La Programmation en Mikropascal

Présentation du Mikropascal

I) Introduction   : Conçu par la société Mikroelektronika™, le compilateur PASCAL nouvelle génération

"MikroPASCAL" pour microcontrôleurs PIC bénéficie d'une prise en main très intuitive et d'une ergonomie sans faille. Ces très nombreux outils intégrés (mode simulateur, terminal de communication, gestionnaire 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code...) associé à sa capacité à pouvoir gérer la plupart des périphériques rencontrés dans l'industrie (Bus I2C™, 1Wire™, SPI™, RS485, Bus CAN™, cartes compact Flash, signaux PWM, afficheurs LCD et 7 segments...) on font un outils de développement

II) Description du logiciel Mikropascal   :

Le compilateur Mikropascal nous permet de développer rapidement des applications

complexes :

Écrivez votre code source de Pascal en utilisant le rédacteur intégré de code (les aides de code et de paramètre, Accentuer de syntaxe, correction automatique, etc.…)

Employez les bibliothèques Mikropascal incluses pour accélérer nettement le développement : acquisition de données, mémoire, affichages, conversions.

Surveillez votre structure de programme, variables, et fonctions dans l'explorateur de code.

Inspectez l'écoulement de programme et corrigez la logique exécutable avec le programme de mise au point intégré.

Obtenez les rapports et les graphiques détaillés : Carte de RAM et de ROM, codez les statistiques, impression d'assemblage, etc.…

La programmation en mikropascal . Page 2/20

Gestionnaire 7 segmentsAssistant de code

Fenêtre des erreurs

Analyseur statistique

Explorateur de code

Editeur de code

Page 3: La Programmation en Mikropascal

III) Les barres d’outils

nouveau projetSauvegarder le programme

en coursCharger un projet existant et changer

ses paramètres (ex : horloge, son nom,….)

Annuler le dernière action

Ouvrir un projet Rétablir la dernière action

Fermer un programme Imprimer

Sauvegarder les programmes en cours Une nouvelle page

Sauvegarder un fichier existant sous un autre nom.

compilation

Afficher le fichier .asm après compilation

VI) Manipulation :Sur votre PC lancer le compilateur mikropascal.

Première étape  Création d’un nouveau projet : Project New Project

Deuxième étape Choix des paramètres du projet :

La programmation en mikropascal . Page 3/20

1- Taper le nom de votre projet

2- choisir un dossier pour l'enregistrement

3 -Choisir le PIC

4- taper la fréquence de l'horloge

6 -cliquer sur OK

5- Cocher les cases WDT_OFF et XT_OSC

Page 4: La Programmation en Mikropascal

Troisième étape  Saisi du programme Comme application saisir le programme ci-dessous (faire attention aux symboles de ponctuation et d'égalité)

Program led_clignotantes;Begin TRISB :=$ 00; PORTB :=$ 00; While true do

Begin PORTB := 0; Delay_ms(1000); PORTB :=$04; Delay_ms(1000);

End; End.

Quatrième étape : Compilation: Project ----- build (ou cliquer sur )

La barre de progrès semblera vous informer au sujet du statut de compilation. S'il y a des erreurs, on vous annoncera dans la fenêtre d’erreur.Si aucune erreur n'est produite,

Cinquième étape : Simulation

La simulation du programme peut se faire facilement avec le logiciel ISIS.

La programmation en mikropascal . Page 4/20

Page 5: La Programmation en Mikropascal

Charger le programme dans le microcontrôleur

Sixième étape : Chargement du programme dans le PIC16F84A

Avec le logiciel Icprog

La programmation en mikropascal . Page 5/20

Page 6: La Programmation en Mikropascal

La programmation en langage évolué :Que ce soit par la méthode graphique ou en langage évolué, l’écriture du programme ainsi que sa mise au point doivent suivre le diagramme suivant :Il faut  traduire le cahier des charges en une suite ordonnée d’actions que doit réaliser le processus de commande, cette suite d’opérations sera décomposée en actions élémentaires ou instructions c’est l’Algorithme. Par la suite il suffit de transformer cet algorithme en un langage évolué tel que le langage  PASCAL ou le langage C.Dans la suite de ce module on s’intéressera au langage MIKROPASCAL. I-1-  Structure d’un programme :Un programme est un texte que le compilateur va traduire en fichier hexadécimal. Alors il doit avoir une structure particulière.Le texte d'un programme contient au moins trois parties.

L'entête Ne contient qu'une ligne; commence par le mot réservé « Program » et donne un nom au programme.

Les déclarations Elles permettent de définir les éléments utilisés dans le programme. En effet on devra déclarer les variables utilisées pour permettre au compilateur d'effectuer les réservations de mémoire ainsi que les sous-programmes (Procédures et fonctions).

Le corps du programme Commence par le mot réservé « Begin » et se termine par le mot réservé "End " suivi d'un point final. Ce qui suit ce "End" n'est pas pris en compte par le compilateur. Entre "Begin" et "End" se trouvent les instructions à effectuer par le programme.

Algorithmique Langage PASCALAlgorithme NomAlgorithme ;Variables Nomvariable : type ; Constantes Nomconstante :Type=valeur ;                       Début…….……Fin.

Program NomProgramme ; Var Nomvariable : Type ;Const                                                 Nomconstante : Type := valeur ;   Begin…….…….End.

I-2-    Les Règles de bases :* Toutes instructions ou actions se terminent par un point virgule ;* Une ligne de commentaires doit commencer par "{" et se terminer par "}"  ou commence par "//".                                       * Un bloc d’instructions commence par "Begin" et se termine par "End;"

I-3-    Les types de variables utilisées  en Mikropascal :

Type taille Plage Array ... Gestion de tableau

String ... Gestion de chaîne de caractères

Byte (octet) 8 bits 0 .. 255

Char (caractère) 8 bits 0 .. 255

Word (mot) 16 bits 0 .. 65535

Short (Octet signé) 8 bits -128 .. 127

Integer (Entier) 16 bits -32768 .. 32767

longint (Entier long) 32 bits -2147483648 .. 2147483647

La programmation en mikropascal . Page 6/20

Page 7: La Programmation en Mikropascal

I-4- Les bases du compilateur Mikropascal :Le décimal :             A=26 ;L’hexadécimal         A=$1A ; ou A=0x1A ;Le binaire                A=%00011010 ;

Vous pouvez utiliser la commande QConvertor pour convertir un entier décimal en binaire ou en hexadécimal

I-5 Configuration des registres en entrées/ sorties Pour configurer les broches d'un port en sorties ou en entrées on utilise la commande TrisExemple Trisa=5 =Trisa= (00101)2 donne les broches RA0 et RA2 sont des entrées et les autres broches sont en sortiesTrisb=0 Trisb(00000000)2 toutes les broches du port B sont en sorties Trisb=240 Trisb=(F0)16 Trisb=(11110000)2 les broches RB0,RB1,RB2 et RB3 sont en sorties et les autres broches ( RB4,RB5,RB6 et RB7) en entréesLes zéros configurent les broches en sorties et les uns les configurent en entréesI-6-    les opérateurs arithmétiques et logiques :

Opérateurs arithmétiques Opérateurs de comparaison Opérateurs logiquesOpérateur Opération Opérateur Opération Opérateur Opération

+ Addition = Egalité AND ET- Soustraction <> Différent OR OU* Multiplication > Supérieur XOR OU exclusif/ Division < Inférieur NOT NON

div Division entière <= Inférieur ou égale SHL Décalage à gauche

mod Reste de la division entière

>= Supérieur ou égale SHR Décalage à droite

I-7-  Les structures usuelles :a)    L’affectation :C’est l’action d’attribuer une valeur à une variable.Langage algorithmique Langage PASCALa<== b+c a :=b+c

b)    Les structures alternatives :Langage algorithmique Langage PASCALSI condition ALORS DEBUT Traitement ;……………FINSI ;

IF condition THEN BEGINTraitement ;………….END;

SI condition ALORS IF condition THEN

La programmation en mikropascal . Page 7/20

Page 8: La Programmation en Mikropascal

        DEBUT      Traitement 1;      ……………       FIN SINON       DEBUT     Traitement 2;      ……………      FINSI ;

      BEGIN     Traitement 1;      ………….      ENDELSE      BEGIN      Traitement 2;      ………….      END;

SELON expression             Valeur_1 : action_ 1 ;           ……………...            Valeur_n : action_n ;            autrement : action_0 ;FINSELON ;

CASE expression OF  Valeur_1 :action_1;………………  Valeur_n : action _n ;  ELSE action_0 ;END;

c)    Les structures itératives ou répétitives :Langage algorithmique Langage PASCALI : entier ;…………POUR  I <variant de Valeur initiale> JUSQU'A valeur finale  FAIRE DEBUT Traitement ;……………FINFAIRE ;

I: integer;………..FOR I:= <valeur initiale>  TO <Valeur finale> DO BEGINTraitement ;………….END;

TANQUE condition FAIRE        DEBUT      Traitement ;      ……………       FINTANQUE ;

WHILE condition DO       BEGIN     Traitement ;      ………….      END;

d)    Les procédures et les fonctions Une suite d'instructions peut être rassemblée en un bloc qui peut être appelé depuis plusieurs endroits d'un programme. Ceci donne lieu aux notions de sous programme appelé aussi  procédures ou fonctions. *        ProcéduresCe sont des groupes d'instructions qui vont former une nouvelle instruction simple utilisable dans un programme. En Pascal il faut les définir avant de les utiliser. Ceci se fait en utilisant une structure similaire à celle d'un programme.

Entête Procedure Identificateur (Param1:Type1, Param2:Type2,...);Identificateur est le nom de la procédure; Param1, Param2 ... sont des paramètres que le programme fournit à la procédure sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramètres.

Déclarations

La programmation en mikropascal . Page 8/20

Page 9: La Programmation en Mikropascal

Déclarations de constantes, types, variables utilisés à l'intérieur de la procédure Corps de la procédure

 Begin  Instruction1; Instruction2;…….. End;Il s'agit des instructions exécutées par le programme à l'appel de la procédure. Une procédure peut appeler d'autres procédures définies avant elle. L'appel d'une procédure se fait en écrivant son nom suivi des paramètres nécessaires entre parenthèses.     

* FonctionsUne fonction est une procédure qui devra fournir un résultat de type numérique ou chaîne de caractères. La définition se fait en utilisant une structure similaire à celle de la procédure.

EntêteFunction Identificateur (Param1:Type1, Param2:Type2,...):Type_R;Identificateur est le nom de la procédure; Param1, Param2 ... sont des paramètres que le programme fournit à la fonction sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramètres; Type_R est le type du résultat fourni par la fonction.

DéclarationsDéclarations de constantes, types, variables utilisés à l'intérieur de la fonction.

Corps de la fonction Begin  Instruction1;  Instruction2;……..  Identificateur:=résultat; End;

I-7-  Les fonctions adaptées aux  microcontrôleurs PIC :Le compilateur mikropascal apporte une large bibliothèque de procédures et fonctions adaptées aux microcontrôleurs de la famille PIC de MICROCHIP. Ces fonctions sont accessibles dans l’aide du logiciel néanmoins on va citer quelque une.Fonctions / Procédures ExempleSetbit(port , bit) ; Setbit(portB,2) ;     mettre la broche RB2 à 1Clearbit(port , bit) ; Clearbit(portB,5) ;  mettre la broche RB5 à 0Testbit(port , bit) A :=testbit(portB,7) ;affecter à la variable A l’état de RB7

Button(port,bit,temps d’appui ,état logique actif)

If Button(portA,2,10,1) then <Action 1> ;On teste l’appui sur un bouton poussoir relié à la broche RA2 pendant 10 ms pour faire l’Action 1

La programmation en mikropascal . Page 9/20

Page 10: La Programmation en Mikropascal

Applications

Application 1:Clignotement d'un voyant tous le 1 s

AffectationEntrées/Sorties Broche du µ contrôleur

H1 RA3

H1

1ére méthode ( notion de la pause ) MikroPascal fournit une procédure pour créer des temporisations.Delay_us Delay_us(const time_in_us :

word); Crée un  retard dont la durée en microsecondes

 Delay_us(10);  Dix microsecondes

Delay_ms Delay_ms(const time_in_ms : word);

Crée un  retard dont la durée en millisecondes

 Delay_ms(1000)  une seconde

Vdelay_ms Vdelay_ms(time_in_ms : word);

Crée un  retard  dont la durée en millisecondes est time_in_ms (une variable)

Delay_Cyc Delay_Cyc(cycles_div_by_10 : byte);

Crée un retard dont la durée est fonction de l'horloge du microcontrôleur

Delay_Cyc(10); 

 Algorithme Programme commentaireProgramme EX1aDébutTrisa0;

Porta0;Tant que vrai faireDébut porta.30 Pause d'une secondePorta.31;Pause d'une secondeFin tant que Fin programme

program EX1a;begin trisa:=0; porta:=0;while true do begin porta.3=0 delay_ms(1000); porta.3:=1 ; delay_ms(1000); end;end.

nom du programmedébut du programmetoutes les broches du port A sont configurées en sortiesToutes les broches du port A sont à zéroboucle répétitive sans limite

instructions à exécuter durant la boucle

La programmation en mikropascal . Page 10/20

Page 11: La Programmation en Mikropascal

2éme méthode ( notion du test ) Algorithme Programme commentaireProgramme EX1bDébutTrisa0;

Porta0;

Tant que vrai faireDébut Si porta.3=0 alorsPorta.31 si non porta.30;Pause d'une secondeFin tant que;Fin programme

program EX1b;begin trisa:=0; porta:=0;

while true do begin if porta.3=0 then porta.3:=1 else porta.3:=0; delay_ms(1000); end;end.

nom du programmedébut du programmetoutes les broches du port A sont configurées en sortiesToutes les broches du port A sont à zéroboucle répétitive sans limite

// instructions à exécuter durant la boucle

Application 2L'action sur un bouton poussoir S1 entraîne l'allumage d'une lampe H

H1

S1

AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 RA0Sortie: H RA3

Dans le programme de l'EX1b - Remplacer l'instruction trisa:=0 par trisa:=1 pour configurer la broche RA0 en entrée et les autres broches en sortie- Remplacer if porta.3=0 then porta.3:=1 else porta.3:=0; par if porta.0=0 then porta.3:=1 else porta.3:=0; pour faire un test sur RA0 au lieu de RA3- Supprimer delay_ms(1000) . On ne plus besoin d'une pause- Compiler et simuler en ajoutant une entrée sur la broche RA0

Application 3

H1

S1S2

AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 RA0Entrée: S2 RA1Sortie: H RA2

La programmation en mikropascal . Page 11/20

Page 12: La Programmation en Mikropascal

1ère méthodeAlgorithme Programme mikropascalAlgorithme EX3;Début Trisa $03;Porta 0;Tan que vrai faireSi porta.0=1 alors porta.2:=0 sinonDébut Si porta.1=0 alors porta.2:=0 sinon porta.2:=1;Fin sinon;Fin du programme

program EX3;begintrisa:=$03;porta:=0;while true doif porta.0=1 then porta.2:=0 elsebeginif porta.1=0 then porta.2:=0 else porta.3:=1;end;end.

2ème méthode (notion des variables) On utilise une variable X qui prend l'état logique 1 si et seulement si (S1=0 ET S2=1)Cette variable commande la sortie H1Algorithme Programme mikropascalAlgorithme EX3a;Variable X de type octetDébut X0;Trisa $03;Porta 0;Tan que vrai fairedébutSi (porta.0= 0 ET porta.1) =1 alors X:=1 sinonX:=0;Si X=0 alors porta.2:=0 si non porta.2:=1;Fin tant que Fin du programme

program EX3a;var X:byte;beginX:=0;trisa:=$03;porta:=0;while true dobeginif ((porta.0=0) and (porta.1:=1)) then X:=1 else X:=0;if X=0 then porta.2:=0 else porta.2:=1;end;end.

Application 4: commande d'un moteur avec deux boutons poussoirs ( 1 seul sens de rotation)

S1S2

KM1KM1

AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 (arrêt) RA0Entrée: S2 (marche) RA1Sortie: KM 1 RA3On va associe à KM1 une variable X dont l'équation est L'instruction if ((porta.0=0) and (porta.1=1)) then X:=1 else X:=0; devint if ((porta.0=0) and ((porta.1:=1) or (X=1))) then X:=1 else X:=0;

La programmation en mikropascal . Page 12/20

Page 13: La Programmation en Mikropascal

Application 5 (notion de procédure) Commande d'un moteur (2 sens de rotation) avec verrouillage électrique

S1S2

KM1

S3

KM2

KM1

KM1KM2

KM2

AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 (arrêt) RA0Entrée: S2 (marche sens horaire ou gauche) RA1Entrée: S3 (marche sens trigonométrique ou droite) RA2Sortie: KM 1 (rotation sens horaire ou gauche) RA3Sortie : KM2 (rotation sens trigonométrique ou droite) RA4 On associe une variable d à KM1 et un autre g à KM2

Programme mikropascal Commentaire program EX5; Nom du prgrammevar d,g:byte; Déclaration des variablesprocedure droite;begin if ((porta.0=0)and((porta.1=1)or (d=1)) and (g=0)) then d:=1 else d:=0;

if d=1 then porta.3:=1 else porta.3:=0; end;

Procédure droite

procedure gauche; begin if ((porta.0=0)and((porta.2=1)or (g=1)) and (d=0)) then g:=1 else g:=0; if g=1 then porta.4:=1 else porta.4:=0; end;

Procédure gauche

begin trisa:=%00111; while true do

begin droite; gauche; end; end.

Programme principal

Appel de la procédure droiteAppel de la procédure gauche

La programmation en mikropascal . Page 13/20

Page 14: La Programmation en Mikropascal

Nous voulons signal l'état du moteur par un afficher 7 segment à cathode commun branché sur les broches du port B Etat du moteur Etat de l'afficheur Valeur affectée au port BMoteur à l'arrêt En décimal119

En hexadécimal=Rotation sens horaire En décimal:

En hexadécimalRotation sens trigonométrique

En décimal:En hexadécimal

Pour retrouver les codes correspondants aux différents états de l'afficheur dans le menu tools choisir la commande seven segment convertor

Ajouter au programme la procédure suivanteprocedure affichage; begin if ((d=0) or (g=0)) then portb:=119; if d=1 then portb:=……;

if g=1 then portb:=……;; end;Appeler la procédure affichage dans le programme principal

Nous voulons remplacer l'afficheur 7 segments par un afficheur LCD 2x16 (2 lignes et 16 colonnes) Le compilateur MikroPascal fournit une bibliothèque pour communiquer avec l'afficheur LCD utilisé généralement en mode  4-bit

Syntaxe Description Exemple

Lcd_Config Lcd_Config (var port : byte; const. RS, EN, WR, D7, D6, D5, D4 : byte);

Initialiser l'afficheur LCD et définir les broches du microcontrôleur à relier à l'LCD

 Lcd_Config (PORTB,1,2,0,3,5,4,6); .

Lcd_Out Lcd_Out (row, col : byte; var text : array[255] of char);

 Ecrire un Texte sur l'afficheur LCD en indiquant sa position (ligne et colonne).

Ecrire  "Ali" sur  LCD sur la ligne  1, colonne 3:Lcd_Out(1, 3, 'Ali');

Lcd_Out_Cp :

Lcd_Out_Cp(var text : array[255] of char);

Ecrire  le texte sur l'afficheur LCD à la position actuelle de curseur

Afficher " salut " à la position actuelle de curseur :Lcd_Out_Cp('salut');

Lcd_Chr : Lcd_Chr(row, col, character : Ecrire un Caractère Ecrire  "i" sur  LCD

La programmation en mikropascal . Page 14/20

Page 15: La Programmation en Mikropascal

byte); sur l'LCD en indiquant sa position (ligne et colonne). 

sur la ligne  2, colonne  3:Lcd_Chr(2, 3, 'i');

Lcd_Chr_Cp Lcd_Chr_Cp(character : byte); Ecrire un caractère sur l'afficheur LCD  à la position actuelle de curseur. 

Lcd_Chr_Cp('e');Ecrire  "e" à la position actuelle du curseur.

Lcd_Cmd : Lcd_Cmd (command : byte); Liste de commande:LCD_FIRST_ROW              LCD_SECOND_ ROWLCD_THIRD_ROW             LCD_FOURTH_ROW          LCD_CLEAR                        LCD_RETURN_HOME       LCD_CURSOR_OFF          LCD_MOVE_CURSOR_LEFT   LCD_MOVE_CURSOR_RIGHT   LCD_TURN_ON           LCD_TURN_OFF        LCD_SHIFT_LEFT               LCD_SHIFT_RIGHT            

Envoie une commande à l'afficheur LCD

Déplacer le curseur  à la 1ère ligne        Déplacer le curseur  à la 2 ème ligne Déplacer le curseur  à la 3 ème ligne Déplacer le curseur  à la 4 ème ligne Effacer le contenu de l'afficheur LCD Retour du  Curseur  à la position initiale Arrêter  le curseur Déplacer  le curseur à gauche Déplacer le curseur à droite Activer  l'affichage sur l'afficheur LCD Arrêter l'affichage sur l'afficheur LCD Décalage de l'affichage à gauche Décalage de l'affichage à droite

Remplace la procédure affichage par celui-ci procedure affichage; begin

if d=1 then begin lcd_out(1,1,'Rotation sens ') ; //afficher sur la 1ere ligne et la 1ere colonne de l'LCD lcd_out(2,1,'trigonometrique'); end;if g=1 thenbegin lcd_out(1,1,'Rotation sens ') ; lcd_out(2,1,'horaire ');end;if ((g=0) and (d=0)) thenbeginlcd_out(1,1,'Moteur a l arret ');lcd_out(2,1,' ');end; end;ajouter le 4 lignes suivant dans le programme principal

trisb:=$00; portb:=0; lcd_config(portb,1,3,2,7,6,5,4); // lcd_config(le port, RS, E, RW, D7, D6, D5, D4)

lcd_cmd(lcd_cursor_off); // éteindre le curseur

La programmation en mikropascal . Page 15/20

Page 16: La Programmation en Mikropascal

Application 6La cabine étant initialement au 1ère étage,

L'action sur un bouton m0 entraîne la descente de la cabine au rez-de-chaussée puis sa monté au 1ère étage après une pause de 2s

L'action sur un bouton m2 entraîne la monté de la cabine au 2ème étage puis sa descente au 1ère étage après une pause de 2s

Affectation BrocheEntrée : s0 RA0Entrée : s1 RA1Entrée : s2 RA2 Entrée : m0 RA3Entrée : m2 RA4Sortie : KM1 RB0Sortie : KM2 RB1

On associe à chaque étape une variable Xi

Le programme : program graf3;var x0,x1,x2,x3,x4,x5,x6,t2,t5 : byte;const pause:word =5000 ;beginx0:=1; x1:=0; x2:=0; x3:=0 ;x4:=0; x5:=0; x6:=0;

//Initialement seule l'étape initiale est activé

trisa:=$ff; //Le port A est configuré en entrées trisb:=$00; //Le port B est configuré en sorties portb:=0; //Initialement toutes les sorties sont à 0while true dobegin if ((x0=1) and (porta.3=1)and (porta.4=0)) then begin x0:=0; x1:=1; end

//Activation de l'étape 1 et désactivation de l'étape 0

if ((x1=1) and (porta.2=1)) then //Activation de l'étape 2et désactivation de

La programmation en mikropascal . Page 16/20

Page 17: La Programmation en Mikropascal

begin x2:=1; x1:=0; end;

l'étape 1

if ((x2=1) and (t2=1)) then begin x2:=0; x3:=1; end;

//Activation de l'étape 3 et désactivation de l'étape 2

if ((x3=1) and (porta.1=1)) then begin x3:=0; x0:=1; end;

//Activation de l'étape 0 et désactivation de l'étape 2

if ((x0=1) and (porta.3=0)and (porta.4=1)) then begin x0:=0; x4:=1; end ;

//Activation de l'étape 4 et désactivation de l'étape 0

if ((x4=1) and (porta.0=1)) then begin x5:=1; x4:=0; end;

//Activation de l'étape 5 et désactivation de l'étape 4

if ((x5=1) and (t5=1)) then begin x5:=0; x6:=1; end;

//Activation de l'étape 6 et désactivation de l'étape 5

if ((x6=1) and (porta.1=1)) then begin x6:=0; x0:=1; end;

//Activation de l'étape 0 et désactivation de l'étape 6

if ((x1=1)or(x3=1)or(x4=1)or(x6=1)) then portb.0:=1 else portb.0:=0;

//Programmation de la sortie KM1

if ((x3=1) or (x4=1)) then portb.1:=1 else portb.1:=0;

//Programmation de la sortie KM2

if x2=0 then t2:=0 else begin t2:=0; vdelay_ms(pause); t2:=1; end;

//Programmation du temporisateur T2

if x5=0 then t5:=0 else begin t5:=0; vdelay_ms(pause); t5:=1; end;

// Programmation du temporisateur T5

end; //fin tant queend. //Fin du programme

La programmation en mikropascal . Page 17/20

Page 18: La Programmation en Mikropascal

Application 7: Gestion d'un clavier matriciel par le microcontrôleur PIC16F84A.

Schéma de simulation avec ISIS Schéma structurel d'un clavier 12 touchesDans un premier lieu on s'intéressera au clavier.

Le principe de ce type de clavier est simple en effet l'appui sur une touche réalise un contact direct entre la ligne et la colonne de cette touche. Pour pouvoir lire une touche appuyée par le microcontrôleur on procède comme suit:On fait un balayage sur les colonnes c'est-à-dire on envoie les séquences suivantes  (100, 010, 001).On lit l'état des lignes sur 4 bits (A, B, C, D)

On aura le tableau de correspondance suivant :

RB0-RB1-RB2 RB3-RB4-RB5-RB6 PORTB(en décimal) Touche appuyée

1 0 0

1 0 0 0 (00001001)2=9 T110 1 0 0 (00010001)2=17 T220 0 1 00 0 0 1

0 1 0

1 0 0 0 (00001010)2=100 1 0 0 (00010010)2=180 0 1 00 0 0 1

0 0 1

1 0 0 00 1 0 00 0 1 00 0 0 1 (01000100)2=68 T#-0

On désire afficher le code binaire correspondant à la touche appuyée sur le portA

program clavier; Var T,X : byte ;begin

T:= 0 ;X:=0;TRISA := $F0 ;portA:=0;TRISB :=$F8 ;

La programmation en mikropascal . Page 18/20

Page 19: La Programmation en Mikropascal

while (1=1) do begin

PortB := 1 ; delay_ms(10) ; T := PortB ; if T=9 then x:= 1; if T=17 then x:= 4; if T=33 then x:= 7; if t=65 then x:= 10; PortA:=x ;

PortB :=2 ; delay_ms(10) ; T := PortB ; if T=10 then x := 2 ; if T=18 then x := 5 ; if T=34 then x := 8 ; if T=66 then x := 0 ; PortA := x ;

PortB := 4 ; delay_ms(10) ; T := PortB ; if T=12 then x := 3 ; if T=20 then x := 6 ; if T=36 then x := 9 ; if T=68 then x := 11 ; PortA := x ; end ;end.

On peut utiliser aussi les commandes de la librairie KeypadSyntaxe Description Exemple

Keypad_Init Keypad_Init(var port : word);

Initialiser et préciser le port sur le quel est branché le clavier

Keypad_Init(PORTB);

Keypad_Read : Keypad_Read : byte;

Vérifier si une touche est appuyée. La fonction renvoie 1 à 15, selon la touche appuyée, ou 0 si aucune touche n'est actionnée. Exemple

kp := Keypad_Read;

Keypad_Released Keypad_Released : byte

L'appel de Keypad_Released génère une attente  jusqu'à ce qu'une touche soit appuyée et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche

kp := Keypad_Released;

La programmation en mikropascal . Page 19/20

Page 20: La Programmation en Mikropascal

program clavier4x4; var kp,x,y : byte; procedure clavier; begin kp := 0; while kp=0 do begin kp := Keypad_Read(); end; x:=kp; end;

begin Keypad_Init(PORTb); trisa:=0; repeat clavier; porta:=x; until false end.

La programmation en mikropascal . Page 20/20