Académique Documents
Professionnel Documents
Culture Documents
Mon cours a été introduit dans le manuel de cours pour les élèves du BAC technologie pour plus
d'informations contactez moi sur le forum. Les schémas et les programmes sont téléchargeables sur le
site sous la page téléchargement.
ABIDI Hatem
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 :
étapes d'écriture du programme ainsi que sa mise au point d'un programme en mikropascal
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.
Un programme est un texte que le compilateur va traduire en fichier hexadécimal. Alors il doit avoir une
structure particulière.
L'entête
Ne contient qu'une ligne; commence par le mot réservé « Program » et donne un nom au programme.
Les déclarations
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.
Algorithmique
Langage PASCAL
Algorithme NomAlgorithme ;
Variables
Nomvariable
Constantes
.....
....
Fin.
Program NomProgramme ;
Var
Nomvariable : Type ;
Const
Begin
.....
.....
End.
// entête
// déclaration
// Programme
// principal
· Une ligne de commentaires doit commencer par "{" et se terminer par "}" ou commence par "//".
Type
Désignation
Taille
Rang
octet
byte
8....bit
0 .... 255
caractère
char
8....bit
0 .... 255
Mot
word
16....bit
0 .... 65535
Octet signé
short
8....bit
Entier
integer
16....bit
Entier long
longint
32....bit
Réel
real
32....bit
Tableau
Array[a..b] of type
(b-a) éléments
Rang du type
Chaîne de caractères
string[n]
n caractère
0 .... 255
Le décimal : A=10 ;
L'hexadécimal A=$0F ; ou A=0x0F ;
Le binaire A=%11010100 ;
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
>=
Supérieur ou égale
SHR
Décalage à droite
a) L'affectation :
Langage algorithmique
Langage PASCAL
a<== b+c
a :=b+c
Langage algorithmique
Langage PASCAL
SI condition ALORS
DEBUT
Traitement ;
............;
FINSI ;
IFcondition THEN
BEGIN
Traitement ;
.........
END;
SI condition ALORS
DEBUT
Traitement 1;
............;
FIN
SINON
DEBUT
Traitement 2;
............;
FINSI ;
IFcondition THEN
BEGIN
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;
Langage algorithmique
Langage PASCAL
I : entier ;
........;
FAIRE
DEBUT
Traitement ;
............;
FINFAIRE ;
I: integer;
..........
TO <Valeur finale>
DO
BEGIN
Traitement ;
........;
END;
TANQUE condition FAIRE
DEBUT
Traitement ;
............;
FINTANQUE ;
WHILE condition DO
BEGIN
Traitement ;
........;
END;
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
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
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
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;
Il s'agit des instructions exécutées par le programme à l'appel de la fonction. L'une de ces instructions
doit fournir le résultat de la fonction en l'affectant au nom de la fonction. L'appel d'une fonction se fait
en écrivant son nom suivi des paramètres nécessaires entre parenthèses. Elle représente une expression
du type du résultat fourni.
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) ;
Clearbit(port , bit) ;
A :=testbit(portB,7);affecter à la variable A
l'état de RB7
Delay_ms(temps) ;
les interruption ?
Imaginez une conversation normale. Chaque interlocuteur prend la parole quand vient son tour de
parler. Survient alors un évènement extérieur dont le traitement est urgent. Par exemple une voiture
s'engage dans votre direction. Vous imaginez bien que votre interlocuteur ne va pas attendre la fin de
votre phrase pour vous signaler le danger. Il va donc vous interrompre durant le cours normal de votre
conversation; afin de pouvoir traiter immédiatement l'événement extérieur. Les interlocuteurs
reprendront leur conversation où elle en était arrivée, sitôt le danger écarté.
L'exécution d'une procédure d'interruption répond à un évènement qui peut être interne ou externe au
microcontrôleur. L'appel d'une procédure d'interruption ne dépend pas du programme principal, mais
elle l'interrompe pendant son exécution.Dans une procédure d'interruption on ne peut pas appeler une
autre procédure. Le compilateur Mikropascal utilise une directive spéciale pour le nom de la procédure
(Procedure interrupt) pour la différencier avec les autres procédures logicielles.Syntaxe :
Procedure interrupt;
Begin
Instruction 1;
............
Instruction n;
End;
Un changement d'état sur les broches RB4 à RB7; Une source externe via la broche RB0/INT ;Le
débordement du timer 0 ;
INTCON:
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
On s'intéressera uniquement à l'interruption externe via la broche RB0/INT, donc on aura à manipuler
uniquement les trois bits suivants:
Le bit GIE, "Global lnterrupt Enable", mis à 1 autorise toutes les interruptions non masquées par leur bit
individuel.
Le bit INTE, "Interrupt Enable", mis à 1, autorise les interruptions sur RB0/INI.
Le bit INTF, "Interrupt Flag", est un indicateur, il est mis à 1 si une interruption est générée sur RB0/INI. Il
doit être remis à 0 par le logiciel dans le programme de traitement de l'interruption.
Pour activer l'interruption externe via la broche RB0/INT on doit affecter la valeur (90)H au registre
INTCON :
INTCON:
0
0
= (90)H
Pour plus d'information sur les autres sources d'interruptions consultez le document constructeur du
microcontrôleur 16F84
RÉSUMÉ :
Program nom_programme ;
Begin
while (1=1) do
begin
Instruction1;
Instruction2;
......
end ;
end.
Begin
Instruction1;
Instruction2;
......
End;
Begin
Instruction1;
Instruction2;......
Identificateur:=résultat;
End;
Begin
Instruction 1;
............;
Instruction n;
End;
Traduction d'un GRAFCET de point de vue partie commande en un programme en Mikropascal pour le
microcontrôleur PIC16F84A.- Soit le GRAFCET suivant :
Grafcet linéaire
Schéma de simulation :
Travail demandé :
1/ L'algorithme :
Algorithme grafcet1 ;
_DEBUT
| TrisB <== $FF ; // Toutes les broches du port B sont des entrées.
| _DEBUT
| | _ DEBUT
| | |_ FINSI ;
| | _ DEBUT
| | |_ FINSI ;
| | _ DEBUT
| | |_ FINSI ;
| | _DEBUT
| | |_FINSI ;
| | SI (X1=1) ALORS Porta.0 <==1 SINON Porta.0 <==0 ; FINSI; // 14M1 = X1.
| | SI (X2=1) ALORS Porta.1 <==1 SINON Porta.1 <==0 ; FINSI; // KM2 = X2.
| | SI (X3=1) ALORS Porta.2 <==1 SINON Porta.2 <==0 ; FINSI; // 12M1 = X3.
| |_FINFAIRE ;
|_ FIN.
2/ Le programme :
program GRAFCET1;
begin
begin
begin
end ;
begin
end ;
begin
end ;
begin
end ;
end;
end.
Cas d'un Grafcet avec une temporisation ici : [programme et simulation sous ISIS]
Exercice 2:
Schéma de simulation :
Travail demandé :
1/ Algorithme :
Algorithme EQUATIONS1;
_DEBUT
| trisB <== $E0; // de RB0 à RB4 sorties les autres broches : entrées .
| _DEBUT
| |// équation de S0 :
| |//équation de S1 :
| |// équation de S3
| |// équation de S4
| | _FINFAIRE;
|_FIN.
2/ Programme :
program EQUATIONS1;
_begin
| _begin // équation de S0 :
||if((portA.1=0) or (portA.2=0))then
||_end;
|_end.
Deuxième méthode
1/ Algorithme :
Algorithme EQUATIONS;
Variables S1, S2, S3, S4, S5 : octet; // déclaration des variables de sortie.
| TrisB <== $E0; //RB0, RB1, RB2, RB3, RB4 : sorties ; RB5 ....RB7 : entrées
| _ DEBUT
| |
| | S1<==S1 ET $01; // S1, S2, S3, S4, S5 sont de type octet (8 bits)
| |
| |_FINFAIRE;
|_FIN.
2/ Programme :
program EQUATIONS;
begin
trisB:=$E0; //RB0, RB1, RB2, RB3, RB4 : sorties ; RB5 ....RB7 : entrées
begin
S1:=S1 and $01; // S1, S2, S3, S4, S5 sont de type octet (8 bits)
end;
end.
Exercice 3:
Utilisation de l'interruption externe pour le comptage de pièces sur un tapis roulant dans un processus
industriel.Principe de fonctionnement :
tapis roulant
- Ce tapis roulant se trouve à la fin d'une chaine de fabrication de pièces mécaniques.- Un capteur de
proximité permet de compter le nombre de pièces fabriquées.- Un bouton poussoir RZ permet de
mettre le compteur à zéro.- Le nombre de pièce comptées est affiché par un afficher LCD.Schéma de la
carte de commande :
Travail demandé :
1/ L'algorithme :
Algorithme COMPTEUR;
Variables
// pour l'affichage.
_DEBUT
|_FIN;
_DEBUT
| lcd_config(portb,1,3,2,7,6,5,4);
| lcd_out(1,1,'N.P =');
| //afficher sur la 1ere ligne et la 1ere colonne de l'LCD " N.P= ".
| TANQUE (1=1) FAIRE // boucle infinie.
| _DEBUT
| | inttostr (compteur,nombre);
| | SI (porta.0=1) ALORS
| | // initialise le compteur.
| |_FINFAIRE;
|_FIN.
2/ Le programme :
program COMPTEUR;
Var
begin
end;
begin
begin
if (porta.0=1) then
end;
end.
On désire réaliser un compteur modulo 100 en utilisant le microcontrôleur 16F84A et deux afficheurs
sept segments.
A / Etude préliminaire :
bascule D
chronogramme
1/ On vous donne le circuit 74273, qui contient 8 bascules D avec horloge et remise à zéro communes,
proposer une solution pour réaliser un compteur modulo 100 avec le PIC16F84A.
74273
Solution :
A/
1/Première méthode :
7 segments
program COMPTEURMOD10a;
beginTrisb:=0;
portb:=0;
while (1=1) do
begin //segments [ g f e d c b a]
portb:=%00111111 ; // chiffre 0
portb:=%00000110; // chiffre 1
delay_ms(1000);
portb:=%01011011; // chiffre 2
delay_ms(1000);
portb:=%01001111; // chiffre 3
delay_ms(1000);
portb:=%01100110; // chiffre 4
delay_ms(1000);
portb:=%01101101; // chiffre 5
delay_ms(1000);
portb:=%01111101; // chiffre 6
delay_ms(1000);
portb:=%00000111; // chiffre 7
delay_ms(1000);
portb:=%01111111; // chiffre 8
delay_ms(1000);
portb:=%01101111; // chiffre 9
delay_ms(1000);
end;
end.
Deuxième méthode :
program COMPTEURMOD10b;
var i : integer;
%01111111,%01101111);
begin
Trisb:=0;
portb:=0;
while (1=1) do
begin
end;
end;
end.
2/Pour pouvoir contrôler deux afficheurs sept segments avec un microcontrôleur il faut avoir au
minimum 14 sorties sur ce dernier or le PIC16F84A ne possède que 13 entrée/sortie (8 sur le port B et 5
sur le port A) alors que faire ?
3/
chronogramme
B/1/
2/
program COMPTEURMOD100;
%01111111,%01101111);
begin
Trisa:=$FC;
porta:=0;
Trisb:=0;
portb:=0;
while (1=1) do
begin
begin
porta.0:=1; //
delay_ms(1); // Génération d'un front d'horloge sur RB0
porta.0:=0;
begin
porta.1:=1;
porta.1:=0;
end;
end;
end;
end.
Exercice 4:
gestion clavie
clavier 16 touches
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 :
balayage du clavier
On désire afficher le code binaire correspondant à la touche appuyée sur les diodes led.
Travail demandé :
Solution :
1/ Algorithme :
Algorithme clavier ;
Variables
T : octet ;
_ Début
| TRISB <== $F8 ; {RB0, RB1, RB2 : sorties ; RB3, RB4, RB5, RB6, RB7 : entrées}
| _ Début
| | T<== PortB ;
| | Attente (10ms) ;
| | T <== PortB ;
| | Attente (10ms) ;
| | T <== PortB ;
| | { sur le portA }
| |_FinFaire ;
|_Fin.
2/ Programme
program clavier;
Var T : byte ;
begin
TRISB :=$F8 ;{RB0, RB1, RB2 : sorties ; RB3, RB4, RB5, RB6, RB7 : entrées }
begin
delay_ms(10) ;
T:= PortB ;
delay_ms(10) ;
T := PortB ;
if T=4 then T := 8 ;
if T=2 then T := 5 ;
if T=1 then T := 2 ;
delay_ms(10) ;
T := PortB ;
if T=8 then T := 12 ;
if T=4 then T := 9 ;
if T=2 then T := 6 ;
end ;
end.
- Keypad Library
- Delays Library
- Util Library
1/ LCD library :
Le compilateur MikroPascal fournit une bibliothèque pour communiquer avec l'afficheur LCD utilisé
généralement en mode 4-bit
a) Lcd_Config :
Syntaxe
Lcd_Config (var port : byte; const. RS, EN, WR, D7, D6, D5, D4 : byte);
Description
Exemple
Lcd_Config (PORTD,1,2,0,3,5,4,6);b)
b) Lcd_Init :
Syntaxe
Description
Initialiser l'afficheur LCD avec le PIC en spécifiant le port uniquement, le branchement de l'LCD avec le
microcontrôleur est imposé par Mikropascal (consulter l'aide du logiciel)
Exemple
Lcd_Init (PORTB);
c) Lcd_Out :
Syntaxe
Description
Exemple
d) Lcd_Out_Cp :
Syntaxe
Description
Exemple
e) Lcd_Chr :
Syntaxe
Description
Exemple
f) Lcd_Chr_Cp :
Syntaxe
Lcd_Chr_Cp(character : byte);
Description
Exemple
g) Lcd_Cmd :
Syntaxe
Description
Envoie une commande à l'afficheur LCD. La liste complète des commandes est la suivante :
LCD_FIRST_ROW Déplacer le curseur à la 1ère ligne
2/ Keypad Library :
Le MikroPascal fournit une bibliothèque pour travailler avec les claviers matriciels.
a) Keypad_Init :
Syntaxe
Description
Keypad_Init(PORTB);
b) Keypad_Read :
Syntaxe
Keypad_Read : byte;
Description
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;
c) Keypad_Released :
Syntaxe
Keypad_Released :byte;
Description
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 à 15, selon la touche.
Exemples
kp := Keypad_Released;
3/ Delays Library :
MikroPascal fournit une procédure pour créer des temporisations.
a) Delay_us :
Syntaxe
Description
Crée un retard dont la durée en microsecondes est time_in_us (une constante). La gamme des
constantes applicables dépend de la fréquence de l'oscillateur
Exemple
b) Delay_ms :
Syntaxe
Description
Crée un retard dont la durée en millisecondes est time_in_ms (une constante). La gamme des
constantes applicables dépend de la fréquence de l'oscillateur.
Exemple
c) Vdelay_ms :
Syntaxe
Vdelay_ms(time_in_ms : word);
Description
Exemple
//....
Pause := 1000;
// ...
d) Delay_Cyc :
Syntaxe
Delay_Cyc(cycles_div_by_10 : byte);
Description
Exemple
Delay_Cyc(10);
4/ Util Library
La bibliothèque 'util library' contient des diverses routines utiles pour le développement de
programmes.
Button
Syntaxe
Description
Les Paramètres (port) et (pin) indiquent l'endroit du bouton ; le paramètre temps d'appui nécessaire
pour rendre le bouton actif ; le paramètre active_state, peut être 0 ou 1, il détermine si le bouton est
ouvert au repos ou fermé au repos.
Exemple
while true do
begin
begin
PORTD := not(PORTD);
oldstate := 0;
end;
end;
a)SetBit :
Syntaxe
Description
Exemple
b) ClearBit :
Syntaxe
Description
Exemple
c) TestBit :
Syntaxe
Description
Cette Fonction teste si le paramètre bit est égal à 1. Si oui, la fonction renvoie 1, si non elle renvoie 0.
Le Paramètre bit doit être variable.
Exemple