Vous êtes sur la page 1sur 20

Rpublique tunisienne Ministre de l'ducation et de la formation Direction gnrale des programmes et de la formation continue

Module de formation Technologie (gnie lectrique) 3me et 4me annes secondaire Section sciences techniques

La programmation A V E C

La programmation en mikropascal

Page 1/20

Prsentation du Mikropascal I) Introduction :


Conu par la socit Mikroelektronika, le compilateur PASCAL nouvelle gnration "MikroPASCAL" pour microcontrleurs PIC bnficie d'une prise en main trs intuitive et d'une ergonomie sans faille. Ces trs nombreux outils intgrs (mode simulateur, terminal de communication, gestionnaire 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code...) associ sa capacit pouvoir grer la plupart des priphriques rencontrs 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 dveloppement

II) Description du logiciel Mikropascal :

Analyseur statistique

Editeur de code
Explorateur de code

Fentre des erreurs

Assistant de code

Gestionnaire 7 segments

Le compilateur Mikropascal nous permet de dvelopper rapidement des applications : complexes crivez votre code source de Pascal en utilisant le rdacteur intgr de code (les aides de code et de paramtre, Accentuer de syntaxe, correction automatique, etc.) Employez les bibliothques Mikropascal incluses pour acclrer nettement le dveloppement : acquisition de donnes, mmoire, affichages, conversions. Surveillez votre structure de programme, variables, et fonctions dans l'explorateur de code. Inspectez l'coulement de programme et corrigez la logique excutable avec le programme de mise au point intgr. Obtenez les rapports et les graphiques dtaills : Carte de RAM et de ROM, codez les statistiques, impression d'assemblage, etc.

La programmation en mikropascal

Page 2/20

III) Les barres doutils


nouveau projet Charger un projet existant et changer ,ses paramtres (ex : horloge, son nom (. Ouvrir un projet Fermer un programme Sauvegarder le programme en cours Annuler le dernire action Rtablir la dernire action Imprimer

Sauvegarder les programmes en cours Une nouvelle page Sauvegarder un fichier existant sous un compilation .autre nom Afficher le fichier .asm aprs compilation VI) Manipulation : .Sur votre PC lancer le compilateur mikropascal Premire tape Cration dun nouveau projet : Project New Project

Deuxime tape Choix des paramtres du projet :

1- Taper le nom de votre projet

2- choisir un dossier pour l'enregistrement

CIP el risiohC

-3

ed ecneuqrf al repat -4 egolroh'l

TX te FFO_TDW sesac sel rehcoC -5

KO rus reuqilc

La programmation en mikropascal

Page 3/20

Troisime 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. Quatrime tape : Compilation: Project ----- build (ou cliquer sur )

La barre de progrs semblera vous informer au sujet du statut de compilation. S'il y a des erreurs, on vous annoncera dans la fentre derreur. Si aucune erreur n'est produite,

Cinquime 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 microcontrleur

Sixime tape : Chargement du programme dans le PIC16F84A Avec le logiciel Icprog

La programmation en mikropascal

Page 5/20

La programmation en langage volu :


Que ce soit par la mthode graphique ou en langage volu, lcriture du programme ainsi que sa mise au point doivent suivre le diagramme suivant : Il faut traduire le cahier des charges en une suite ordonne dactions que doit raliser le processus de commande, cette suite doprations sera dcompose en actions lmentaires ou instructions cest lAlgorithme. 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 sintressera au langage MIKROPASCAL. I-1- Structure dun programme : Un programme est un texte que le compilateur va traduire en fichier hexadcimal. Alors il doit avoir une structure particulire. Le texte d'un programme contient au moins trois parties. L'entte Ne contient qu'une ligne; commence par le mot rserv Program et donne un nom au programme. Les dclarations Elles permettent de dfinir les lments utiliss dans le programme. En effet on devra dclarer les variables utilises pour permettre au compilateur d'effectuer les rservations de mmoire ainsi que les sous-programmes (Procdures et fonctions). Le corps du programme Commence par le mot rserv Begin et se termine par le mot rserv "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 ; Dbut Begin . . . Fin. End. I-2- Les Rgles 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 dinstructions commence par "Begin" et se termine par "End;" I-3Les types de variables utilises en Mikropascal : taille 8 bits 8 bits 16 bits 8 bits 16 bits 32 bits Plage 0 .. 255 0 .. 255 0 .. 65535 -128 .. 127 -32768 .. 32767 -2147483648 .. 2147483647 Array ... Gestion de tableau String ... Gestion de chane de caractres

Type Byte (octet) Char (caractre) Word (mot) Short (Octet sign) Integer (Entier) longint (Entier long)

La programmation en mikropascal

Page 6/20

I-4- Les bases du compilateur Mikropascal : Le dcimal : A=26 ; Lhexadcimal A=$1A ; ou A=0x1A ; Le binaire A=%00011010 ; Vous pouvez utiliser la commande QConvertor pour convertir un entier dcimal en binaire ou en hexadcimal

I-5 Configuration des registres en entres/ sorties Pour configurer les broches d'un port en sorties ou en entres on utilise la commande Tris Exemple Trisa=5 =Trisa= (00101)2 donne les broches RA0 et RA2 sont des entres 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 entres Les zros configurent les broches en sorties et les uns les configurent en entres I-6- les oprateurs arithmtiques et logiques : Oprateurs arithmtiques Oprateurs de comparaison Oprateurs logiques Oprateur Opration Oprateur Opration Oprateur Opration + Addition = Egalit AND ET Soustraction <> Diffrent OR OU * Multiplication > Suprieur XOR OU exclusif / Division < Infrieur NOT NON div Division entire <= Infrieur ou gale SHL Dcalage gauche mod Reste de la >= Suprieur ou gale SHR Dcalage droite division entire I-7- Les structures usuelles : a) Laffectation : Cest laction dattribuer 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 ; SI condition ALORS DEBUT
La programmation en mikropascal

Langage PASCAL IF condition THEN BEGIN Traitement ; . END; IF condition THEN BEGIN
. Page 7/20

Traitement 1; FIN SINON DEBUT Traitement 2; FINSI ; SELON expression Valeur_1 : action_ 1 ; ... Valeur_n : action_n ; autrement : action_0 ; FINSELON ;

Traitement 1; . END ELSE BEGIN Traitement 2; . END; CASE expression OF Valeur_1 :action_1; Valeur_n : action _n ; ELSE action_0 ; END;

c) Les structures itratives ou rptitives : Langage algorithmique Langage PASCAL I : entier ; I: integer; .. POUR I <variant de Valeur initiale> FOR I:= <valeur initiale> JUSQU'A valeur finale TO <Valeur finale> FAIRE DO DEBUT BEGIN Traitement ; Traitement ; . FINFAIRE ; END; TANQUE condition FAIRE DEBUT Traitement ; FINTANQUE ; WHILE condition DO BEGIN Traitement ; . END;

