Vous êtes sur la page 1sur 20

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

années secondaire Section sciences techniques La programmation A V E C 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

rencontrés dans l'industrie (Bus I2C™, 1Wire™, SPI™, RS485, Bus CAN™, cartes compact

Flash, signaux PWM, afficheurs LCD et 7 segments

II) Description du logiciel Mikropascal :

)

associé à sa capacité à pouvoir gérer la plupart des périphériques

)

on font un outils de développement

Analyseur statistique Editeur de code Explorateur de code Assistant de code Fenêtre des Gestionnaire 7
Analyseur statistique
Editeur de code
Explorateur de code
Assistant de code
Fenêtre des
Gestionnaire 7 segments
erreurs

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.…

I II) Les barres d’outils

nouveau projet Sauvegarder le programme en cours

nouveau projet

nouveau projet Sauvegarder le programme en cours

Sauvegarder le programme en cours

Charger un projet existant et changer ,ses paramètres (ex : horloge, son nom (.… Annuler

Charger un projet existant et changer ,ses paramètres (ex : horloge, son nom (.…

Charger un projet existant et changer ,ses paramètres (ex : horloge, son nom (.… Annuler le

Annuler le dernière action

Ouvrir un projet Rétablir la dernière action

Ouvrir un projet

Ouvrir un projet Rétablir la dernière action

Rétablir la dernière action

Fermer un programme Imprimer

Fermer un programme

Fermer un programme Imprimer

Imprimer

Sauvegarder les programmes en cours Une nouvelle page

Sauvegarder les programmes en cours

Sauvegarder les programmes en cours Une nouvelle page

Une nouvelle page

Sauvegarder un fichier existant sous un .autre nom compilation

Sauvegarder un fichier existant sous un .autre nom

Sauvegarder un fichier existant sous un .autre nom compilation

compilation

Afficher le fichier .asm après 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

Création d’un nouveau projet : Project  New Project Deuxième étape Choix des paramètres du projet

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

CIP el risiohC ed ecneuqérf al repat -4 egolroh'l -6
CIP el risiohC
ed ecneuqérf al repat -4
egolroh'l
-6
1- Taper le nom de votre projet
1- Taper le nom de votre projet
2- choisir un dossier pour l'enregistrement - 3
2- choisir un dossier pour
l'enregistrement
- 3

TX te FFO_TDW sesac sel rehcoC -5

KO rus reuqilc

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

: Compilation : Project -----  build (ou cliquer sur ) La barre de progrès semblera

)

: Compilation : Project -----  build (ou cliquer sur ) La barre de progrès semblera

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,

la fenêtre d’erreur. Si aucune erreur n'est produite, Cinquième étape : Simulation La simulation du programme

Cinquième étape : Simulation

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

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

Charger le programme dans le microcontrôleur

Charger le programme dans le microcontrôleur Sixième étape : Chargement du programme dans le PIC16F84A Avec
Charger le programme dans le microcontrôleur Sixième étape : Chargement du programme dans le PIC16F84A Avec

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

: Chargement du programme dans le PIC16F84A Avec le logiciel Icprog 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

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

Langage PASCAL

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

Byte (octet)

8

bits

0

255

tableau

Char (caractère)

8

bits

0

255

String

Gestion de chaîne

     

Word (mot)

16

bits

0

65535

 

de caractères

Short (Octet signé)

8

bits

-128

127

Integer (Entier)

16

bits

-32768

32767

longint (Entier long)

32

bits

-2147483648

2147483647

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

convertir un entier décimal en binaire ou en hexadécimal I-5 Configuration des registres en entrées/ sorties

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=0Trisb(00000000) 2 toutes les broches du port B sont en sorties Trisb=240Trisb=(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 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 PASCAL

a<== b+c

a :=b+c

b) Les structures alternatives :

Langage algorithmique

Langage PASCAL

SI condition ALORS DEBUT Traitement ; …………… FINSI ;

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 ; ………… POUR I <variant de Valeur initiale> JUSQU'A valeur finale FAIRE DEBUT Traitement ; …………… FINFAIRE ;

I: integer; ……… FOR I:= <valeur initiale> TO <Valeur finale> DO BEGIN Traitement ; …………. 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

programme fournit à la procédure sous forme de constantes, de variables ou d'expressions;

Type1, Type2

);

sont des paramètres que le

sont les types de ces paramètres.

Déclarations 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.

* 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,

Identificateur est le nom de la procédure; Param1, Param2

):Type_R; sont des paramètres que le

programme fournit à la fonction sous forme de constantes, de variables ou d'expressions;

Type1, Type2

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

sont les types de ces paramètres; Type_R est le type du résultat fourni par la

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

Applications

Application 1:

Clignotement d'un voyant tous le 1 s

Affectation

Entrées/Sorties

Broche du µ contrôleur

H1

RA3

1ére méthode (notion de la pause)

H1 RA3 1ére méthode ( notion de la pause ) H1 MikroPascal fournit une procédure pour

H1

MikroPascal fournit une procédure pour créer des temporisations.

Delay_us

Delay_us(const time_in_us :

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

Delay_us(10);

word);

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 :

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

 

word);

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

commentaire

 

Programme EX1a Début Trisa 0;

program EX1a; begin

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

trisa:=0;

Porta 0; Tant que vrai faire Début porta.3 0 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);

delay_ms(1000); instructions à exécuter durant la boucle

instructions à exécuter durant la boucle

porta.3:=1 ;

delay_ms(1000);

end;

 

end.

2éme méthode (notion du test)

Algorithme

Programme

commentaire

Programme EX1b Début Trisa 0;

program EX1b; begin

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

trisa:=0;

Porta 0;

porta:=0;

Tant que vrai faire Début Si porta.3=0 alors Porta.31 si non porta.3 0; 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.

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

S1
S1
poussoir S1 entraîne l'allumage d'une lampe H S1 H1 Affectation Entrées /sorties Broches du

H1

Affectation

Entrées /sorties

Broches du microcontrôleur

Entrée: S1

RA0

Sortie: 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

S1 S2
S1
S2
ajoutant une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches

H1

une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du
une entrée sur la broche RA0 Application 3 S1 S2 H1 Affectation Entrées /sorties Broches du

Affectation

Entrées /sorties

Broches du microcontrôleur

Entrée: S1

RA0

Entrée: S2

RA1

Sortie: H

RA2

1ère méthode

Algorithme

Programme mikropascal

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

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.2:=1;

porta.3:=1;

Fin sinon; Fin du programme

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; Variable X de type octet Début

program EX3a; var X:byte; begin

X

0;

X:=0;

Trisa $03; Porta 0; Tan que vrai faire début Si (porta.0= 0 ET porta.1) =1 alors X:=1 sinon

X:=0;

trisa:=$03;

porta:=0;

while true do begin if ((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.

Si X=0 alors porta.2:=0 si non porta.2:=1; Fin tant que Fin du programme

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

S1 S2 KM1 KM1
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 )

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
S1
S2
KM2
KM1
KM1
S3
KM1
KM2
KM2

Affectation

Entrées /sorties

Broches du microcontrôleur

Entrée: S1 (arrêt)

RA0

Entrée: S2 (marche sens horaire ou gauche)

RA1

Entrée: S3

(marche sens trigonométrique ou droite)

RA2

Sortie: KM 1 (rotation sens horaire ou gauche)

RA3

Sortie : 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 prgramme

var d,g:byte;

Déclaration des variables

procedure droite; begin if ((porta.0=0)and((porta.1=1)or (d=1)) and (g=0))

Procédure droite

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;

Procédure gauche

begin

Programme principal

 

trisa:=%00111;

while true do begin droite; gauche;

Appel de la procédure droite Appel de la procédure gauche

end;

end.

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

Etat de l'afficheur
Etat de l'afficheur

Valeur affectée au port B

Moteur à l'arrêt

Moteur à l'arrêt   En décimal119
Moteur à l'arrêt   En décimal119
 

En décimal119

En hexadécimal=

En hexadécimal=

Rotation sens horaire

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

En décimal:

  En hexadécimal
  En hexadécimal
 

En hexadécimal

Rotation sens horaire En décimal:   En hexadécimal Rotation sens trigonométrique En décimal: En

Rotation sens trigonométrique

Rotation sens trigonométrique En décimal:
Rotation sens trigonométrique En décimal:

En décimal:

En hexadécimal
En hexadé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

le menu tools choisir la commande seven segment convertor Ajouter au programme la procédure suivante procedure

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);

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]

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

