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/20
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 :
Analyseur statistique
Editeur de code Explorateur de code
Fenêtre des erreurs
Assistant de code
Gestionnaire 7 segments
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
III) Les barres d’outils Sauvegarder le programme en cours
nouveau projet Charger un projet existant et changer ,ses paramètres (ex : horloge, son nom (.… Ouvrir un projet
Annuler le dernière action Rétablir la dernière action
Fermer un programme
Imprimer
Sauvegarder les programmes en cours Une nouvelle page Sauvegarder un fichier existant sous un compilation .autre nom 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 :
1- Taper le nom de votre projet
2- choisir un dossier pour l'enregistrement
CIP el risiohC
-3
ed ecneuqérf al repat -4 egolroh'l
TX te FFO_TDW sesac sel rehcoC -5
KO rus reuqilc
-6
La programmation en mikropascal
.
Page 3/20
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
Charger le programme dans le microcontrôleur
Sixième étape : Chargement du programme dans le PIC16F84A Avec le logiciel Irog
La programmation en mikropascal
.
Page 5/20
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 PASCAL Algorithme NomAlgorithme ; Program NomProgramme ; Variables Nomvariable : type ; Var Nomvariable : Type ; Constantes Const Nomconstante :Type=valeur ; Nomconstante : Type := valeur ; Début Begin ……. ……. …… ……. Fin. 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 Byte (octet) Char (caractère) Word (mot) Short (Octet signé) Integer (Entier) longint (Entier long)
taille 8 bits 8 bits 16 bits 8 bits 16 bits 32 bits
La programmation en mikropascal
Plage 0 .. 255 0 .. 255 0 .. 65535 -128 .. 127 -32768 .. 32767 -2147483648 .. 2147483647
.
Array ... Gestion de tableau String ... Gestion de chaîne de caractères
Page 6/20
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 Tris Exemple Trisa=5 =Trisa= (00101)2 donne les broches RA0 et RA2 sont des entrées et les autres broches sont en sorties Trisb=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ées Les zéros configurent les broches en sorties et les uns les configurent en entrées I-6- les opérateurs arithmétiques et logiques : Opérateurs arithmétiques Opérateurs de comparaison Opérateurs logiques Opé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 >= Supérieur ou égale SHR Décalage à droite division entière I-7- Les structures usuelles : a) L’affectation : C’est l’action d’attribuer une valeur à une variable. Langage algorithmique Langage PASCAL a<== b+c a :=b+c b) Les structures alternatives : Langage algorithmique SI condition ALORS DEBUT Traitement ; …………… FINSI ;
Langage PASCAL IF condition THEN BEGIN Traitement ; …………. END;
SI condition ALORS DEBUT
IF condition THEN BEGIN
La programmation en mikropascal
.
Page 7/20
Traitement 1; …………… FIN SINON DEBUT Traitement 2; …………… FINSI ;
Traitement 1; …………. END ELSE 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 PASCAL I : entier ; I: integer; ………… ……….. POUR I
FOR I:=
JUSQU'A valeur finale TO
FAIRE DO DEBUT BEGIN Traitement ; Traitement ; …………… …………. FINFAIRE ; 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édures Ce 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 Déclarations de constantes, types, variables utilisés à l'intérieur de la procédure La programmation en mikropascal
.
Page 8/20
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. * Fonctions Une 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ête Function 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éclarations Dé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 Exemple Setbit(port , bit) ; Setbit(portB,2) ; mettre la broche RB2 à 1 Clearbit(port , bit) ; Clearbit(portB,5) ; mettre la broche RB5 à 0 Testbit(port , bit) A :=testbit(portB,7) ;affecter à la variable A l’état de RB7 Button(port,bit,temps If Button(portA,2,10,1) then
; d’appui ,état logique actif) 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
Applications Application 1: Clignotement d'un voyant tous le 1 s Affectation Entrées/Sorties H1
H1
Broche du µ contrôleur RA3
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 : Crée un retard dont la word); durée en microsecondes Delay_ms
Delay_ms(const time_in_ms Crée un retard dont la : word); durée en millisecondes
Vdelay_ms Vdelay_ms(time_in_ms : word); Delay_Cyc Delay_Cyc(cycles_div_by_ 10 : byte);
Crée un retard dont la durée en millisecondes est time_in_ms (une variable) Crée un retard dont la durée Delay_Cyc(10); est fonction de l'horloge du microcontrôleur
Algorithme Programme EX1a Début Trisa0;
Programme program EX1a; begin trisa:=0;
Porta0; Tant que vrai faire Début porta.30 Pause d'une seconde Porta.31; Pause d'une seconde Fin tant que Fin programme
porta:=0; while true do begin porta.3=0 delay_ms(1000); porta.3:=1 ; delay_ms(1000); end; end.
La programmation en mikropascal
Delay_us(10); Dix microsecondes Delay_ms(1000) une seconde
commentaire nom du programme début du programme toutes les broches du port A sont configurées en sorties Toutes les broches du port A sont à zéro boucle répétitive sans limite instructions à exécuter durant la boucle
.
Page 10/20
2éme méthode (notion du test) Algorithme Programme Programme EX1b program EX1b; Début begin trisa:=0; Trisa0; Porta0;
porta:=0;
Tant que vrai faire Début Si porta.3=0 alors Porta.31 si non porta.30; Pause d'une seconde Fin tant que; Fin programme
while true do begin if porta.3=0 then porta.3:=1 else porta.3:=0; delay_ms(1000); end; end.
commentaire nom du programme début du programme toutes les broches du port A sont configurées en sorties Toutes les broches du port A sont à zéro boucle répétitive sans limite // instructions à exécuter durant la boucle
Application 2 L'action sur un bouton poussoir S1 entraîne l'allumage d'une lampe H S1 H1
Affectation Entrées /sorties Entrée: S1 Sortie: H
Broches du microcontrôleur RA0 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 S1
S2 H1
Affectation Entrées /sorties Entrée: S1 Entrée: S2 Sortie: H
La programmation en mikropascal
Broches du microcontrôleur RA0 RA1 RA2
.
Page 11/20
1ère méthode Algorithme Algorithme EX3; Début Trisa $03; Porta 0; Tan que vrai faire Si porta.0=1 alors porta.2:=0 sinon Début Si porta.1=0 alors porta.2:=0 sinon porta.2:=1; Fin sinon; Fin du programme
Programme mikropascal program EX3; begin trisa:=$03; porta:=0; while true do if porta.0=1 then porta.2:=0 else begin if 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 H1 Algorithme Programme mikropascal Algorithme EX3a; program EX3a; Variable X de type octet var X:byte; Début begin X:=0; X0; trisa:=$03; Trisa $03; porta:=0; Porta 0; while true do Tan que vrai faire begin début if ((porta.0=0) and (porta.1:=1)) then Si (porta.0= 0 ET porta.1) =1 alors X:=1 sinon X:=1 else X:=0; X:=0; if X=0 then porta.2:=0 else porta.2:=1; Si X=0 alors porta.2:=0 si non porta.2:=1; end; Fin tant que end. Fin du programme Application 4: commande d'un moteur avec deux boutons poussoirs ( 1 seul sens de rotation) S1
S2
KM1
KM1
Affectation Entrées /sorties Broches du microcontrôleur Entrée: S1 (arrêt) RA0 Entrée: S2 (marche) RA1 Sortie: KM 1 RA3 On va associe à KM1 une variable X dont l'équation est X = RA0.( RA1 + X ) La programmation en mikropascal
.
Page 12/20
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; Application 5 (notion de procédure) Commande d'un moteur (2 sens de rotation) avec verrouillage électrique S1
S2
KM2 KM1 KM1
S3
KM1 KM2
KM2
Affectation Entrées /sorties Entrée: S1 (arrêt) Entrée: S2 (marche sens horaire ou gauche) Entrée: S3 (marche sens trigonométrique ou droite) Sortie: KM 1 (rotation sens horaire ou gauche) Sortie : KM2 (rotation sens trigonométrique ou droite) On associe une variable d à KM1 et un autre g à KM2
Broches du microcontrôleur RA0 RA1 RA2 RA3 RA4
Programme mikropascal program EX5; var d,g:byte; procedure 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;
Commentaire Nom du prgramme Déclaration des variables 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; begin trisa:=%00111; while true do begin droite; gauche; end; end.
Procédure gauche
La programmation en mikropascal
.
Programme principal
Appel de la procédure droite Appel de la procédure gauche
Page 13/20
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 B Moteur à l'arrêt En décimal119 En hexadécimal= Rotation sens horaire En décimal: En hexadécimal Rotation sens En décimal: trigonométrique 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 suivante procedure 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);
Lcd_Config (PORTB,1,2,0,3,5,4, 6); .
Lcd_Out
Lcd_Out (row, col : byte; var text : array[255] of char);
Lcd_Out_ :
Lcd_Out_(var text : array[255] of char);
Initialiser l'afficheur LCD et définir les broches du microcontrôleur à relier à l'LCD Ecrire un Texte sur l'afficheur LCD en indiquant sa position (ligne et colonne). Ecrire le texte sur l'afficheur LCD à la position actuelle
La programmation en mikropascal
.
Ecrire "Ali" sur LCD sur la ligne 1, colonne 3: Lcd_Out(1, 3, 'Ali'); Afficher " salut " à la position actuelle de curseur : Page 14/20
Lcd_Chr :
Lcd_Chr(row, col, character : byte);
Lcd_Chr_
Lcd_Chr_(character : byte);
Lcd_Cmd :
Lcd_Cmd (command : byte); Liste de commande: LCD_FIRST_ROW LCD_SECOND_ ROW LCD_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
de curseur Lcd_Out_('salut'); Ecrire un Caractère Ecrire "i" sur LCD sur l'LCD en sur la ligne 2, indiquant sa colonne 3: position (ligne et Lcd_Chr(2, 3, 'i'); colonne). Ecrire un caractère Lcd_Chr_('e'); sur l'afficheur Ecrire "e" à la LCD à la position position actuelle du actuelle de curseur. curseur. 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 then begin lcd_out(1,1,'Rotation sens ') ; lcd_out(2,1,'horaire '); end; if ((g=0) and (d=0)) then begin lcd_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) La programmation en mikropascal
.
Page 15/20
lcd_cmd(lcd_cursor_off); // éteindre le curseur Application 6 La cabine étant initialement au 1ère étage,
M
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
S
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
Broche RA0 RA1 RA2 RA3 RA4 RB0 RB1
t e u
à K C M C K M
r
1 2 : 4 MV o n 1 e t K M
t é 2 :
2
S
m
2
m
0
1
S
Affectation Entrée : s0 Entrée : s1 Entrée : s2 Entrée : m0 Entrée : m2 Sortie : KM1 Sortie : KM2
o
0
0 m
1
2 K
M
S
2
m
MK
K S
K S
2
T = 2 t / 2 s / 2
3
4
1
1
s 1M
0 MK
5
T = t / 2
62
K S
1M
2
0 2 s s / 5 M
1
1
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 ; begin x0:=1; x1:=0; x2:=0; x3:=0 ;x4:=0; x5:=0; x6:=0; trisa:=$ff; trisb:=$00; portb:=0; while true do begin if ((x0=1) and (porta.3=1)and (porta.4=0)) then begin x0:=0; x1:=1; La programmation en mikropascal
//Initialement seule l'étape initiale est activé //Le port A est configuré en entrées //Le port B est configuré en sorties //Initialement toutes les sorties sont à 0 //Activation de l'étape 1 et désactivation de l'étape 0
.
Page 16/20
D
e s c e n
end if ((x1=1) and (porta.2=1)) then begin x2:=1; x1:=0; end; if ((x2=1) and (t2=1)) then begin x2:=0; x3:=1; end; if ((x3=1) and (porta.1=1)) then begin x3:=0; x0:=1; end; if ((x0=1) and (porta.3=0)and (porta.4=1)) then begin x0:=0; x4:=1; end ; if ((x4=1) and (porta.0=1)) then begin x5:=1; x4:=0; end; if ((x5=1) and (t5=1)) then begin x5:=0; x6:=1; end; if ((x6=1) and (porta.1=1)) then begin x6:=0; x0:=1; end; if ((x1=1)or(x3=1)or(x4=1)or(x6=1)) then portb.0:=1 else portb.0:=0; if ((x3=1) or (x4=1)) then portb.1:=1 else portb.1:=0; if x2=0 then t2:=0 else begin t2:=0; vdelay_ms(pause); t2:=1; end; if x5=0 then t5:=0 else begin t5:=0; vdelay_ms(pause); t5:=1; end; end; end.
La programmation en mikropascal
//Activation de l'étape 2et désactivation de l'étape 1 //Activation de l'étape 3 et désactivation de l'étape 2 //Activation de l'étape 0 et désactivation de l'étape 2 //Activation de l'étape 4 et désactivation de l'étape 0
//Activation de l'étape 5 et désactivation de l'étape 4 //Activation de l'étape 6 et désactivation de l'étape 5 //Activation de l'étape 0 et désactivation de l'étape 6 //Programmation de la sortie KM1 //Programmation de la sortie KM2 //Programmation du temporisateur T2
// Programmation du temporisateur T5
//fin tant que //Fin du programme
.
Page 17/20
Application 7: Gestion d'un clavier matriciel par le microcontrôleur PIC16F84A. E T
1
E T
1
2
E
2
T
3
3
A T
4
T
5
T
6
T
8
T
9
T
0
T
#
B T
7
C T
*
D
Schéma de simulation avec ISIS Schéma structurel d'un clavier 12 touches Dans 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 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 1
0
0
0
1
0
0
0
1
RB3-RB4-RB5-RB6 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
PORTB(en décimal) (00001001)2=9 (00010001)2=17
Touche appuyée T11 T22
(00001010)2=10 (00010010)2=18
(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 ; La programmation en mikropascal
.
Page 18/20
portA:=0; TRISB :=$F8 ; 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 Keypad Syntaxe Description Keypad_Init Keypad_Init(var Initialiser et préciser le port port : word); sur le quel est branché le clavier Keypad_Read : Keypad_Read : Vérifier si une touche est byte; appuyée. La fonction renvoie 1 à 15, selon la touche appuyée, ou 0 si aucune touche n'est actionnée. Exemple Keypad_Released Keypad_Release L'appel de d : byte Keypad_Released génère une attente jusqu'à ce qu'une touche soit appuyée La programmation en mikropascal
.
Exemple Keypad_Init(PORTB) ; kp := Keypad_Read;
kp := Keypad_Released;
Page 19/20
et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche 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