d) Les procdures et les fonctions Une suite d'instructions peut tre rassemble en un bloc qui peut tre appel depuis plusieurs endroits d'un programme. Ceci donne lieu aux notions de sous programme appel aussi procdures ou fonctions. * Procdures Ce sont des groupes d'instructions qui vont former une nouvelle instruction simple utilisable dans un programme. En Pascal il faut les dfinir avant de les utiliser. Ceci se fait en utilisant une structure similaire celle d'un programme. Entte Procedure Identificateur (Param1:Type1, Param2:Type2,...); Identificateur est le nom de la procdure; Param1, Param2 ... sont des paramtres que le programme fournit la procdure sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramtres. Dclarations Dclarations de constantes, types, variables utiliss l'intrieur de la procdure
La programmation en mikropascal . Page 8/20

Corps de la procdure Begin Instruction1; Instruction2;.. End; Il s'agit des instructions excutes par le programme l'appel de la procdure. Une procdure peut appeler d'autres procdures dfinies avant elle. L'appel d'une procdure se fait en crivant son nom suivi des paramtres ncessaires entre parenthses. * Fonctions Une fonction est une procdure qui devra fournir un rsultat de type numrique ou chane de caractres. La dfinition se fait en utilisant une structure similaire celle de la procdure. Entte Function Identificateur (Param1:Type1, Param2:Type2,...):Type_R; Identificateur est le nom de la procdure; Param1, Param2 ... sont des paramtres que le programme fournit la fonction sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramtres; Type_R est le type du rsultat fourni par la fonction. Dclarations Dclarations de constantes, types, variables utiliss l'intrieur de la fonction. Corps de la fonction Begin Instruction1; Instruction2;.. Identificateur:=rsultat; End; I-7- Les fonctions adaptes aux microcontrleurs PIC : Le compilateur mikropascal apporte une large bibliothque de procdures et fonctions adaptes aux microcontrleurs de la famille PIC de MICROCHIP. Ces fonctions sont accessibles dans laide du logiciel nanmoins on va citer quelque une. Fonctions / Procdures 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 ltat de RB7 Button(port,bit,temps If Button(portA,2,10,1) then <Action 1> ; dappui ,tat logique actif) On teste lappui sur un bouton poussoir reli la broche RA2 pendant 10 ms pour faire lAction 1