Afficher " salut " à la position actuelle de curseur :

:

of char);

   

de curseur

Lcd_Out_Cp('salut');

Lcd_Chr :

Lcd_Chr(row, col, character :

Ecrire un Caractère sur l'LCD en indiquant sa position (ligne et colonne).

Ecrire "i" sur LCD sur la ligne 2, colonne 3:

Lcd_Chr(2, 3, 'i');

byte);

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:

Envoie une commande à l'afficheur LCD

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

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

LCD_TURN_ON

LCD_TURN_OFF

LCD_SHIFT_LEFT

LCD_SHIFT_RIGHT

 

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)

lcd_cmd(lcd_cursor_off); // éteindre le curseur

Application 6 La 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

K M 1 : o n t é M o t e u r à
K
M
1
:
o
n
t
é
M
o
t
e
u
r
à
C
C
2
4
M V
K
M
1
e
t
K
M
2
S
2
m
2
S
1
S
0
m
0

Affectation

Entrée : s0

Entrée : s1

Entrée : s2

Entrée : m0

Entrée : m2

Sortie : KM1

Sortie : KM2

Broche

RA0

RA1

RA2

RA3

RA4

RB0

RB1

0 m 2 m 0 1 K M 1 4 K M K 1 M
0
m
2
m
0
1
K
M
1
4
K
M
K
1
M
S
2
S
0
2
5
T
=
2
s
T
=
2
t
/
2
s
/
2
t
/
2
s
/
5
3
K
M
K
1
M
6
2
K
M
1
S
1
S
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;