La programmation en mikropascal

Page 9/20

Applications
Application 1: Clignotement d'un voyant tous le 1 s Affectation Entres/Sorties H1
H1

Broche du contrleur RA3

1re mthode (notion de la pause) MikroPascal fournit une procdure pour crer des temporisations. Delay_us Delay_us(const time_in_us : Cre un retard dont la word); dure en microsecondes Delay_ms Delay_ms(const time_in_ms Cre un retard dont la : word); dure en millisecondes

Delay_us(10); Dix microsecondes Delay_ms(1000) une seconde

Vdelay_ms Vdelay_ms(time_in_ms : word); Delay_Cyc Delay_Cyc(cycles_div_by_ 10 : byte);

Cre un retard dont la dure en millisecondes est time_in_ms (une variable) Cre un retard dont la dure Delay_Cyc(10); est fonction de l'horloge du microcontrleur commentaire nom du programme dbut du programme toutes les broches du port A sont configures en sorties Toutes les broches du port A sont zro boucle rptitive sans limite instructions excuter durant la boucle

Algorithme Programme EX1a Dbut Trisa0; Porta0; Tant que vrai faire Dbut porta.30 Pause d'une seconde Porta.31; Pause d'une seconde Fin tant que Fin programme

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.

La programmation en mikropascal

Page 10/20

2me mthode (notion du test) Algorithme Programme Programme EX1b program EX1b; Dbut begin trisa:=0; Trisa0; Porta0; Tant que vrai faire Dbut Si porta.3=0 alors Porta.31 si non porta.30; Pause d'une seconde Fin tant que; Fin programme porta:=0; 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 dbut du programme toutes les broches du port A sont configures en sorties Toutes les broches du port A sont zro boucle rptitive sans limite // instructions excuter durant la boucle

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


S1

Affectation Entres /sorties Entre: S1 Sortie: H

H1

Broches du microcontrleur RA0 RA3

Dans le programme de l'EX1b - Remplacer l'instruction trisa:=0 par trisa:=1 pour configurer la broche RA0 en entre 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 entre sur la broche RA0 Application 3
S1 S2 H1

Affectation Entres /sorties Entre: S1 Entre: S2 Sortie: H

Broches du microcontrleur RA0 RA1 RA2

La programmation en mikropascal

Page 11/20

1re mthode Algorithme Algorithme EX3; Dbut Trisa $03; Porta 0; Tan que vrai faire Si porta.0=1 alors porta.2:=0 sinon Dbut 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.

2me mthode (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; Dbut begin X:=0; X0; trisa:=$03; Trisa $03; porta:=0; Porta 0; while true do Tan que vrai faire begin dbut 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 Entres /sorties Broches du microcontrleur Entre: S1 (arrt) RA0 Entre: 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 procdure) Commande d'un moteur (2 sens de rotation) avec verrouillage lectrique
S1 S2

KM2 KM1
KM1

S3

KM1
KM2

KM2

Affectation Entres /sorties Entre: S1 (arrt) Entre: S2 (marche sens horaire ou gauche) Entre: S3 (marche sens trigonomtrique ou droite) Sortie: KM 1 (rotation sens horaire ou gauche) Sortie : KM2 (rotation sens trigonomtrique ou droite) On associe une variable d KM1 et un autre g KM2 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; 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.

Broches du microcontrleur RA0 RA1 RA2 RA3 RA4 Commentaire Nom du prgramme Dclaration des variables Procdure droite

Procdure gauche

Programme principal

Appel de la procdure droite Appel de la procdure gauche

La programmation en mikropascal

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 affecte au port B Moteur l'arrt En dcimal119 En hexadcimal= Rotation sens horaire En dcimal: En hexadcimal Rotation sens En dcimal: trigonomtrique En hexadcimal Pour retrouver les codes correspondants aux diffrents tats de l'afficheur dans le menu tools choisir la commande seven segment convertor

Ajouter au programme la procdure 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 procdure 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 bibliothque pour communiquer avec l'afficheur LCD utilis gnralement en mode 4-bit Syntaxe Lcd_Config Lcd_Config (var port : byte; const. RS, EN, WR, D7, D6, D5, D4 : byte); Lcd_Out (row, col : byte; var text : array[255] of char); Description Initialiser l'afficheur LCD et dfinir les broches du microcontrleur 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
.

Exemple Lcd_Config (PORTB,1,2,0,3,5,4, 6); . 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_Out

Lcd_Out_Cp :

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

La programmation en mikropascal

Lcd_Chr :

Lcd_Chr(row, col, character : byte);

Lcd_Chr_Cp

Lcd_Chr_Cp(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_Cp('salut'); Ecrire un Caractre 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 caractre Lcd_Chr_Cp('e'); sur l'afficheur Ecrire "e" la LCD la position position actuelle du actuelle de curseur. curseur. Envoie une commande l'afficheur LCD Dplacer le curseur la 1re ligne Dplacer le curseur la 2 me ligne Dplacer le curseur la 3 me ligne Dplacer le curseur la 4 me ligne Effacer le contenu de l'afficheur LCD Retour du Curseur la position initiale Arrter le curseur Dplacer le curseur gauche Dplacer le curseur droite Activer l'affichage sur l'afficheur LCD Arrter l'affichage sur l'afficheur LCD Dcalage de l'affichage gauche Dcalage de l'affichage droite

Remplace la procdure 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 1re tage, L'action sur un bouton m0 entrane la descente de la cabine au rez-de-chausse puis sa mont au 1re tage aprs une pause de 2s L'action sur un bouton m2 entrane la mont de la cabine au 2me tage puis sa descente au 1re tage aprs une pause de 2s
S S

t e u

K C M C K M

1 2 :4 M o n V 1 e t K M

t 2 :

e s c e n

2 m 2

Affectation Entre : s0 Entre : s1 Entre : s2 Entre : m0 Entre : m2 Sortie : KM1 Sortie : KM2

Broche RA0 RA1 RA2 RA3 RA4 RB0 RB1

0
m 2 K S 2 s 1M M 1 m 0 K S MK 0 2 s s / 5 M 1 1 1M 2

1 2 3
S

4 5 62
S

T = 2 t / 2 s / 2 K 1 MK

T = t / 2 K

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 entres //Le port B est configur en sorties //Initialement toutes les sorties sont 0 //Activation de l'tape 1 et dsactivation de l'tape 0

Page 16/20

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.

//Activation de l'tape 2et dsactivation de l'tape 1 //Activation de l'tape 3 et dsactivation de l'tape 2 //Activation de l'tape 0 et dsactivation de l'tape 2 //Activation de l'tape 4 et dsactivation de l'tape 0

//Activation de l'tape 5 et dsactivation de l'tape 4 //Activation de l'tape 6 et dsactivation de l'tape 5 //Activation de l'tape 0 et dsactivation 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

La programmation en mikropascal

Page 17/20

Application 7: Gestion d'un clavier matriciel par le microcontrleur PIC16F84A.


E
T 1

1
T 2

2
T 3

A
T 4 T 5 T 6

B
T 7 T 8 T 9

C
T * T 0 T #

Schma de simulation avec ISIS Schma structurel d'un clavier 12 touches Dans un premier lieu on s'intressera au clavier. Le principe de ce type de clavier est simple en effet l'appui sur une touche ralise un contact direct entre la ligne et la colonne de cette touche. Pour pouvoir lire une touche appuye par le microcontrleur on procde comme suit: On fait un balayage sur les colonnes c'est--dire on envoie les squences 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 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 dcimal) (00001001)2=9 (00010001)2=17 Touche appuye T11 T22

(00001010)2=10 (00010010)2=18

(01000100)2=68

T#-0

On dsire afficher le code binaire correspondant la touche appuye 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 prciser le port port : word); sur le quel est branch le clavier Keypad_Read : Keypad_Read : Vrifier si une touche est byte; appuye. La fonction renvoie 1 15, selon la touche appuye, ou 0 si aucune touche n'est actionne. Exemple Keypad_Released Keypad_Release L'appel de d : byte Keypad_Released gnre une attente jusqu' ce qu'une touche soit appuye
La programmation en mikropascal .

Exemple Keypad_Init(PORTB) ; kp := Keypad_Read;

kp := Keypad_Released;

Page 19/20

et libre. Une fois libre, 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