//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 à 0

while true do begin if ((x0=1) and (porta.3=1)and (porta.4=0)) then begin x0:=0; x1:=1;

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

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:=0;

portb.1:=1 else

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;

//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

end;

//fin tant que

end.

//Fin du programme

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

Schéma de simulation avec ISIS E 1 E 2 E 3   T 1 T

Schéma de simulation avec ISIS

E

1

E

2

E

3

 

T

1

  T 1 T 2 T 3

T

2

2

T

3

  T 1 T 2 T 3

A

A
 
A    
A    
 
A    
A    
A    
A    
   
 

T

4

 

T

5

T

6

B

B
 
B  
B  
B  
B  
B  
B  
   
 

T

7

 

T

8

T

9

C

C
 
C  
C  
C  
C  
C  
C  
   
 

T

*

 

T

0

T

#

D

D
 
D  
D  
D  
D  
D  
D  
 

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

0

(00001001)2=9

T1 1

1

0

0

0

1

0

0

(00010001)2=17

T2 2

0

0

1

0

   
 

0

0

0

1

   
 

1

0

0

0

(00001010)2=10

 

0

1

0

0

1

0

0

(00010010)2=18

 

0

0

1

0

   
 

0

0

0

1

   
 

1

0

0

0

   

0

1

0

0

   

0

0

1

0

0

1

0

   
 

0

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 ;

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

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 :

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;

byte;

Keypad_Released

Keypad_Release d : byte

L'appel de Keypad_Released génère une attente jusqu'à ce qu'une touche soit appuyée

kp := Keypad_Released;

et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche
et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche

et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche

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.

Keypad_Init(PORTb); trisa:=0; repeat clavier; porta:=x; until false end. La programmation en mikropascal . Page 20/20