Vous êtes sur la page 1sur 89

Support de cours et TP :

Pour classes BTS : 1ELT

=
Conception et simulation des
systmes PIC

A.TAOUNI
Lyce Alkhaouarizmy
CASABLANCA

Programmation avec MikroC PRO


Simulation en Proteus ISIS

Support de cours : Conception et simulation des systmes PIC

1 ELT

Table des matires


1.

2.

Le compilateur MikroC et les PICmicro

1.1 Le compilateur mikroC PRO.

Principes du Langage C..

2.1
2.2
2.3
2.4
2.5
2.6

Dclaration des variables en C.


Les formats numriques dans le langage C..
Les oprateurs en langage C .
Les fonctions en langage C.
Cration dun programme en langage C.
Formes conditionnelles et itration en langage C .
2.6.1 Cration des conditions logiques en C
2.6.2 Linstruction conditionnelle if et if else
2.6.3 Linstruction switch case
2.6.4 Les formes itratives while et do while..
2.6.5 La forme itrative for..
2.6.6 Utilisation des formes itratives imbriques

6
8
9
13
15
15
16
16
17
18
18
18

Le simulateur ISIS de Proteus

20

3.1 Les bases du simulateur ISIS.

20

4.

Cration du premier programme en MikroC PRO..

24

5.

Affichage des donnes ...

30

5.1 Affichage 7 segments .


5.1.1 Contrle de laffichage 7 segments.
5.1.2 Contrle de laffichage dynamique 7 segments
5.2 Afficheur LCD.
5.2.1 Fonctions daffichage des caractres.
5.2.2 Fonctions daffichage des chaines de caractres ..
5.2.3 Affichage des valeurs numriques .

30
30
33
35
39
41
42

Systmes dentre des donnes

45

6.1 Utilisation des boutons .


6.2 Utilisation des DipSwitch

45
47

Conversion AD et DA .

50

7.1 Conversion AD ou ADC ..


7.2 Conversion DA ou DAC
7.2.1 Conversion DA avec PWM.
7.2.2 Conversion DA avec rseau R2R.

50
51
51
54

Les PICs ..

58

8.1 Les microcontrleurs ....


8.2 Les PICs de Microchip..
8.3 Identification du PIC .

58
58
58

3.

6.

7.

8.

Support de cours

Page 1

Support de cours : Conception et simulation des systmes PIC

1 ELT

Affichage des donnes .....

60

9.1 Organisation du 16F84 .


9.2 La mmoire du PIC ..
9.3 Lhorloge
9.4 LALU et laccumulateur W .
9.5 Brochage du PIC ...
9.6 Les registres ...
9.6.1 Registre dtat
9.6.2 Registres du Timer.
9.6.3 Registres des ports ..
9.7 Les interruptions ..
9.8 LEEPROM des donnes

60
60
61
62
62
63
64
64
64
65
65

10. Le PIC 16F877 ..

67

9.

10.1
10.2
10.3
10.4
10.5

Les lments de base du PIC 16F877 ....


Organisation du PIC 16F877 ..
Organisation de la mmoire RAM...
Registres .
Le convertisseur A/N

67
67
68
68
70

11. Les capteurs ........................................................................................................................

71

11.1 Capteur de temprature LM35....


11.2 Capteur de temprature ..

71
73

TD/TP .. ..

Support de cours

76

Page 2

Support de cours : Conception et simulation des systmes PIC

1 ELT

1. Le compilateur MikroC et les PICmicro


Un microcontrleur est un circuit lectronique encapsul dans un circuit de haut niveau dintgration.
Les microcontrleurs sont commercialiss par diffrents fabricants comme Freescale, Motorola, Intel,
Philips, et Microchip.
Microchip en particulier, est un fabricant des circuits lectroniques. Dans leurs lignes de production,
on trouve les microcontrleurs PICmicro, qui sont disponibles dans des diffrentes familles, certaines
d'entre elles sont: 12F, 16F, 18F, 24F, 30F, 33F etc.
Le promoteur du projet choisit la famille et la rfrence qui rpondent ses besoins, comme un PIC
12F675 ; microcontrleur 8 broches avec des modules intgrs de base tels que le Timer et lADC. Un
microcontrleur comme le 16F877 dispose de 40 broches et des modules tels que: Timer, ADC,
USART, I2C, PWM, entre autres. On peut facilement voir la diffrence entre ces deux PIC.

Figure 1-1

La documentation technique, la commercialisation massive et l'incroyable quantit d'informations


publies sur les microcontrleurs PIC, les rendent idals pour lenseignement. Lentreprise Microchip
a le portail web www.microchip.com o on peut tlcharger des informations et des applications
logiciels qui facilitent le dveloppement avec ses microcontrleurs.
Fondamentalement, le dveloppement dune application base de microcontrleur PIC consiste
identifier les problmes de dveloppement, diter, dboguer le programme machine et programmer le
microcontrleur avec un programmateur spcifique pour PICmicro. Microchip fournit des
programmateurs spcialiss dans diffrentes chelles, peut-tre le plus populaire est le PICSTART
plus, mais il ya d'autres comme PICkit2, PICkit3. Bien qu'il existe des programmateurs commerciaux
un dveloppeur peut construire ou acheter un programmateur ducatif faible cot, pour cela, il y a
amplement d'information sur Internet.

Figure 1-2

Support de cours

Page 3

Support de cours : Conception et simulation des systmes PIC

1 ELT

Un microcontrleur a une architecture de base similaire celle d'un PC ,dispose d'un bloc OTP ou
mmoire Flash dans lequel sont stockes les instructions du programme, cette section est similaire au
disque dur de l'ordinateur, le PICmicro a une RAM, qui joue le mme rle de la mmoire vive d'un
ordinateur personnel, le microcontrleur possde des ports d'entre et de sortie qui sont similaires aux
priphriques d'entre et de sortie pour ordinateur tel que souris, une imprimante, un cran, un clavier,
et autres.
Ces caractristiques du microcontrleur le rendent idal pour la cration de petites applications qui ont
une interface utilisateur, comme des claviers, des boutons, des lecteurs de la mmoire de stockage de
masse, et des capteurs de diffrentes grandeurs telles que la temprature, l'humidit, la pression, la
lumire, la proximit, etc. De mme, il est possible de crer des environnements de visualisation avec
des afficheurs numriques, alphanumriques et graphiques. Les ports srie comme USART et l'USB
peuvent crer des communications srie et des communications sans fil avec d'autres appareils. En
bref, les possibilits sont sans fin.

1.1 Le compilateur MikroC PRO


La programmation des microcontrleurs est base sur le code machine, qui est connu comme code
assembleur, ce code contient les instructions du programme, le code assembleur est bien dtaill et
difficile crire. Le programme en code assembleur est trs long et difficile comprendre. La cration
des compilateurs de haut niveau a rendu facile la cration et l'dition de programmes, bien entendu les
microcontrleurs ne font pas exception. Dans le commerce, il ya plusieurs varits de compilateurs des
diffrents fabricants et avec diffrents langages de haut niveau.
On peut acheter les compilateurs PICC, CCS, PIC Basic, entre autres. L'tude de ce document se
concentre sur le compilateur MikroC PRO, qui est un compilateur de langage C pour les
microcontrleurs PICmicro famille 12F, 16F, 18F et.
MikroC PRO est un logiciel avec une grande varit des helps, supports et d'outils, qui facilite la
cration des projets et des applications pour les microcontrleurs PICmicro.
L'tude de cet environnement de dveloppement est possible, parce que l'tudiant peut tlcharger une
dmo ou version tudiant, qui a les mmes caractristiques que la version complte, la seule limite est
la taille du code machine ne peut pas excder 2Koctets, une capacit suffisante pour un premier
apprentissage. La version de dmonstration peut tre tlcharge partir du site Web:
www.mikroe.com.
La figure suivante montre l'aspect visuel de l'environnement de dveloppement.

Support de cours

Page 4

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 1-3

Le compilateur de haut niveau en langage C utilise des structures, facilitant la programmation,


optimisant les oprations mathmatiques, et les processus grce l'utilisation de fonctions prdfinies
et des fonctions que le dveloppeur peut crer et l'utilisation d'un ensemble de variables, caractre,
nombre entier, et rel. Le compilateur cre automatiquement le code assembleur et un code enregistr
dans un fichier avec l'extension *. Hex, ce fichier est le rsultat principal de la compilation, avec
lequel le microcontrleur sera programm lectriquement ou pour tre utilis pour une simulation sur
ordinateur.

Support de cours

Page 5

Support de cours : Conception et simulation des systmes PIC

1 ELT

2. Principes de langage C
Le langage C datant de 1972, a t cr par les laboratoires Bell en raison de la ncessit de rcrire
les systmes d'exploitation UNIX afin d'optimiser le code assembleur. De la mme manire, le langage
C a t l'volution des langages prcdents appel B et BCPL. Le nouveau langage C, a rapidement
pris la main pour ses fonctionnalits et sa facilit la mise en uvre dans des diffrents systmes de
calcul.
La forme du langage C, est base sur une structure complexe, ncessitant une tude approfondie. Pour
la programmation des microcontrleurs, ltudiant na besoin que des notions fondamentales qui le
permettent de se lancer et de crer les premiers projets en MikroC PRO. La fin ce chapitre est ax sur
la connaissance des notions de base pour commencer tudier les microcontrleurs avec ce document.

2.1 Dclaration des variables en C


Les variables de base dans ce compilateur spcifique sont:

bit
char
short
int
long
float
double

Les variables bit peuvent stocker un boolen qui peut tre vrai ou faux, 0 ou 1.
Les variables char sont utilises pour stocker des caractres cods avec le code ASCII. Il est utile pour
stocker des lettres ou des textes.
Une variable short contient un entier 8 bits qui peut prendre des valeurs : -127 127.
Les variables de type int sont des entiers 16 bits, cette variable peut stocker des nombres : -32767
32767.
La variable type long stocke un entier sur 32 bits, sa plage de valeurs est:
-2147483647 2147483647.
Les variables type double et float permettent de stocker des nombres avec virgule.
Les variables ci-dessus peuvent tre dclares, y compris le signe positif et ngatif, ou peuvent tre
dclares au moyen de la directive unsigned.

Support de cours

Page 6

Support de cours : Conception et simulation des systmes PIC

1 ELT

Dans le tableau ci-dessous, on peut voir les caractristiques des variables.

Type de variable
Bit
Char
Short
Int
Long
Float
Double
unsigned char
unsigned short
unsigned int
unsigned long

Taille en octets
1
1
1
2
4
4
4
1
1
2
4

Valeurs
0 ou 1
-127 127
-127 127
- 32767 32767
- 2147483647 2147483647
-1.5x10^45 3.4x10^38
-1.5x10^45 3.4x10^38
0 255
0 255
0 65535
0 4294967295

Tableau 2.1

La dclaration des variables s'effectue en indiquant le type de la variable suivi d'un nom que le
dveloppeur attribue arbitrairement la variable. Au moment de la dclaration d'une variable, il est
possible de lui donner une valeur initiale, mais ceci n'est pas strictement ncessaire. Enfin, la
dclaration doit se terminer par un point-virgule (;).
Dans les exemples suivants, on peut voir comment les dclarations sont faites:
bit VARIABLE1_BIT;
char CARACTERE;
char CARACTERE2='J';
int ENTIER=1234;
float DECIMAL=-12.45;
double DECIMAL2=56.68;
long ENTIER2=-954261;

//Dclaration d'une variable type bit.


// Dclaration d'une variable type char.
//Dclaration d'une variable de type char initialise
//avec la valeur ASCII le caractre J.
// Dclaration d'une variable entire initialise avec
//la valeur 1234.
// Dclaration d'une variable avec un point virgule
//initialise avec la valeur -12,45.
// Dclaration d'une variable avec un point virgule
//initialise avec la valeur 56,68.
// Dclaration d'une variable entire de type long
// initialise avec la valeur -954261.

Les exemples suivants montrent comment dclarer des variables non signes:
unsigned char CARACTERE;
unsigned int ENTIER;
unsigned long ENTIER2;

//Dclaration d'une variable type char non sign.


//Dclaration d'une variable type entier non sign.
// Dclaration d'une variable type entier long non
//sign.

Les variables peuvent galement tre dclares dans un format qui associe plusieurs variables dans un
mme nombre, ce format est connu comme une chaine de variables ou un vecteur et peut-tre mme
un tableau de variables, en conclusion ce genre de dclaration peut avoir une ou plusieurs dimensions.
L'exemple suivant montre un vecteur de caractre, ou galement connu sous le nom chane de
caractres:
char Text[20];

Support de cours

//Chane avec 20 emplacements de mmoire.

Page 7

Support de cours : Conception et simulation des systmes PIC

1 ELT

De mme des chanes de variables peuvent tre dclares avec des valeurs initiales, ce genre de
dclaration peut tre vu dans l'exemple suivant:
char Text[20] = Nouveau Texte;
int Eniers[5]={5,4,3,2,1};
float Decimals[3]={0.8,1.5,5.8};

//Dclarer une chane


//initialise avec le texte: Nouveau texte.
// Dclarer une chane d'entiers avec des
//valeurs initiales.
// Dclaration d'une chane de nombres
//dcimaux initialise....

La dclaration des variables doit respecter quelques rgles de base pour viter les erreurs et les
incohrences dans la compilation de code, cet effet il faut tenir compte des conseils suivants:
Les noms des variables ne doivent pas tre rpts.
Les variables ne doivent pas commencer par un chiffre.
Une variable ne peut pas utiliser des caractres spciaux comme: / * ;} {- \! . %.
Des exemples de dclarations de variables quon ne peut pas faire, c'est:
bit 1_VARIABLE-;
char -CARCTERE!;
int 3ENTIER*;
De mme, on peut crer des structures d'informations comme une nouvelle variable cre par le
dveloppeur. Ces structures sont ralises avec les variables prdfinies et peuvent tre des
dclarations des variables ou des variables tableaux. De telles structures sont dclares par
l'intermdiaire de la directive: typedef struct, et la faon de dclarer une variable cre par le
dveloppeur est la suivante:
typedef struct
{
char Nom[10];
int age;
}Utilisateur;
Voici comment utiliser une variable personnalise par le dveloppeur:
Utilisateur U;
U.age = 25;
U.Nom[0]=A;
U.Nom[1]=h;
U.Nom[2]=m;
U.Nom[3]=e;
U.Nom[4]=d;

2.2 Les formats numriques dans le langage C :


Les applications en langage C utilisent des nombres de diffrentes bases de numration, alors pour le
fonctionnement des microcontrleurs en bas niveau, tous les nombres sont convertis en base 2 (deux
nombres binaires 0 et 1). Ltre humain nest pas habitu penser et traiter des oprations en cette
base numrique.
Ds les premires tapes de la formation acadmique les coles et les collges apprennent aux
tudiants penser et traiter tous les calculs en base 10, c'est dire avec des nombres dcimaux. C'est
pourquoi les compilateurs du langage C travaillent avec des nombres dcimaux facilitant les
conceptions pour le dveloppeur. Outre le systme dcimal, le compilateur du langage C peut
Support de cours

Page 8

Support de cours : Conception et simulation des systmes PIC

1 ELT

travailler avec les autres bases telles que binaire, hexadcimal et rend plus facile effectuer des calculs
et des tches qui seraient plus complexe en dcimal.
Les systmes de numration en base 2, 10, et 16, sont implments dans le compilateur du langage C.
Lcriture des nombres dcimaux, est la forme la plus simple, ils sont crits en langage C de la mme
manire conventionnelle quon a appris ds les premiers cours des mathmatiques. Les nombres
binaires sont crits avec le prfixe 0b suivi par le nombre binaire. Un exemple d'criture est:
0b10100001 qui est quivalent au nombre dcimal 161.
Les nombres en base 16 ou hexadcimal sont dsignes avec 0x en entte suivi d'un nombre en
hexadcimal, l'expression 0x2A, est un exemple d'un nombre hexadcimal en langage C, qui est
quivalent 42 en dcimal. Les nombres binaires ne peuvent avoir que deux chiffres sont 0 et 1. Les
nombres hexadcimaux peuvent comprendre des chiffres parmi les suivants: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
A, B, C, D, E et F.

2.3 Les oprateurs en langage C


Le langage C permet de faire des oprations arithmtiques de base entre des variables ou des
constantes. Les oprations arithmtiques disponibles sont:
Somme
soustraction
Multiplication
Division
Modulo
L'exemple suivant montre la somme arithmtique de deux nombres ou plus:
int A;
int B;
int C;
C = A+B;
//cet expression stocke la somme de A et B dans la variable C.
C = A+B+C;
//cet expression stocke la somme de A, B et C dans
//la variable C.
L'exemple suivant montre la soustraction arithmtique entre deux nombres ou plus:
int A;
int B;
int C;
C = A-B;
C = A-B-C;

//cet expression stocke la diffrence de A et B dans


//la variable C.
//cet expression stocke la diffrence de A, B et C dans la
//variable C.

L'opration mathmatique de multiplication peut tre effectue entre deux ou plusieurs variables, cet
opration est ralise avec l'astrisque (*), cette expression peut tre vue plus clairement dans les
exemples suivants:
int A;
int B;
int C;
C = A*B;
C = A*B*C;

Support de cours

//cet expression stocke la multiplication entre A et B dans la


//variable C.
//cet expression stocke la multiplication entre A, B et C dans
la //variable C.

Page 9

Support de cours : Conception et simulation des systmes PIC

1 ELT

La division arithmtique en langage C est spcifie par la barre oblique (/), dans l'exemple suivant, on
peut voir sa mise en uvre:
int A;
int B;
int C;
C = A/B;
//cet expression stocke la division entre A et B dans
//la variable C.
Lopration modulo calcule le reste d'une division arithmtique, le calcul du modulo est indiqu par le
caractre pour cent (%), l'application de cette opration peut tre vue dans l'exemple suivant:
C = A%B;

//cet expression stocke le reste de la division entre A et B dans


//la //variable C.

Les oprations arithmtiques peuvent tre utilises en combinaison, c'est dire que on peut mlanger
plusieurs oprations en une seule expression, pour voir plus clairement on va observer les exemples
suivants:
int A;
int B;
int C;
C = (A+B)/C;
C = (A/B)*C;

//cet expression est quivalente C = (A+B) C.


//cet expression est quivalente C = (AB) X C.

D'autres oprateurs mathmatiques raccourcis peuvent tre utiliss lorsquon veut une modification
constante des variables, par exemple, il est possible d'incrmenter ou de dcrmenter une variable
d'un certain nombre, tout comme il est possible de faire cette opration avec la multiplication et la
division. Pour comprendre ce concept, on observe plus clairement les exemples suivants:
A++;
A--;
A+=4;
A-=5;
A/=4;
A*=3;
A+=B;
A*=B;

//Cet oprateur incrmente de un la valeur de A.


//Cet oprateur dcrmente de un la valeur de A.
//Cet oprateur incrmente de 4 la valeur de A.
//Cet oprateur dcrmente de 5 la valeur de A.
//Cet oprateur divise la valeur de A par 4.
//Cet oprateur multiplie la valeur de A par 3.
//Cet oprateur incrmente de B la valeur de A.
//Cet oprateur multiplie la valeur de A par B.

Autres oprations mathmatiques plus complexes peuvent tre effectues en langage C, l'aide des
fonctions prdfinies dans la bibliothque mathmatiques. Ce sujet sera trait plus tard, quand les
dclarations des fonctions seront tudies.
Les oprateurs logiques permettent d'effectuer des actions ou des oprations qui respectent la logique
numrique souleve par le mathmaticien anglais George Boole au XIXe sicle. Boole a pos les
oprations boolennes OU, ET, NON, XOR, NOR, NAND, XNOR, qui sont largement tudies dans les
cours de la logique combinatoire et systmes numriques squentielles.
Les oprations logiques sont effectues en langage C entre deux variables ou des constantes, bit bit
de mme poids dans une variable ou un nombre. Pour voir et comprendre les exemples, on rappelle
d'abord les tables de vrit des oprations logiques comme indiqu ci-dessous:

Support de cours

Page 10

Support de cours : Conception et simulation des systmes PIC

1 ELT

Inverseur NOT
Entre
0
1

Sortie
1
0

OR inclusive
Entre 1 Entre 2 Sortie
0
0
0
1
1
0
0
1
1
1
1
1

NOR inclusive
Entre 1 Entre 2 Sortie
0
1
0
1
0
0
0
0
1
1
0
1

OR exclusive ou XOR
Entre 1 Entre 2 Sortie
0
0
0
1
1
0
0
1
1
1
0
1

NOR exclusive ou XNOR


Entre 1 Entre 2 Sortie
0
1
0
1
0
0
0
0
1
1
1
1

AND

NAND

Entre 1
0
0
1
1

Entre 2
0
1
0
1

Sortie
0
0
0
1

Entre 1
0
0
1
1

Entre 2
0
1
0
1

Sortie
1
1
1
0

Les oprations logiques en C, sont ralises avec des caractres spciaux qui dsignent chacun. Dans
l'exemple, on peut voir des applications de ces oprateurs logiques:

Opration NON logique, ou complment, dsign par le caractre tilde (~);

unsigned short VALEUR1 = 0b01010000


unsigned short RESULTAT;
RESULTAT = ~ VALEUR1

// variable initialise en binaire avec le nombre 80.


// variable initialise en binaire avec le nombre 95.
// La valeur de l'opration logique ou est stocke dans
//la variable RESULTAT, 95.

Opration XOR, ou exclusif, est note avec l'accent circonflexe (^);

unsigned short VALEUR1 = 0b01010000


unsigned short VALEUR2 = 0b01011111
unsigned short RESULTAT;
RESULTAT = VALEUR1^ VALEUR2

// La variable RESULTAT contient le complment de


//VALEUR1 , 175.

Opration logique OU, OU inclusive, est dsigne par le caractre barre verticale (|);

unsigned short VALEUR1 = 0b01010000


unsigned short VALEUR2 = 0b01011111
unsigned short RESULTAT;
RESULTAT = VALEUR1 | VALEUR2

// variable initialise au nombre binaire 80.

// variable initialise en binaire avec le nombre 80.


// variable initialise en binaire avec le nombre 95.

// La valeur de l'opration logique ET


//est stocke dans RESULTAT, 15.
ET logique est note avec l'esperluette (&);

unsigned short VALEUR1 = 0b01010000


unsigned short VALEUR2 = 0b01011111
unsigned short RESULTAT;
RSULTAT = VALEUR1 &VALEUR2;

Support de cours

// variable initialise en binaire avec le nombre 80.


// variable initialise en binaire avec le nombre 95.
// La valeur de l'opration logique ET
// est stocke dans le RESULTAT, 80.
Page 11

Support de cours : Conception et simulation des systmes PIC

La mise en uvre de NAND, NOR est XNOR, sont semblables aux oprations logiques ET,
OU, XOR, avec lajout du caractre tilde () de la complmentation, on observe les exemples:

unsigned short VALEUR1 = 0b01010000


unsigned short VALEUR2 = 0b01011111
unsigned short RESULTAT;
RESULTAT = ~(VALEUR1|VALEUR2)
RESULTAT =~(VALEUR1 & VALEUR2)
RESULTAT =~(VALEUR1^ VALEUR2 )

1 ELT

// variable initialise en binaire avec le nombre 80.


// variable initialise en binaire avec le nombre 95.
// La valeur de l'opration logique NOR est stocke
//dans RESULTAT.
// La valeur de l'opration logique NAND est stocke
//dans RESULTAT.
// La valeur de l'opration logique XNOR est stocke
//dans RESULTAT.

Le dcalage des bits d'une variable binaire est utile pour des procds et des tches impliquant
la manipulation de donnes au niveau des bits. Le dcalage droite dune variable ou dune
constante, en langage C, est ralis par double caractre suprieur (>>), de la mme manire
pour le dcalage gauche qui est ralis par (< <). L'opration de dcalage fait perdre des bits
et insre des zros dans les nouveaux bits. Dans les exemples suivants, on voit la mise en
uvre de ces oprateurs:

short Donnee=0xFF
short RESULTAT;
RESULTAT = Donnee>> 4

RESULTAT= Donnee << 4,

// Dclaration des variables.


//cet opration stocke dans la variable RESULTAT le
//rsultat de dcalage droite de 4 bits la variable
//Donnee, la valeur du rsultat final est 0x0F.
//cet opration stocke dans la variable RESULTAT le
//rsultat de dcalage gauche de 4 bits de la
variable //Donnee, la valeur du rsultat final est 0xF0.

Les oprations logiques et arithmtiques mentionnes ci-dessus sont rsumes dans le tableau suivant:
Description de l'opration

Oprateur

Somme
Reste
Division
Modulo ou reste de la division entire
Incrmenter
Dcrmenter
Opration OU
Opration ET
Opration Ou exclusive
Complment 1
Dcalage droite
Dcalage gauche

+
/
%
++
-|
&
^

>>
<<
Tableau 2-2

Support de cours

Page 12

Support de cours : Conception et simulation des systmes PIC

1 ELT

2.4 Les fonctions en langage C :


Une fonction est une partie du code qui effectue une tche spcifique chaque fois qu'elle est invoque
par le flux du programme principal. Les fonctions ont deux caractristiques essentielles, une ou
plusieurs paramtres d'entre et un paramtre de sortie. Ces paramtres peuvent tre des variables ou
des tableaux, tout comme ces paramtres d'entre et de sortie peuvent tre vides.
La structure des fonctions peut tre vue dans les exemples suivants:
void nom_fonction (void)
{
}
void nom_fonction(int A)
{
}
int nom_fonction(void)
{

}
int nom_fonction(int A)
{
}

// Fonction avec des paramtres d'entre et de sortie


//vides.
// Dbut de la fonction avec accolade.
// Code o la routine de fonction excuter.
// Fin de la fonction avec accolade.
// Fonction avec un paramtre d'entre A entier et de
//sortie vide.
// Dbut de la fonction
// Code o la routine de fonction excuter.
// Fin de la fonction.
// Fonction avec paramtre d'entre vide et de sortie
//entier.
// Dbut de la fonction.

// Code o la routine de fonction excuter.


// Fermeture de la fonction.
// Fonction avec un paramtre d'entre et de
sortie //tout entiers.
// Dbut de la fonction.
//Code o la routine de fonction excuter.
// Fermeture de la fonction.

Les noms dsignant les fonctions rpondent aux mmes rgles de dnomination de variables.
L'exemple suivant montre une fonction qui est capable de calculer le produit de deux nombres avec
virgule:

float produit(float A, float B)


{
float RESULTAT;
RESULTAT=A*B
return RESULTAT;
}

// Fonction pour calculer le produit de A et B.


//Dbut de la fonction.
//Produit de A et B.
//La fonction retourne le rsultat stock dans
//RESULTAT.
//Fermeture de la fonction.

Une fonction peut utiliser une autre fonction pour excuter des fonctions plus complexes. Pour voir
cette situation, on voit l'exemple suivant, qui calcule l'aire d'un cercle en fonction de son rayon:

Support de cours

Page 13

Support de cours : Conception et simulation des systmes PIC

1 ELT

Surface
Rayon

Figure 2-1

L'aire du cercle est calcul par l'quation A = r , o la valeur de est d'environ 3,1416.
float Valeur_PI ( void )
{
float PI=3.1416;
return PI;
}

//Fonction qui retourne la valeur de .


//Dbut de la fonction

//Fin de la fonction

Dans le cas o une fonction utilise des variables locales, la dclaration doit tre faite au dbut de celuici, avant toute autre action ou instruction.
float Aire_Cercle(float Rayon)
{
float Aire;
Aire= Valeur_PI()*Rayon*Rayon;
return Aire;
}

//Fonction pour calculer laire dun cercle.


//Dbut de la fonction
//Calcul de laire dun cercle.
//fin de la fonction

Les fonctions sont crs par le dveloppeur, mais il y en a certaines qui sont prdfinies dans le
compilateur et peuvent tre consultes et mises en uvre en respectant les paramtres d'entre et de
sortie, la plus importante d'entre elles est la fonction main() ou principale. L'importance de cette
fonction rside dans le fait que c'est sur elle que court tout le programme du microcontrleur. Elle est
automatiquement excute quand le microcontrleur est aliment. La fonction main() dans le cas
particulier des microcontrleurs ne contient ni paramtres d'entre ou ni de sortie, sa dclaration peut
tre vue dans l'exemple suivant:

void main( void )


{

//Dclaration de la fonction main.


// Dbut de la fonction main.
// Code pour le programme principal du
//microcontrleur.
// fin de la fonction main.

Les dclarations des fonctions, crites par le dveloppeur, doivent tre dclares avant la fonction
main().
Dans le cas d'une fonction qui appelle une autre fonction, la fonction appele doit tre dclare avant
la fonction qui fait l'appel.
Les fonctions trigonomtriques et d'autres fonctions mathmatiques telles que logarithmes, et
exponentielle, peuvent tre utilises avec la bibliothque prdfinie par le compilateur. Cette
bibliothque est appele C_Math.h.
Support de cours

Page 14

Support de cours : Conception et simulation des systmes PIC

1 ELT

2.5 Cration d'un programme en langage C


La structure d'un programme en langage C est relativement simple, il est d'abord essentiel de dclarer
des variables globales qui on juge ncessaires pour le fonctionnement du programme. Les variables
globales sont reconnues par toutes les parties du programme, y compris les fonctions propres au
dveloppeur et la fonction main().
La prochaine tape est de faire des dclarations de fonctions conues par le dveloppeur pour des
tches spcifiques dans le programme. Par la suite, la fonction main() est dclare, au dbut on doit
dclarer des variables qui sont ncessaires au sein de la mme fonction main(). Le code ci-dessous doit
configurer et initialiser les ports du microcontrleur et les modules qui sont essentiels l'application.
Enfin, on crit le code qui contient le programme de lapplication utilisateur. Dans l'exemple cidessous, on peut voir la structure dun programme:
int Variable1;
char Variable2;
float Variable3;

//Dclaration des variables globales.

//Dclaration de fonctions propres au dveloppeur.


float Valeur_PI ( void )
{
float PI=3.1416;
return PI;
}
float Calcul_Aire_Cercle( float Rayon )
{
float Aire;
Aire = Valeur_PI()*Rayon*Rayon;
//Calcul de laire.
return Aire;
}
void main( void )
//Dclaration de la fonction main ou principale
{
float Valeur_Rayon;
//Dclaration des variables de la fonction main.
float Valeur_Aire;
TRISB=0;
//Configuration de ports et des modules.
TRISC=0;
PORTB=0;
PORTC=0;
while( 1 )
//Code de lapplication.
{
Valeur_Aire=Calcul_Aire_Cercle( Valeur_Rayon );
}
}

2.6 Formes conditionnelles et itration en langage C


Les formes conditionnelles et itratives font partie intgrante de la structure de n'importe quel code en
langage C. Les instructions conditionnelles if, if else, et switch case permettent de raliser des menus,
prendre des dcisions, et de contrler le flux du programme ou de l'application. Les structures
itratives while, do while et for, permettent de crer des boucles itratives, qui rgissent des tches et
des processus dvelopps dans le programme.

Support de cours

Page 15

Support de cours : Conception et simulation des systmes PIC

1 ELT

2.6.1 Cration des conditions logiques en C


Les conditions logiques permettent de prendre des dcisions en fonction dun test. Les conditions
logiques retournent seulement deux valeurs possibles: vrai ou faux. Lorsque la condition logique se
fait directement sur une variable ou un nombre, la condition est fausse lorsque sa valeur est 0 et
renvoie vrai pour une valeur diffrente 0.
Les formes conditionnelles utilises dans le langage C sont : NOT, ou la ngation, OR ou ou inclusif ,
AND , ou et . On peut galement utiliser des comparaisons entre deux valeurs telles que suprieur ,
infrieur ou suprieur ou gal , infrieur ou gal , diffrents de, et gal . L'utilisation de la
ngation se fait avec le caractre dexclamation(!), la condition OU est effectue avec les caractres
double barres verticales (||) , La condition AND ou et, est utilise avec double esperluette ( && ), la
condition suprieur est utilise avec le caractre ( > ) , la condition infrieur est utilise avec le
caractre (< ) , suprieur ou gal est faite avec les caractres ( >= ) , l'tat infrieur ou gal , se fait
avec (<= ) , l'galit est ralise avec les caractres double gal ( == ) et l'tat diffrent est utilise les
caractres de l'galit et d'exclamation ( != ) . Pour bien comprendre ces oprateurs, on observe et on
analyse les exemples suivants :
short A;
short B;
(A==10)&&(B==20)
(A!=5)&&(B>2)
(A<=4)&&(B>=6)
!(A>3)&&(B!=4)

//La condition est vraie si A vaut 10 et B vaut 20.


// La condition est vraie si A es diffrent de 5 et B est
//suprieur 2.
// La condition est vrai si A est infrieur ou gal 4 et
si //B est suprieur ou gal 6.
// La condition est vrai si A nest pas suprieur 3 et si
B //est diffrente de 4.

2.6.2 L'instruction conditionnelle if et if else


L'instruction if value une condition logique et excute un partie de code si et seulement si le rsultat
de la condition est vrai. On observe l'instruction if dans l'exemple suivant:
short Valeur;
if( Valeur>100 )

//La condition est vraie si la variable Valeur est


//suprieure 100.

{
// Partie de code qui est excute si la condition est
//vraie.
}
La structure if else est la mme que if , la seule diffrence est que dans le cas o la condition est
fausse, cest la partie de code associe else qui est excute. Pour comprendre cette situation, on
prend l'exemple suivant:
short Valeur;
if( Valeur>100 )
suprieure 100.
{

//La condition est vraie si la variable Valeur est

// Partie de code qui est excute si la condition est


//vraie.
}
else
{

Support de cours

Page 16

Support de cours : Conception et simulation des systmes PIC

1 ELT

// Partie de code qui est excute si la condition est


//fausse.
}
Le if et if else peuvent tre imbriqus pour crer des structures plus compltes et complexes, ce cas
peut tre vu clairement dans l'exemple suivant:
short Valeur1;
short Valeur2;
if( Valeur1>30 )
{

if( (Valeur2==4)&&(Valeur1<50) )
{

//Dclaration des variables.


//test de if.
// Partie de code qui est excute si la condition est
//vraie.
//Seconde if imbrique.
// Code qui s'excute lorsque la seconde if a une
//condition vraie.

}
}

2.6.3 Linstruction switch case


Linstruction switch case, fonctionne d'une manire similaire l'instruction if, mais la diffrence cest
quon nvalue pas une condition mais la valeur d'une variable, et quon excute une partie de code
pour chaque valeur possible de la variable.
Les valeurs crites dans les case sont les cas possibles de la variable, le dveloppeur les choisit en
fonction du besoin. Pour les cas des valeurs qui nont pas d'intrt pour le dveloppeur, une partie de
code s'excute par dfaut, en utilisant la directive default.
Chacun des fragments du code dits doit se terminer par linstruction break pour rompre le flux de la
structure switch case, cet action est ncessaire parce que si deux cas se suivent les fragments de codes
correspondants vont sexcuter jusqu' la directive break ou jusqu' la fin la structure switch case.
Pour bien comprendre le fonctionnement de l'instruction switch prenons l'exemple suivant:
short Valeur;
switch( Valeur ) //Evaluation de la variable Valeur.
{
case 0:
// Fragment de code correspondant la variable Valeur gale 0 .
break;
//Rupture du cas 0.
case 1:
// Fragment de code correspondant la variable Valeur gale 1.
break;
// Rupture du cas 1.
case 10:
// Fragment de code correspondant la variable Valeur gale 10.
break;
// Rupture du cas 10.
case 20:
// Fragment de code correspondant la variable Valeur gale 20.
break;
// Rupture du cas 20.
case 50:
// Fragment de code correspondant la variable Valeur gale 50.
break;
// Rupture du cas 50.
default:
// Fragment de code correspondant la variable Valeur gale 0.
break;
//Rupture de default.
}

Support de cours

Page 17

Support de cours : Conception et simulation des systmes PIC

1 ELT

2.6.4 Les formes itratives while et do while


Le cycle itratif rpte et excute un fragment de programme condition que la condition nonce
dans while soit vraie. Pour savoir comment dclarer ce type de forme itrative, on prend l'exemple
suivant:
short CONT=0;
while( CONT<100 )
{
CONT++;
}

//Dclaration de la variable entire qui compte jusqu 100.


//Dclaration de la boucle while.
//Incrmentation de la variable CONT.

Mettre en uvre une boucle do while est similaire la boucle while, la diffrence quon entre dans la
boucle, le fragment de code est excut, puis il value la condition contenue dans while. En
conclusion, le code est excut au moins une fois avant l'valuation de la condition. Dans l'exemple cidessous, on peut voir comment utiliser ce type de boucle:
short CONT=0;
do
{
CONT++;
} while( CONT<100 );

//Dclaration de la variable entire qui compte jusqu 100.


//Dclaration de la boucle do while.
//Incrmentation de la variable CONT.

2.6.5 La forme itrative for


La forme itrative for est une structure similaire la boucle while, la diffrence est que for a une
dfinition de la condition, entre les parenthses, plus complexe. La condition a trois paramtres, le
premier est un champ pour donner les valeurs initiales un ou plusieurs variables, le second champ
permet de crer une condition logique qui fait rpter le fragment du code for tant quelle est vraie, le
dernier champ ralise la modification dune ou plusieurs variables, telles que: incrmentation,
dcrmentation, etc.
Les variables qui sont modifies dans le dernier champ sont gnralement les mmes qui ont t
initialises dans le premier champ, mais ce n'est pas une rgle. On observe la structure for sur
lexemple suivant:

for( _INITIALISATION_ ; _CONDITION_; _MODIFICATION_ )


{
}
Pour connaitre le fonctionnement de la boucle for on observe lexemple suivant:
short A;
//Dclaration des variables.
short B;
for( A=0, B=100; (A<100)||(B>20); A++, B-- ) //structure de la boucle for.
{
// Code qui s'excute lorsque la condition de for est vraie.
}

2.6.6 Utilisation des formes itratives imbriques


La plupart des applications utilisent des boucles imbriques pour accrotre la fonctionnalit et
optimiser la taille du code machine final. Limbrication des boucles consiste excuter une boucle

Support de cours

Page 18

Support de cours : Conception et simulation des systmes PIC

1 ELT

dans une autre. Une boucle peut contenir une ou plusieurs boucles imbriques. Pour mieux
comprendre ce concept, on considre l'exemple suivant:
short COL;
short LIN;
short MATRICE[10][10];
for( COL=0; COL<10; COL++ )
{
for( LIN=0; LIN<10; LIN++ )
{

//Dclaration des variables.


//Dclaration dun vecteur bidimensionnel.
//Dclaration de la boucle for.
//Fragment du code de la premire boucle.
//Dclaration de la boucle for imbrique.
//Fragment du code de la boucle imbrique.

MATRICE[COL][LIN] = COL*LIN;
}
}
Dans l'exemple ci-dessus, les valeurs stockes sont dans une matrice de 10 sur 10, recouvrant toutes
les positions de la matrice.

Support de cours

Page 19

Support de cours : Conception et simulation des systmes PIC

1 ELT

3. Le simulateur ISIS de PROTEUS :


Le simulateur ISIS de Proteus est un logiciel puissant, dvelopp par la compagnie lectronique
Labcenter, qui s'est positionn pour plus de 10 ans comme l'un des outils les plus utiles pour simuler
les microcontrleurs PICmicro.
L'ISIS permet la simulation des familles des PICmicro les plus populaires tels que: 12F, 16F, 18F. En
plus des PIC, ISIS peut simuler une varit de dispositifs numriques et analogiques, y compris les
afficheurs sept segments, les LCD des caractres et graphiques. ISIS permet de simuler des capteurs
de temprature, l'humidit, la pression et la lumire, entre autres.
Le simulateur peut simuler les actionneurs tels que des moteurs CC, les servomoteurs, les lampes
incandescence, entre autres. Il est possible de simuler des priphriques d'entre et de sortie comme les
claviers, ordinateur et les ports physiques tels que RS232 et USB. Ce simulateur a une grande varit
d'instruments de mesure tels que voltmtres, ampremtres, oscilloscopes et analyseurs de signaux.
En conclusion ces caractristiques et d'autres font d'ISIS de Proteus, un outil idal pour la conception
et l'tude des PICmicro. Une version de dmonstration du logiciel peut tre tlcharge partir du site
Web: www.labcenter.com. Sur la photo suivante, on peut voir l'aspect visuel de l'environnement de
dveloppement d'ISIS:

Figure 3-1

L'utilisation et le travail avec ISIS exigent un large ventail d'outils et d'options quon doit savoir. On
va les dcouvrir progressivement au cours des exemples.

3.1 Les bases du simulateur ISIS


La section suivante montre les caractristiques de base pour commencer la premire simulation dans
ISIS. Dans une premire tape, on identifie la palette slecteur dobjets, c'est--gauche de l'cran, le
dveloppeur doit identifier la touche P dans la palette comme le montre l'image ci-dessous:

Support de cours

Page 20

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 3-2

Lorsquon appuie sur la touche P, le programme ouvre une nouvelle fentre qui permet de trouver les
dispositifs lectroniques travers la rfrence commerciale, ou sous la classification adopt par ISIS.
Pour rechercher un dispositif, on entre la rfrence dans la zone: Keywords, le programme gnre une
liste, sur le ct droit de la fentre, des dispositifs en fonction de la recherche de l'utilisateur.
Pour slectionner un dispositif, on double-clique sur sa rfrence dans la liste donne. Pour
commencer, on repre les dispositifs suivants: BUTTON, LED-RED, RES, correspondants au bouton
poussoir, LED rouge, et une rsistance. Aprs ce processus, dans la palette on devrait avoir les
appareils suivants:

Figure 3-3

La prochaine tape consiste trouver les bornes de la masse et lalimentation, cet effet, on clique sur
l'icne suivant:
programme.

Support de cours

dans la palette d'outils, qui se trouve sur le ct gauche de la fentre du

Page 21

Support de cours : Conception et simulation des systmes PIC

1 ELT

Lorsquon clique sur cet outil, une liste de terminaux qui apparait, on trouve GROUND et POWER,
qui correspondent respectivement la rfrence lectrique ou la masse et lalimentation ou Vcc. La
borne d'alimentation a une diffrence de potentiel de 5 volts par dfaut. Pour placer ces terminaux
dans la zone de travail, on clique sur les lments dans la palette des terminaux, puis dans la zone de
travail. Aprs cette action, la zone de travail devrait tre comme la figure suivante:

Figure 3-4

L'tape suivante consiste fixer les dispositifs dans la zone de travail, on choisit le bouton:
dans
la palette d'outils sur la gauche. Pour coller les dispositifs dans lespace de travail, on procde de la
mme manire que les terminaux, enfin on aura lespace de travail suivant:

Figure 3-5

La prochaine tape est d'effectuer les connexions lectriques, pour cet exemple, tous les lments
sont connects en srie, cet effet le curseur de la souris prend la forme d'un crayon, pour lier entre
deux bornes on clique sur la premire puis la prochaine et le programme termine la connexion. la
fin des connexions, lespace de travail devient:

Support de cours

Page 22

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 3-6

Enfin, on peut modifier la valeur de la rsistance par un double clic de la souris sur la rsistance, avec
cette action on affiche une fentre pour modifier la valeur de la rsistance, qui est par dfaut 10k, ce
qu'il faut faire est de la changer 330.
L'tape suivante consiste lancer la simulation, la palette situe dans le coin infrieur gauche de
l'cran permet de contrler les simulations. Cette palette a l'apparence suivante:

Figure 3-7

Enfin, on appuie sur le bouton play et la simulation fonctionne, lorsque la simulation est en cours, on
peut appuyer sur le bouton poussoir, et voir l'effet sur la simulation. Cet exemple simple montre le
processus de cration d'un schma sur ISIS.
La cration des circuits en ISIS, implique une autre srie d'actions qui seront abords au cours des
exemples.

Support de cours

Page 23

Support de cours : Conception et simulation des systmes PIC

1 ELT

4. Cration du premier programme en MikroC PRO


Le processus suivant doit tre appris par cur, pour mettre en uvre chaque fois des nouveaux
projets ou programmes pour les PICmicro. En lanant MikroC PRO, on identifie dans le menu
suprieur loutil Project, et on choisit New Project avec cette action, le programme affiche un
assistant facile utiliser pour crer un nouveau projet. L'aspect visuel de cet assistant est:

Figure 4-1

La prochaine action est de cliquer sur le bouton Next, cette tape de l'assistant affiche une case pour
slectionner la rfrence de PICmicro, quon souhaite utiliser. Dans ce champ, on slectionne le PIC
P16F84A. L'tape suivante est de dfinir la frquence d'oscillation avec laquelle travaillera le PIC ;
dans cet exemple on slectionne 4.000000 MHz. L'option suivante permet de dfinir le rpertoire o le
dveloppeur enregistrera le projet, dans ce rpertoire le programme enregistrera tous les fichiers
ncessaires, parmi lesquels le code source qui sera archiv avec lextension .c, et lexcutable du PIC
de avec lextension. hex.
L'tape suivante, lassistant demande d'ajouter des fichiers joindre au projet. Lorsquon cre un
nouveau projet, cette tape peut tre ignore, et on appuie sur Next, le dernier lment de l'assistant
demande si le dveloppeur veut slectionner les bibliothques quil va utilises dans ce travail, par
dfaut, ce paramtre slectionne toutes les bibliothques utilisables pour ce PIC, le meilleur est de
laisser toutes les bibliothques actives. Enfin, la configuration est termine et le projet est cr, la fin
la fentre doit apparatre comme suit:

Support de cours

Page 24

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 4-2

A chaque modification effectue sur le code du programme, on doit compiler le code en appuyant sur
le bouton suivant
: il est situ en haut du programme dans la barre d'outils. Cette action produit
des rsultats de la compilation quon trouve dans la partie infrieure de la fentre de programme. Les
messages doivent se terminer par un text Finished successfully.
Pour commencer ldition dun projet, on configure les ports du PIC, puis on insre le programme
dans une boucle infinie. Le PIC 16F84A dispose de deux ports A et B, on manipule le registre TRIS
pour configurer les ports en sortie ou entre. Chaque port a son registre TRIS respectif, quon
configure avec trois tats possibles, tats haut, bas, et haute impdance.
Les registres TRIS ont le mme nombre de bits que les ports, par exemple le port B ou PORTB de ce
PIC est de 8 bits, donc le TRISB comporte galement 8 bits. Les bits des registres TRIS correspondent
ceux des ports, et dfinissent bit bit l'tat du port. Si un bit du TRIS est 0 le mme bit du port est en
sortie, et Si un bit du TRIS est 1 le mme bit du port est en entre ou en haute impdance. Pour voir ce
concept plus clairement, on observe et on analyse l'exemple suivant:
TRISB = 0b11110000;
PORTB=0b00000000;

// Configure le quartet des bits de poids faible en


//sortie, et le quartet des bits de poids fort en entre.
//Les bits de sortie ont un 0 logique

Cet exemple utilise un bouton et deux LED pour afficher le comportement du programme. On observe
et on analyse le programme ci-dessous:

Support de cours

Page 25

Support de cours : Conception et simulation des systmes PIC

1 ELT

void main ( void )


{
unsigned int COMPTEUR=0;
TRISB = 0b11110000;

// Configure le quartet des bits de poids faible en


sortie, //et le quartet des bits de poids fort en entre.
// Les bits de sortie ont un 0 logique

PORTB=0b00000000;
while( 1 ) //Boucle infinie
{
if( PORTB.F7==0 )
//test si bit RB7 est 0
{
if( PORTB.F0==1 )
//test la valeur du bit RB0 et commute sa valeur.
PORTB.F0=0;
else
PORTB.F0=1;
while( PORTB.F7==0 ); //attend que RB7 passe 1.
}
COMPTEUR++;
//Incrmente la valeur du COMPTEUR.
//La condition if qui suit change automatiquement
ltat //du bit RB1tout les 256 incrmentations
if(COMPTEUR&0x0100 )
//test si le bit 8 du COMPTEUR est 1
PORTB.F1=1;
else
PORTB.F1=0;
}
}

L tape suivante est de faire la simulation sur ISIS, les rsistances des LED doivent tre changes
330, lentre Master CLeaR , MCLR doit tre connect Vcc pour que le PIC ne redmarre pas , la
fin on devrait voir la forme suivante:

Figure 4-3

Support de cours

Page 26

Support de cours : Conception et simulation des systmes PIC

1 ELT

Avant de lancer la simulation, on doit charger le fichier .Hex. Pour procder on double clique sur le
PIC, et une fentre qui permet de rechercher le fichier .Hex, dans cette fentre on peut galement
ajuster la frquence d'oscillation. Par dfaut, cette valeur est de 1 MHz, des fins de simulation dans
ce cas, on doit slectionner 4 MHz, cette fentre se prsente comme suit:

Figure 4-4

Pour des fins de la programmation physique du microcontrleur, il est important de tenir compte des
conditions de la configuration du PIC, chacun des microcontrleurs Microchip possde un champ de
mmoire qui caractrise le comportement rel de la PIC, entre elles on peut souligner, le type
d'oscillateur ou horloge de traitement, par exemple quand on utilise un quartz de 4MHz, l'oscillateur
doit tre rgl sur XT, si l'oscillateur est de 20MHz on utilise la configuration HS. S'il s'agit dun
quartz d'une faible vitesse comme 400KHz, on utilise la configuration LP, et si un oscillateur est mis
en uvre en utilisant un circuit RC ou une rsistance en srie avec un condensateur, on utilise loption
RC.
De mme, il est possible de configurer d'autres options telles que l'utilisation du chien de garde et la
protection du code en mmoire FLASH et lEEPROM, cette dernire option est trs importante pour
protger les informations du microcontrleur et d'empcher le programme ou les donnes de la
mmoire dtre lues. Pour modifier la configuration du PIC, on doit chercher Edit Project ...qui se
trouve dans longlet Project du menu principal de MikroC PRO.
L'accs cet outil est expliqu dans la figure suivante:

Support de cours

Page 27

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 4-5

Support de cours

Page 28

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 4-6

Support de cours

Page 29

Support de cours : Conception et simulation des systmes PIC

1 ELT

5. Affichage des donnes


La conception des systmes microcontrleurs implique parfois laffichage des donnes lutilisateur.
A cet effet on peut utiliser des afficheurs 7 segments, lafficheur de caractre cristaux liquides LCD
et lafficheur LCD cran graphique. Dans ce chapitre, on tudie et on illustre ces dispositifs par des
exemples.

5.1 Affichage 7 segments


Un afficheur 7 segments est un dispositif qui permet de visualiser un nombre limit de caractres
essentiellement numriques, mais il est possible de visualiser quelques caractres comme: b, d, E, A,
ou F, C, -. L'afficheur 7 segments est un ensemble de LED, disposes de sorte quon visualise les
caractres en activant les segments convenables.
Les afficheurs 7 segments ont une dsignation standard, chaque segment on attribue une lettre de "a"
jusqu "g". La description et l'apparence physique de ces afficheurs sont illustres sur les images
suivantes:

Figure 5-1

Les afficheurs 7 segments sont fabriqus en deux formats; anode commune et cathode commune, les
afficheurs 7 segments existent galement dans un format dynamique, ces derniers utilisent deux
chiffres ou plus dans un seul boitier reliant tous les segments en parallle, mais avec bornes communes
spares. Les figures suivantes montrent des afficheurs 7 segments dans leur forme dynamique:

Figure 5-2

Lentre DP, quon peut voir sur la figure ci-dessus, est le huitime segment. Il est mis en uvre dans
certains affichages et correspond la virgule, il est utilis si la demande l'exige.

5.1.1 Contrle de l'affichage 7 segments


Pour effectuer le premier exemple avec cet afficheur on doit savoir comment raliser laffectation des
broches du PIC. A chaque segment de l'afficheur, on doit relier une broche du PIC. Pour faire une
conception optimale, on peut attribuer les broches en ordre conscutif dun port, par exemple le

Support de cours

Page 30

Support de cours : Conception et simulation des systmes PIC

1 ELT

segment "a" est reli la broche RB0, le "b" la broche RB1, et ainsi de suite, jusqu'au segment "g"
la broche RB6. Cependant, le dveloppeur peut faire laffectation des broches dune manire
arbitraire.
Il est important de connaitre un outil contenu dans le logiciel MikroC PRO qui permet dditer les
digits de lafficheur. Pour cela on utilise Tools dans la barre de menu, et on choisit loutil Seven
Segment Editor.
Avec cette action, ressort une nouvelle fentre o on peut diter dune manire simple les segments de
l'afficheur 7 segments. Au moment de ldition de lafficheur, apparait la valeur constante qui doit
tre utilise sur les sorties du port dsign pour son contrle. L'diteur permet de mettre en uvre des
constantes pour l'afficheur anode ou cathode commune. De la mme faon, on peut utiliser les valeurs
en dcimal ou hexadcimal. L'aspect visuel de l'diteur est:

Figure 5-3

Lutilisation de cet outil signifie que toutes les broches de lafficheur sont attribues au mme port, et
dans un ordre conscutif comme on a vu ci-dessus. Pour la visualisation des chiffres dans lafficheur,
on doit organiser les informations de ces digits dans un ordre conscutif, dans le cas de cet exemple de
0 9. A cette fin, la forme la plus simple est l'utilisation d'un tableau de donnes contenant les codes
des 10 chiffres. Dans l'exemple suivant, on dclare un tableau constant avec les codes des 10 chiffres,
et on utilise un afficheur cathode commune. On observe comment dclarer des constantes qui
doivent tre insres avant la fonction main:
const unsigned short DIGITS[] =
{
0x3F, //Code du digit 0
0x06, // Code du digit 1
0x5B, // Code du digit 2
0x4F, // Code du digit 3
0x66, // Code du digit 4
0x6D, // Code du digit 5
0x7D, // Code du digit 6
0x07, // Code du digit 7
0x7F, // Code du digit 8
0x6F, // Code du digit 9
};

Support de cours

Page 31

Support de cours : Conception et simulation des systmes PIC

1 ELT

Pour afficher les chiffres dans l'afficheur 7 segments, cet exemple va utiliser le port B du PIC
16F84A. La visualisation des numros est contrle par une routine, qui change le chiffre aprs une
temporisation ralise par une fonction delay_ms, cette fonction qui est prdfinie dans les
bibliothques du compilateur. Cette fonction a pour paramtre dentre un entier reprsentant le temps
en millisecondes, pendant lequel le PIC effectue un retard, de la mme manire on peut utiliser la
fonction delay_us, qui est identique delay_ms mais en microsecondes.
Alors, le code source du PIC pour cet exemple est le suivant:
const unsigned short DIGITS[] =
{
0x3F, //Code du digit 0
0x06, //Code du digit 1
0x5B, //Code du digit 2
0x4F, //Code du digit 3
0x66, //Code du digit 4
0x6D, //Code du digit 5
0x7D, //Code du digit 6
0x07, //Code du digit 7
0x7F, //Code du digit 8
0x6F, //Code du digit 9
};
void main ( void )
{
unsigned short COMPTEUR=0;
TRISB = 0;
while( 1 )
{
PORTB = DIGITS[COMPTEUR];
COMPTEUR++;
delay_ms(1000);
}
}

// Configuration du port B en sortie


//Boucle infinie
//Visualisation du chiffre correspondant la valeur
//de la variable COMPTEUR.
//Incrmentation la valeur de compteur.
//Retard de 1 seconde.

L'tape suivante consiste effectuer la simulation dans ISIS, pour cet effet, les dispositifs suivants
sont dcouverts: 16F84A, RES, et 7SEG-COM-CATHODE. Pour la liaison entre le PIC et l'afficheur,
on devrait utiliser les rsistances de 330. Par la suite, on ralise le circuit suivant :

Circuit 5-1

Support de cours

Page 32

Support de cours : Conception et simulation des systmes PIC

1 ELT

A lexcution de la simulation, on doit voir sur lafficheur un comptage des nombres de 0 9, avec
une cadence dune seconde entre chiffres et chiffre.

5.1.2 Contrle de l'affichage dynamique 7 segments


La mise en uvre des afficheurs dynamiques utilise la mme thorie d'un seul afficheur, l'affichage
dynamique consiste afficher un seul chiffre la fois. Par exemple, si on veut afficher quatre chiffres,
on active lafficheur des units, ensuite on lteint et on active le chiffre des dizaines, puis on l'teint et
le chiffre des centaines est activ, enfin on fait la mme chose avec lafficheur des milliers.
Ce processus doit tre effectu une vitesse de manire tromper l'il humain, de sorte voir comme
si tous les chiffres ont t actifs. Cette gestion daffichage minimise les connexions lectriques et la
consommation d'nergie, car en ralit un seul afficheur est actif la fois.
Vue la perception de lil humain, les modifications doivent tre de 25Hz ou plus, donc tous les
chiffres doivent tre montrs pendant une dure gale l'inverse de 25Hz ,est gale 40ms. Pour cet
exemple, on utilise 4 afficheurs donc le temps daffichage de chaque chiffre doit tre un quart de la
priode qui est 10ms. Le moyen le plus efficace pour afficher les chiffres est dutiliser une fonction.
Avec 4 digits, il est possible dafficher un nombre de 0 9999, ce nombre on associe une variable de
type entier. Pour voir chaque chiffre sparment, il est ncessaire de calculer chacun des chiffres, par
exemple pour dduire le chiffre des milliers on divise le nombre par mille, puis soustraire les milliers
du nombre entier, ce processus est rpt jusqu' atteindre les units. Lactivation des afficheurs doit
se faire par un autre port, dans cet exemple elle est faite par le port A.
Pour comprendre ce processus, on observe et on analyse la fonction suivante:
// Dclaration des constantes pour lafficheur.
const unsigned short DIGITS[] =
{
0x3F, //Code du digit 0
0x06, //Code du digit 1
0x5B, //Code du digit 2
0x4F, //Code du digit 3
0x66, //Code du digit 4
0x6D, //Code du digit 5
0x7D, //Code du digit 6
0x07, //Code du digit 7
0x7F, //Code du digit 8
0x6F, //Code du digit 9
};
//Fonction pour lun affichage dynamique.
void Affichage( int Nombre )
{
unsigned short U;
unsigned short D;
unsigned short C;
unsigned short M;
M = Nombre/1000;
C = (Nombre-M*1000)/100;
D = (Nombre-M*1000-C*100)/10;
U = (Nombre-M*1000-C*100-D*10);
PORTB = DIGITS[U];
PORTA.F0=1;
delay_ms(10);
PORTA=0;
Support de cours

//Variable pour les units.


//Variable pour les dizaines.
//Variable pour les centaines.
//Variable pour les milliers.
//Calcul des milliers.
//Calcul des centaines.
//Calcul des dizaines.
//Calcul des units.
//Visualisation des units.
//Activer le premier afficheur
//Retard de 10ms
//Dsactiver tout les afficheurs.
Page 33

Support de cours : Conception et simulation des systmes PIC


PORTB = DIGITS[D];
PORTA.F1=1;
delay_ms(10);
PORTA=0;
PORTB = DIGITS[C];
PORTA.F2=1;
delay_ms(10);
PORTA=0;
PORTB = DIGITS[M];
PORTA.F3=1;
delay_ms(10);
PORTA=0;
}
void main ( void )
{
unsigned short N=0;
int Nombre=0;
TRISB = 0;
TRISA = 0;
PORTA = 0;
while( 1 )
{
Affichage(Nombre);

N++;
if( N==12 )
{
N=0;
Nombre++;
if( Nombre==10000 )
Nombre=0;
}
}
}

1 ELT

// Visualisation des dizaines.


//Activer le second afficheur
// Retard de 10ms
// Dsactiver tout les afficheurs.
//Visualisation des centaines.
//Activer le troisime afficheur
// Retard de 10ms
// Dsactiver tout les afficheurs.
//Visualisation des centaines.
// Activer le troisime afficheur
// Retard de 10ms
// Dsactiver tout les afficheurs.

//Variable de comptage.
//Configurer le port B en sortie
// Configurer le port A en sortie
//Dsactiver tout les afficheurs
//Boucle infinie
//Visualiser la valeur du Nombre.
//cette fonction dure approximativement 40ms.
//On compte 12 incrmentations de N pour faire une
//incrmentation
//du Nombre approximativement chaque 500ms.

//Initialiser le compteur N.
//Incrmentation de la valeur Nombre.
//Test si Nombre vaut 10000
//Initialisation 0 si nombre = 10000.

On compile le programme. Finalement, on ralise la simulation sur ISIS avec les dispositifs suivants
16F84A, RES, 7SEG-MPX4-CC,7404. Le circuit est le suivant:

Support de cours

Page 34

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 5-2

Pour des raisons pratiques, les inverseurs 7404 peuvent tre remplacs par un rseau de
transistors, comme on le voit dans l'image ci-dessous:

Circuit 5-3

Lorsque la simulation est en marche, ce circuit devrait afficher un nombre de 0 9999 avec une
cadence de 500ms entre chaque incrment.

5.2 Afficheur LCD


Les afficheurs de caractres cristaux liquides LCD sont des modules prfabriqus qui contiennent
des pilotes inclus. Ces crans disposent d'un bus de donnes et un bus de commande, pour la
manipulation de ces appareils, le compilateur MikroC PRO dispose d'une bibliothque prdfinie pour
contrler les LCD. L'apparence physique des LCD et celle dans ISIS sont prsentes dans la figure
suivante:

Support de cours

Page 35

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 5-4

Les afficheurs LCD, permettent de visualiser les caractres figurant dans le code ASCII. En plus du
code ASCII, LCD affiche jusqu' 8 caractres conus par le dveloppeur. Une autre caractristique
fondamentale des afficheurs LCD, tenant physiquement sur 8 bits, est la possibilit de configurer les
connexions avec seulement 4 bits. La connexion 8-bit implique un plus grand nombre de fils utiliser,
pour une meilleure vitesse de travail, par consquent les connexions de 4 bits rduits le nombre de fils,
mais diminue la vitesse. La bibliothque prdfinie dans MikroC PRO fonctionne avec une
configuration de 4 bits.
Pour voir la bibliothque prdfinie pour ce dispositif et d'autres, contenues dans MikroC PRO, on
choisit View dans la barre de menu, et on appuie sur lun onglet : Library Manager. Lorsquon appuie
sur cet onglet un menu montrant les diffrentes bibliothques quon peut utiliser avec les PIC.
Dans ce nouveau menu, on identifie la bibliothque Lcd, par la suite on peut appuyer sur une des
fonctions contenues dans la bibliothque pour voir l'aide. L'aspect visuel de cet outil est illustr dans la
figure suivante:

Support de cours

Page 36

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 5-5

L'implmentation de l'afficheur LCD, requiert l'utilisation des instructions et des commandes


squentielles pour la configuration et lutilisation de lafficheur, cependant, la bibliothque de MikroC
PRO minimise ce travail, car elle se charge de faire tous ces rglages, ce qui rend beaucoup plus facile
le travail dveloppeur.
Comme premire tape pour l'utilisation du LCD, il est ncessaire de dfinir les broches de connexion,
puis lexcution de la fonction dinitialisation du LCD : Lcd_Init(). La dfinition des broches de
connexion est assure par le dveloppeur dune faon arbitraire selon son choix. Pour rpondre cet
objectif, on utilise la dclaration suivante des constantes :
//Broches de sortie du LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Bits de configuration TRIS
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

Support de cours

Page 37

Support de cours : Conception et simulation des systmes PIC

1 ELT

Pour changer les broches, il suffit de changer les noms des sorties du port utilis dans l'exemple
prcdent. Comme on peut le voir dans la prsentation ci-dessus seulement 6 broches sont ncessaires
pour faire fonctionner le LCD, avec 4 bits de donnes et 2 bits de contrle.
A la fin, on doit appeler la fonction dinitialisation dans la fonction main aprs configuration des ports.
La fonction main doit tre comme suit:
void main( void )
{
Lcd_Init();
while(1)
{
}
}

//Initialisation du LCD.
//Boucle infinie.

Aprs ldition du code ci-dessus, l'afficheur LCD est initialis et devrait tre prt commencer
laffichage des caractres, se positionnant dans la premire ligne et la premire colonne, montrant le
curseur clignotant.
Les LCD sont fabriqus dans diffrentes formes et couleurs, ils sont disponibles avec des crans vert,
bleu et jaune, avec des distributions de caractres sous forme de matrice comme les LCD 2 lignes, 16
colonnes. Ceux-ci sont connus comme 2x16, de la mme manire on peut trouver des 1x16, 2x16, 2x8,
2x20, 4x20, entre autres. Pour les exemples de ce chapitre, on utilisera l'afficheur 4x20.
Pour dmarrer la simulation de l'afficheur LCD, on cherche le dispositif de LM044L, et PIC 16F84A
dans le simulateur ISIS. La rfrence LM044L dans ISIS correspond un LCD de 4x20. Enfin, on
effectue les connexions comme indiqu dans le circuit suivant:

Circuit 5-4

Lafficheur LCD a une broche nomme VEE, cette broche fonctionne comme contrleur du contraste
de l'cran, mais dans la simulation, elle n'a pas d'effet. Cette broche peut tre relie la masse pour

Support de cours

Page 38

Support de cours : Conception et simulation des systmes PIC

1 ELT

gnrer le contraste le plus lev, certains grands crans ncessitent une tension ngative externe pour
contrler le contraste. Pour des raisons pratiques, le contraste peut tre ajust par l'intermdiaire d'un
potentiomtre, comme indiqu dans le circuit suivant:

Circuit 5-5

La prochaine tape consiste afficher l'cran des informations. A cet effet, on peut utiliser quatre
fonctions. Deux de ces fonctions permettent d'afficher des caractres, et les deux autres des chanes de
caractres.
Pour afficher les caractres, on peut procder de deux faons, la premire affiche simplement les
caractres dans l'ordre conscutif pris par l'afficheur et la seconde fonction imprime les caractres dans
la ligne et la colonne dsignes par le dveloppeur.

5.2.1 Fonctions daffichage des caractres


La premire fonction daffichage des caractres est Lcd_Chr_Cp (char out_char) ; lorsque cette
fonction est invoque affiche sur l'cran le caractre qui correspond au code ASCII, qui est le
paramtre d'entre out_char. Avec l'impression d'un nouvel caractre sur lafficheur LCD, le curseur
se dplace automatiquement d'une position. Pour voir le fonctionnement de cette fonction, on observe
l'exemple suivant:
void main( void )
{
Lcd_Init();
Lcd_Chr_Cp(S);
Lcd_Chr_Cp(a);
Lcd_Chr_Cp(l);
Lcd_Chr_Cp(u);
Lcd_Chr_Cp(t);
while(1)
{
}
}

//Initialisation du LCD.
//cette fonction affiche lettre lettre le mot Salut.

//Boucle infinie.

Aprs l'excution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD:

Support de cours

Page 39

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 5-6

Pour l'affichage des caractres au moyen des cordonnes ligne, colonne, la fonction mise en uvre:
Lcd_Chr(char row, char column, char out_char); cette fonction imprime le caractre out_char, dans
la colonne column et la ligne row. Dans l'exemple ci-dessous, on peut voir comment utiliser cette
fonction:
void main( void )
{
Lcd_Init();
Lcd_Chr_Cp(S);
Lcd_Chr_Cp(a);
Lcd_Chr_Cp(l);
Lcd_Chr_Cp(u);
Lcd_Chr_Cp(t);
Lcd_Chr( 1, 6, 1);
Lcd_Chr( 2, 7, 2);
Lcd_Chr( 3, 8, 3);
Lcd_Chr( 4, 9, 4);
while(1)
{
}
}

//Initialisation du LCD
//Ces functions impriment lettre lettre le mot
//Salut.

//Imprime le caractre 1, dans la ligne 1, colonne 6


// Imprime le caractre 2, dans la ligne 2, colonne 7
// Imprime le caractre 3, dans la ligne 3, colonne 8
// Imprime le caractre 4, dans la ligne 4, colonne 9
//Boucle infinie.

Aprs l'excution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD:

Support de cours

Page 40

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 5-7

5.2.2 Fonctions d'affichage des chanes de caractres :


L'utilisation de chanes est similaire aux deux fonctions prcdentes, pour cela on peut afficher des
chaines de caractres un point arbitraire l'aide des coordonnes ligne et colonne. Pour imprimer
une chane de caractres la position courante du curseur, on utilise la fonction suivante:
Lcd_Out_Cp (char * text) ; elle a un paramtre d'entre unique qui est un pointeur vers la chane. Pour
voir comment utiliser cette fonction, on observe l'exemple suivant:
void main( void )
{
Lcd_Init();
Lcd_Out_Cp(salut tout le Monde);
while(1)
{
}
}

//Initialisation du LCD.
//Boucle infinie.

La mise en uvre de cette fonction peut tre faite avec des chanes de caractres constantes ou
variables, des chaines constantes sont indiques par des guillemets au dbut et la fin du texte, par
exemple "Salut tout le Monde ", la forme variable est dclare : char texte [20] = "Salut tout le Monde
". Aprs avoir excut la simulation, on a comme montr dans la figure suivante:

Support de cours

Page 41

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 5-8

Pour imprimer une chane de caractres avec une coordonne comme point de dpart, on implmente
la fonction : Lcd_Out(char row, char column, char *text);. Cette fonction est similaire la
prcdente, la diffrence quon inclut les donnes row et column, qui font rfrence respectivement
la ligne et la colonne. Pour bien comprendre le fonctionnement de cette fonction d'observe et on
analyse l'exemple suivant:
void main( void )
{
Lcd_Init();
Lcd_Out( 1, 1, Ligne 1, Colonne 1 );
Lcd_Out( 2, 2, Ligne 2, Colonne 2 );
while(1)
{
}
}

//Initialisation du LCD.

//Boucle infinie.

Aprs la compilation et la simulation de cet exemple, on devrait observer sur l'cran LCD comme suit:

Figure 5-9

5.2.3 Affichage des valeurs numriques


La visualisation des valeurs numriques est indispensable dans de nombreux dveloppements. Par
exemple, lorsquon souhaite afficher l'tat d'une variable, ou un capteur tel que : temprature,
humidit, la pression, etc...
Pour atteindre cet objectif, on peut recourir aux fonctions de conversion prdfinies par le compilateur.
Pour cela, on peut utiliser la bibliothque: Conversions, qui contient des fonctions qui convertissent
une valeur numrique en une chane de caractres.
Si on veut afficher une valeur de type entier, on utilise la fonction : IntToStr(int input, char *output);
cette fonction a deux paramtres d'entre sont: input, qui est une valeur entire afficher, et output,
qui est un pointeur sur une chane o on veut crire la forme texte de la valeur intput. Pour comprendre
ce type de conversion, on observe et on analyse l'exemple suivant:
void main( void )
Support de cours

Page 42

Support de cours : Conception et simulation des systmes PIC


{
int ENTIER=123;
char Text[20];
Lcd_Init();
IntToStr( ENTIER,Text );
Lcd_Out_Cp(Text);
while(1)
{
}
}

1 ELT

//Dclaration dune variable entire avec valeur


//initiale 123.
//Chaine de caractres pour laffichage des donnes.
//Initialisation du LCD.
//Fonction de conversion.
//Impression du texte dans lcran LCD.
//Boucle infinie.

Limpression des nombres entiers en chane de caractres avec cette fonction, rserve toujours un
champ fixe de 7 caractres, c'est dire si le nombre est infrieur 7 chiffres le reste du texte est
complt par des espaces vides. Aprs compilation du programme et simulation sur ISIS, on a un
rsultat comme dans la figure suivante:

Figure 5-10

Limpression des nombres dcimaux (avec virgule) peut tre fait avec la fonction:
FloatToStr(float fnum, char *str);. La philosophie de fonctionnement de cette fonction est identique
la prcdente, qui fait des conversions d'entiers. Pour raliser l'exemple suivant, on doit modifier la
rfrence du microcontrleur, cela est d la capacit de mmoire du PIC 16F84A, qui n'est pas
suffisante pour les exercices suivants.
void main( void )
{
int ENTIER=123;
123.
float DECIMAL=12.76543;
char Text[20];
Lcd_Init();
IntToStr( ENTIER,Text );
Lcd_Out(1,1,Text);
FloatToStr( DECIMAL,Text );
Lcd_Out(2,1,Text);
while(1)
{
}
}

Support de cours

//Dclaration dune variable entire avec la valeur initiale


//Dclaration dune variable avec point dcimal
//initialisation 12,76543.
// Chaine de caractres pour laffichage des donnes.
//Initialisation du LCD.
//Fonction de conversion entire .
//Impression du texte en sur lcran LCD.
//Fonction de conversion dcimale.
// Impression du texte en sur lcran LCD.
//Boucle infinie.

Page 43

Support de cours : Conception et simulation des systmes PIC

1 ELT

Aprs la simulation, on a le rsultat sur la figure suivante:

Circuit 5-6

Le mme processus peut tre suivi pour autres types de variables telles que: short avec la fonction:
ShortToStr(short input, char *output);
Les variables long avec la fonction:
LongToStr(long input, char *output);
Des variables unsigned short avec la fonction:
ByteToStr(unsigned short input, char *output);
Variables unsigned long avec la fonction:
LongWordToStr(unsigned long input, char *output);
Les variables unsigned int avec la fonction:
WordToStr(unsigned int input, char *output);

Support de cours

Page 44

Support de cours : Conception et simulation des systmes PIC

1 ELT

6. Systmes dentre des donnes


L'interaction de lutilisateur avec les systmes microcontrleurs ncessite des systmes dentre de
donnes. Pour ce faire, on utilise des priphriques tels que des interrupteurs, des claviers et mme des
claviers PS2 utiliss par les ordinateurs de bureau. Ce chapitre se concentre sur l'tude des boutons,
interrupteurs et les Dip-Switch.

6.1 Utilisation de boutons


La mise en uvre des boutons est l'un des alternatives les plus populaires dans les interfaces avec les
utilisateurs. Les boutons sont simples utiliser, et ils ont un cot, de mise en uvre, conomique. Le
bouton-poussoir peut tre normalement ouvert ou normalement ferm. Limplmentation de ces
dispositifs est sujette aux effets de rebonds ou de bruit, quand ils changent d'tat. Compte tenu du
traitement rapide des microcontrleurs, ces effets de bruit, font que le PIC peut dtecter des
changements et des tats logiques indfinis. Pour comprendre ce concept, on regarde le graphique cidessous qui montre le comportement de ce bruit:

Figure 6-1

Lorsque des changements de tension traversent la zone indfinie, gnrent des rebondissements de
ltat haut ltat bas et vice versa. Le microcontrleur les dtecte comme des impulsions. Pour viter
l'effet du bruit ou des rebonds, on devrait faire une temporisation en attendant la stabilisation de l'tat
du signal. La dure moyenne d'un rebond est de 1 5 millisecondes, indique qu'un retard doit tre
effectu suprieur ce temps pour attendre la stabilisation. Un retard convenable cet effet est
suprieur ou gal 10 millisecondes. Ce dlai devrait s'appliquer aprs la dtection du premier
changement sur le bouton.
Pour le traitement des boutons et llimination des rebondissements, le compilateur MikroC PRO
dispose dune bibliothque Button, qui peut tre touv dans la palette ou l'onglet des bibliothques.
Cette bibliothque contient la seule fonction: unsigned short Button(unsigned short *port, unsigned
short pin, unsigned short time, unsigned short active_state); o port est le port o le bouton est
connect, pin est le bit du port o le bouton est connect, time est le temps d'attente en millisecondes
du bruit et active_state est l'tat logique pour lequel on souhaite l'activation du bouton. La fonction
retourne 0 si le bouton n'est pas actif et 255 si elle est active. Installation des boutons peut tre
effectue de deux manires, actif ltat haut ou actif ltat bas, la figure suivante montre comment
configurer les deux possibilits:

Support de cours

Page 45

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 6-1

La dcision d'utiliser l'activation ltat haut ou bas, dpend du dveloppeur qui doit analyser la
manire la plus simple au moment de la conception. On rappelle que dans tous les cas l'activation
finale peut tre inverse avec la fonction de la bibliothque. Pour analyser et tudier l'utilisation de
cette bibliothque, on cre un nouveau projet avec les composants: PIC 16F877A, BUTTON, RES, et
LED-RED. Le circuit correspondant dans ISIS est le suivant:

Circuit 6-2

Le programme respectif du microcontrleur est le suivant:


void main( void )
{
TRISB=0xF0;
PORTB=0;
while(1)
{
if( Button(&PORTB, 7, 100, 0) )
PORTB.F0=1;
else
Support de cours

//Configuration des ports.


//Boucle infinie
//Test de dtat du bouton sur RB7,activ ltat bas
// Allumer le voyant si le bouton est actif.

Page 46

Support de cours : Conception et simulation des systmes PIC

1 ELT

//Eteindre la LED sil est relach.

PORTB.F0=0;
}
}

A lexcution de la simulation, la LED doit s'allumer lorsque le bouton est press, et steindre
lorsqu'il est relch.
L'exemple suivant commute ltat de la LED :
void main( void )
{
TRISB=0xF0;
PORTB=0;
while(1)
{
if( Button(&PORTB, 7, 100, 0) )
{
if( PORTB.F0==1 )
PORTB.F0=0;
else
PORTB.F0=1;

//Configuration des ports.


//Boucle infinie.
//Test de ltat actif du bouton.
// Commutation de ltat de la LED.

//Attente que le bouton soit no actif.


while( Button(&PORTB, 7, 100, 0) );
}
}
}

6.2 Utilisation des Dip-Switch


Les Dip-Switch, sont des dispositifs mcaniques contenant plusieurs interrupteurs dans un seul boitier.
Ces dispositifs permettent de configurer de faon simple les caractristiques binaires des systmes
microcontrleurs. Les Dip-Switch, sont disponibles dans le commerce dans des tailles, des couleurs, et
des nombres dinterrupteurs diffrents. Leurs aspects physiques et leurs schmas dans le simulateur
ISIS sont les suivants:

Figure 6-2

Lutilisation du Dip-Switch est similaire au bouton. Il peut tre configur de la mme manire avec
activation sur ltat haut ou bas. Ces configurations peuvent tre apprcis dans le circuit suivant:

Support de cours

Page 47

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 6-3

Pour comprendre l'utilisation du Dip-Switch avec les microcontrleurs PIC, on observe et on analyse
l'exemple suivant:
void main( void )
{
TRISB = 0;
PORTB = 0;
TRISC = 255;
while(1)
{
PORTB = ~PORTC;
}
}

//Configuration de ports.

//Boucle infinie.
//Sortir dans le port B le complment du port C.

Pour excuter la simulation dans ISIS, on utilise les dispositifs suivants: 16F877A, RES, LED-RED,
DIPSW_8. Puis le circuit suivant est mis en uvre dans ISIS:

Support de cours

Page 48

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 6-4

En excutant la simulation, les LED montrent l'tat du Dip-Switch.

Support de cours

Page 49

Support de cours : Conception et simulation des systmes PIC

1 ELT

7. Conversion AD et DA
La conversion analogique-numrique et numrique analogique est un processus par lequel on peut
prendre ou dlivrer un chantillon d'un signal continu de tension. Lutilisation des conversions est trs
utile pour le traitement numrique des signaux. La conversion analogique numrique, ou ADC, peut
tre faite avec des microcontrleurs qui intgrent ce type de convertisseur. Le processus de conversion
numrique-analogique est possible avec des lments externes faciles implmenter, mme on peut
effectuer cette conversion par des modules PWM incorpors dans certains des microcontrleurs.

7.1 Conversion AD, ou ADC


Ce processus est ralis avec un convertisseur interne du microcontrleur. Ce module est intgr dans
la plupart des microcontrleurs de moyenne et haute gamme. La conversion implmente sur les
PICmicro a une rsolution de 10 bits, ce qui permet un nombre allant de 0 1023, proportionnel aux
valeurs de rfrence, qui sont par dfaut 0 volts et 5 volts.
Cela signifie que si une entre analogique a une tension de 0 volt, le rsultat est 0, et si la tension est
de 5 volts, le rsultat de la conversion est de 1023, de la mme faon si la tension est de 2,5 volts, le
rsultat est de 512. En fonction de la complexit d'un microcontrleur, le PIC peut avoir jusqu' huit
entres du signal analogique. Cependant, il est noter que le microcontrleur a un seul module interne
de conversion, mais plusieurs canaux de lecture des tensions analogiques mais pas simultanment.
Pour effectuer ces conversions le compilateur MikroC PRO offre une bibliothque prdfinie : ADC
pour faire la conversion. Cette bibliothque contient une fonction appele ADC_Read(unsigned short
channel). Cette fonction retourne le rsultat de la conversion de la chaine spcifie par le paramtre
channel. Pour utiliser cette bibliothque, on peut observer et analyser l'exemple suivant:
void main( void )
{
//Dclaration des variables.
unsigned int Donnee;
//Initialisation des ports.
TRISB = 0;
TRISC = 0;
PORTB = 0;
PORTC = 0;
while(1)
//Boucle infinie.
{
Donnee = ADC_Read(0);
//Conversion sur le canal 0.
//Sortir les 8 bits de poids le plus faible sur le port B.
PORTB = Donnee&0xFF;
// Sortir les 2 bits de poids le plus fort sur le port C.
PORTC = (Donnee>>8)&0x03;
}
}
Pour simuler cet exemple, on doit utiliser les dispositifs suivant: 16F877A, RES, LED-RED, POT-HG,
le circuit suivant sur ISIS :

Support de cours

Page 50

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 7-1

Aprs l'excution de la simulation, les LED montrent le code binaire correspondant la valeur de la
conversion analogique-numrique de la tension applique par le potentiomtre lentre analogique 0.

7.2 Conversion DA ou DAC


Cette conversion est possible grce deux stratgies, la premire consiste utiliser le module PWM
du microcontrleur, et la seconde est la mise en uvre d'un ensemble externe de rsistance pour
obtenir la valeur analogique.

7.2.1 Conversion DA avec PWM


La conversion numrique-analogique, avec le module de PWM, consiste prendre le signal modul en
largeur d'impulsion et d'effectuer la dmodulation par l'intermdiaire d'un filtre passe-bas. Ce filtre
doit avoir la frquence de coupure trs infrieure la frquence d'chantillonnage avec un rapport
proche de 10, car son but est d'liminer la frquence d'chantillonnage. Le calcul de la frquence de
coupure de ce filtre est rgi par la formule suivante:

FC

1
2RC

quation 7-1

Le circuit suivant met en uvre un filtre passe-bas du premier ordre:

Circuit 7-2

Limplmentation dun filtre passe bas second ordre :

Support de cours

Page 51

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 7-3

Lexpression de la frquence de coupure de ce filtre est :

FC

1
2RC 2

quation 7-2

La frquence attribue la porteuse PWM, doit tre beaucoup plus grande que la frquence du signal
modulant. Pour expliquer le fonctionnement de cette conversion, on dsigne 20 chantillons
correspondant une priode d'un signal sinusodal. Les chantillons et la forme d'onde peut tre vu
dans la figure suivante:

Figure 7-1

La mise en uvre de la bibliothque PWM, fait au moyen de quatre fonctions sont:

PWM1_Init(const long freq);, cette fonction initialise le module PWM la frquence de la


porteuse freq.

PWM1_Set_Duty(unsigned short duty_ratio);, Cette fonction dfinit le rapport cyclique de


travail par le paramtre duty_ratio, ce paramtre peut prendre des valeurs de 0 255, o 0 est
0% et 255 est 100% de la priode de la porteuse.

La figure suivante illustre le comportement d'un signal PWM, selon la priode de travail, la relation
fpwm et Tpwm:

Support de cours

Page 52

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 7-2

Enfin, il y a des fonctions: PWM1_Start () et PWM1_Stop ();, Qui active et dsactive respectivement
le signal PWM.
Pour la simulation doit crer un projet en MikroC PRO, avec le code source suivant:
//Dclaration des constantes
//pour le signal sinus.
const unsigned short Sinus[20] =
{
127, 146, 163, 177, 185, 189, 185,
177, 163, 146, 127, 107, 90, 76,
68, 65, 68, 76, 90, 107
};
void main( void )
{
unsigned short n=0;
PWM1_Init(15625);
Hz.

//Dclaration des variables.


//Configuration du module PWM Fpwm=15.625K
//Initialisation de signal PWM.

PWM1_Start();
while(1)
{
for( n=0; n<20; n++ )

//Boucle infinie.
//Boucle pour parcourir les 20 chantillons
//dune priode du signal sinus.

{
PWM1_Set_Duty( Sinus[n] );
delay_us(50);

//Modification du rapport cyclique du PWM.


//Retard de 50us.

}
}
}
L'excution de la simulation ncessite les dispositifs: 16F877A, RES, PAC, OP1P et des instruments
virtuels: OSCILLOSCOPE. Ce dernier est un oscilloscope virtuel 4 canaux simultans, idal pour
l'affichage des signaux analogiques et mme numriques.
Ce circuit met en uvre un filtre passe-bas pour liminer fpwm frquence porteuse dans ce cas est
15.6KHz, le filtre a une frquence de coupure d'environ 1,5 kHz.
Dans les applications futures, il est recommand de calculer les filtres, dfinir une valeur arbitraire
pour le condensateur C, entre 100 pF et 100nF et calculer la valeur de R, en utilisant les quations cidessus.

Support de cours

Page 53

Support de cours : Conception et simulation des systmes PIC

1 ELT

Avec les lments ci-dessus, on construit le circuit suivant:

Circuit 7-4

Au cours de la simulation, on peut voir sur loscilloscope le signal analogique de forme sinusodale,
produit de la reconstitution numrique du PIC, par l'intermdiaire du module PWM, et le filtre passebas. Le signal visualis par l'oscilloscope peut tre apprci sur la figure suivante:

Figure 7-4

7.2.2 Conversion DA rseau R- 2R :


Le rseau des rsistances R-2R, permet la conversion d'un nombre binaire en une valeur de tension
proportionnelle. Cette disposition permet de mettre en uvre un nombre indtermin de bits, la
diffrence du module PWM, qui est limit 8 bits. Cela signifie que, avec le rseau R-2R, on peut
effectuer des conversions de 8, 16, 32, 64, ou d'un nombre de n bits en fonction du nombre de broches
disponibles dans un microcontrleur.
La mise en uvre du convertisseur R-2R est facile raliser, car il est constitu d'un rseau de
rsistances o lune est le double de l'autre, d'o le nom de R-2R.

Support de cours

Page 54

Support de cours : Conception et simulation des systmes PIC

1 ELT

Il est noter que plus on utilise de bits, plus la rsolution est meilleure, donc une plus grande qualit
du signal reconstruit.
Linconvnient notable de cette disposition est l'augmentation du matriel exig, et par consquent,
l'utilisation d'un plus grand nombre de broches du port.
Dans le circuit ci-dessous, on peut voir la configuration des rsistances pour une conversion de 8 bits:

Circuit 7-5
Cette disposition peut tre tendue avec la mme architecture de ralisation pour un convertisseur

d'une rsolution plus leve, ce qui augmente le nombre d'entres D, qui est le mme nombre de bits.
Une autre caractristique de ce type de conversion est qu'il ne ncessite pas des bibliothques
spcialises, il suffit simplement de placer la valeur numrique convertir sur un port, et la valeur
analogique sera prsente dans la sortie.
De la mme faon quon a procd pour la conversion avec PWM, il est important de supprimer la
frquence d'chantillonnage pour viter les composantes de signal.
Le schma complet du convertisseur avec un suiveur pour ladaptation dimpdances, suivi dun filtre
passe bas de frquence de coupure 1.5KHz:

Circuit 7-6

Pour montrer l'application de cette technique de conversion, on modifie l'exemple de la conversion


PWM, cet effet, on observe et on analyse le code source suivant:
const unsigned short Sinus[20] =
{
127, 146, 163, 177, 185, 189, 185,
177, 163, 146, 127, 107, 90, 76,
68, 65, 68, 76, 90, 107
};
Support de cours

//Dclaration des constantes pour le signal sinus.

Page 55

Support de cours : Conception et simulation des systmes PIC


void main( void )
{
unsigned short n=0;
TRISB = 0;
PORTB = 127;
while(1)
{
for( n=0; n<20; n++ )

1 ELT

//Dclaration des variables.


//Configuration des ports.
//Boucle infinie.
//Boucle pour parcourir les 20 chantillons
//dune priode du signal sinus.

{
PORTB = Sinus[n];
delay_us(50);
}
}
}

//Modification de la valeur de lchantillon sortie sur


le //port B.
//Retard de 50us.

On dite et on compile ce programme, on procde la simulation dans ISIS, du circuit suivant:

Support de cours

Page 56

Support de cours : Conception et simulation des systmes PIC

1 ELT

Circuit 7-7

Le rsultat attendu est cette simulation est similaire la simulation du convertisseur avec PWM, la
sortie de l'oscilloscope devrait montrer une courbe identique.

Support de cours

Page 57

Support de cours : Conception et simulation des systmes PIC

1 ELT

8. Les PICs
8.1 Les microcontrleurs
Un microcontrleur est un composant lectronique Autonome dot :

dun microprocesseur,
de la mmoire RAM,
de la mmoire permanente
des interfaces dE/S parallle, srie (RS232, I2C )
des interfaces dE/S analogique
des Timer pour grer le temps
dautres modules plus au moins sophistiqus selon la taille des C.

Le microcontrleur est gnralement moins puissant quun microprocesseur en terme de rapidit ou de


taille mmoire, il se contente le plus souvent dun bus 8 ou 16 bits. Ceci en fait un composant trs bon
march. Il est parfaitement adapt pour piloter les applications embarques dans de nombreux
domaines dapplication.
On retrouve un microcontrleur ( puissant) dans chaque quipement lectronique :

Informatique (souris, modem )


Vido (Appareil photos numrique, camra numrique )
Contrle des processus industriels (rgulation, pilotage)
Appareil de mesure (affichage, calcul statistique, mmorisation)
Automobile (ABS, injection, GPS, airbag)
Multimdia (tlviseur, carte audio, carte vido, MP3, magntoscope)
Tlphones (fax, portable, modem)
Electromnager (lave-vaisselle, lave-linge, four micro-onde)

Un microcontrleur peut tre programm une fois pour toutes afin qu'il effectue une ou des tches
prcises au sein d'un appareil lectronique. Mais les C rcents peuvent tre reprogramms et ceci
grce leur mmoire permanente de type FLASH (do le terme flasher un appareil).

Plusieurs Constructeurs se partagent le march des microcontrleurs, citons INTEL,MOTOROLA,


AMTEL, ZILOG, PHILIPS et enfin MICROCHIP avec ses PICs trs populaires.
Les microcontrleurs, quelque soit leurs constructeurs, ont des architecture trs similaires et sont
constitus de modules fondamentaux assurant les mmes fonctions : UAL, Ports dE/S, interfaces de
communications srie, Interfaces dE/S analogiques, Timer et horloge temps rels On peut dire que
seul le langage de programmation (Assembleurs) constitue la diffrence majeure entre deux
microcontrleurs (similaires) venant de deux constructeurs diffrents.

8.2 Les PICs de Microchip


Les PICs sont des microcontrleurs architecture RISC (Reduce Instructions Construction Set), ou
encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le nombre
dinstructions, plus leur dcodage sera rapide ce qui augmente la vitesse de fonctionnement du
microcontrleur.

Support de cours

Page 58

Support de cours : Conception et simulation des systmes PIC

1 ELT

Les PICs sont subdivises en 3 grandes familles : La famille Base-Line, qui utilise des mots
dinstructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la
16F84 et la 16F877), et la famille High-End, qui utilise des mots de 16 bits.
Les PICs sont des composants STATIQUES, Ils peuvent fonctionner avec des frquences dhorloge
allant du continu jusqu une frquence max spcifique chaque circuit.
On se limite dans ce document la famille Mid-Range et particulirement aux PIC 16F84/877, sachant
que si on a tout assimil, on pourra facilement passer une autre famille, et mme un autre
microcontrleur.

8.3 Identification dun PIC


Pour identifier un PIC, on utilise simplement son numro.
Les 2 premiers chiffres indiquent la catgorie du PIC, 16 indique une PIC Mid-Range.
Vient ensuite parfois une lettre L : Celle-ci indique que le PIC peut fonctionner avec une plage de
tension beaucoup plus tolrante.
Ensuite, on trouve lune des indications suivantes :

C indique que la mmoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mmoire de type ROM
F pour indiquer une mmoire de type FLASH.

On note ce niveau que seule une mmoire FLASH ou EEPROM est susceptible dtre efface.
Puis on trouve les derniers chiffres identifiants prcisment le PIC. (84/877)
Enfin on voit sur les botiers -XX dans laquelle XX reprsente la frquence dhorloge maximale
que le PIC peut recevoir. Par exemple 04 pour une 4MHz.
Donc, un 16F84-04 est un PIC Mid-Range (16) dont la mmoire programme est de type FLASH (F)
donc rinscriptible, de type 84 et capable daccepter une frquence dhorloge de 4MHz.
Une dernire indication que on trouve est le type de botier. Le botier PDIP par exemple est un botier
DIL 18 broches, avec un cartement entre les ranges de 0.3.

Support de cours

Page 59

Support de cours : Conception et simulation des systmes PIC

1 ELT

9. Le PIC 16F84
9.1 Organisation du 16F84
Les microcontrleurs de la socit Microchip les plus rencontres sont les 16F84 et 16F87X. Leur
structure est du type HARVARD et se composent d'une CPU architecture RISC 8 bits.
Le 16F84, en botier DIP 18 broches, peut fonctionner une frquence maximale de 10 MHz pour un
cycle d'instruction de 400ns. Il est constitu des lments suivants :

1 K mots de 14 bits de mmoire programme du type Flash,


68 octets de RAM,
64 octets dEEPROM,
2 ports d'E/S (un de 8 bits et un de 5 bits),
Un Timer 8 bits,
Un Watchdog,
Une interruption externe.

Figure 9-1

9.2 La mmoire du PIC


La mmoire du PIC 16F84 est divise en 3 parties : la mmoire programme, la RAM et lEEPROM.
La mmoire programme
La mmoire programme est constitue de 1K mots de 14 bits. Cest dans cette zone quon va crire le
programme. Ceci fait 2Kbytes maximum sur PC.
Support de cours

Page 60

Support de cours : Conception et simulation des systmes PIC

1 ELT

La mmoire EEPROM
La mmoire EEPROM (Electrical Erasable Programmable Read Only Memory), est constitue de 64
octets quon peut lire et crire depuis un programme. Ces octets sont conservs aprs une coupure de
courant et sont trs utiles pour conserver des paramtres semi-permanents. Leur utilisation implique
une procdure spciale quon verra par la suite, car ce nest pas de la RAM, mais bien une ROM de
type spcial. Il est donc plus rapide de la lire que dy crire.

La mmoire RAM
La mmoire RAM est celle qui est trs utilise. Toutes les donnes qui y sont stockes sont perdues
lors dune coupure de courant. La mmoire RAM est organise en 2 banques pour la 16F84. La RAM
est subdivise de plus en deux parties. Dans chacune des banques on trouve des cases mmoires
spciales appeles REGISTRES SPECIAUX et des cases mmoires libres dont on peut se servir.

9.3 L'Horloge
L'horloge peut tre soit interne soit externe. L'horloge interne est constitue d'un oscillateur quartz
ou d'un oscillateur RC. Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 10 MHz
selon le type de C.

Figure 9-2

Le filtre passe bas (Rs, C1, C2) limite les harmoniques dus lcrtage et Rduit lamplitude de
Loscillation, il n'est pas obligatoire.
Avec un oscillateur RC, la frquence de l'oscillation est fixe par VDD, Rext et Cext. Elle peut varier
lgrement d'un circuit l'autre.

Figure 9-3

Dans certains cas, une horloge externe au microcontrleur peut tre utilise pour synchroniser la PIC
sur un processus particulier.

Figure 9-4

Support de cours

Page 61

Support de cours : Conception et simulation des systmes PIC

1 ELT

Quelque soit l'oscillateur utilis, l'horloge systme dite aussi horloge instruction est obtenue en
divisant la frquence par quatre. Par la suite on utilisera le terme Fosc/4 pour dsigner l'horloge
systme. Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour
excuter une instruction de 1s.

9.4 L'ALU et laccumulateur W


LALU est une Unit Arithmtique et logique 8 Bits qui ralise les oprations arithmtiques et logique
de base. Laccumulateur W est un registre de travail 8 bits, toutes les oprations deux oprandes
passent par lui. On peut avoir :
Une instruction sur un seul oprande qui est en gnral un registre situ dans la RAM ;
Une instruction sur 2 oprandes. Dans ce cas, lun des deux oprandes est toujours
laccumulateur W, lautre peut tre soit un registre soit une constante.
Pour les instructions dont un des oprandes est un registre, le rsultat peut tre rcupr soit dans
laccumulateur, soit dans le registre lui-mme.

9.5 Brochage du PIC

Figure 9-5

VSS et VDD : broches d'alimentation (3 5,5V).


OSC1 et OSC2 : signaux d'horloges, ces broches peuvent recevoir un circuit RC ou un
rsonateur.
CLKIN : peut tre connecte une horloge externe (0 4, 10 ou 20 MHz).
MCLR : Reset (Master Clear).
RA0, ... , RA4 : 5 entres/sorties du port A.
RB0, ... , RB7 : 8 entres/sorties du port B.
T0CKI : Entre d'horloge externe du Timer TMR0.
INT : entre d'interruption externe.

Support de cours

Page 62

Support de cours : Conception et simulation des systmes PIC

1 ELT

9.6 Les registres


Chaque registre provoque un fonctionnement spcial de la PIC ou la mise en service dune fonction
particulire.

Figure 9-5

Certains registres sont identiques dans les 2 banques (FSR par exemple). Cela signifie quy accder
depuis la banque 0 ou 1 ne fait pas de diffrence.

La banque 0 utilise les adresses de 0x00 0x7F,


la banque 1 allant de 0x80 0xFF.
Les zones en gris sont des emplacements non utiliss (et non utilisables).
Lemplacement 0x00 est un emplacement auquel on ne peut pas accder.

Pour la grande majorit des registres, chaque bit a une fonction spciale.

Support de cours

Page 63

Support de cours : Conception et simulation des systmes PIC

1 ELT

9.6.1 Registre dtat


Le registre dtat STATUS, son contenu est le suivant :

STATUS

IRP

RP1

RP0

/T0

/PD

DC

03

Adresse
03 ou

STATUS.7

IRP est un bit destin permettre laccs plus de 256 mots de RAM
par adressage indirect, il nest pas utilis par le 16C84

83H
STATUS

RP1-RP0 Sont les deux bits de slection de la PAGE en RAM, seul 6-5
RP0 est utilis par le 16C84. Le second peut tre utilis comme bit dusage
gnral mais cela est dconseill pour des raisons de compatibilit des
Logiciels avec dautres botiers de la famille 16CXX.

STATUS.4

/TO (Time Out) Est mis 1 lors de la mise sous tension ou de la remise
zro du chien de garde, il est bascul 0 si le chien de garde dborde.

STATUS.3

/PD (Power Down) Est mis 1 la mise sous tension, 0 par une
instruction SLEEP

STATUS.2 Z (Zro) Mis 1 si le rsultat dune opration est nulle.


STATUS.1 DC (Digit Carry) Cest la retenue intermdiaire de larithmtique DCB
STATUS.0 C Est la retenue en addition ou soustraction.
Tableau 9-1

9.6.2 Registres du Timer


Adresse 01 TMR0 est le compteur utilis par le TIMER et le chien de garde
Adresse 02 PCL: compteur programme ou plus exactement loctet bas de ladresse dans la ROM de
ou
programme. Les 5 bits supplmentaires sont contenus dans le registre PCLATH dadresse
0A (ou 8AH).
82H
Tableau 9-2

9.6.3 Registres des ports


Adresse 05 le PORT_A et 85H le registre de direction TRIS_A de ce port (1=entre,0=sortie)
ou 85H
Adresse 06 Le PORT_B et 86H le registre de direction TRIS_B
ou 86H
Tableau 9-3

Support de cours

Page 64

Support de cours : Conception et simulation des systmes PIC

1 ELT

9.7 Les interruptions


Le 16F84 dispose de 4 sources dinterruptions :
-

Une source externe via la broche RB0/INT


Le dbordement du TIMER
un changement de ltat des bornes 4 7 du port B
La programmation de lEEPROM de donnes

Registre INTCON
Les interruptions sont dfinies et autorises partir du registre INTCON

Adresse
0B
ou 8B

INTCON

GIIE

EEIE

RTIE

INTE

RBIE

RTIF

INTF

RBIF

0B

INTCON.7

GIE est le bit dautorisation de toutes les interruptions, au 0 aucune


interruption nest active, cest son tat au RESET.

INTCON.6

EEIE valide linterruption associe lEEPROM de donnes

INTCON.5
INTCON.4

RTIE Mis 1 il autorise les interruptions associes au dbordement du


compteur du TIMER (RTCC)
INTE Cest la validation de linterruption extrieure reue sur RB0

INTCON.3

RBIE Valide ou non les interruptions provoques par un changement


dtat sur les fils 7 4 du port B.

INTCON.2

RTIF Sil est mis 1 ce bit indique quune interruption t dcele


sur lentre.

INTCON.1

INTF. Ce bit dtecte cette interruption mme si elle nest pas autorise

INTCON.0

RBIF Indique un changement dtat sur les 4 fils RB7-4.


Tableau 9-4

9.8 LEEPROM de donnes


Elle ne fait pas partie du champ mmoire normal et nest accessible que par une procdure
spciale mettant en uvre les registres EEDATA EEADR EECON1 et 2

Support de cours

Page 65

Support de cours : Conception et simulation des systmes PIC

1 ELT

EECON1
EEIF WRERR WREN WR
RD
88H
7
6
5
4
3
2
1
0
EECON1.4 EEIF EEPROM Interrupt Flag est mis 1 lorsquune
criture est termine une interruption lui est associe, il ne
faut pas oublier que lcriture dun octet dans lEEPROM
prend 10mS.
EECON1.3 WREER Mis 1 si une erreur sest produite pendant
lcriture

Adresse
88H

EECON1.2 WREN ce bit doit tre mis 1 pour autoriser une criture,
il est au 0 Au reset
EECON1.1 Doit tre forc 1 pour crire une donne, est remis 0 par
le logiciel lorsque lcriture est acheve
EECON1.0 RD Doit tre mis 1 pour lire un octet, est remis
automatiquement au 0 par le circuit.
Tableau 9-5

Procdure de lecture dun octet en EEPROM :


1. crire ladresse dans EEARD
2. Mettre 1 le bit RD=EECON1.0
3. Lire le contenu de EEDATA
Procdure dcriture dans lEEPROM :
1. Charger ladresse dans EEADR
2. Charger la donne crire dans EEDATA
3. Excuter le programme de scurisation suivant :

Charger 55 dans W
Transfrer W dans EECON2 (adresse 89H)
Charger AA dans W
Transfrer W dans EECON2
Monter 1 le bit WR de EECON1

Il nexiste pas de procdure deffacement car toute criture dans une case mmoire EEPROM efface
son contenu prcdent.

Support de cours

Page 66

Support de cours : Conception et simulation des systmes PIC

1 ELT

10. Le PIC 16F877


10.1 Les lments de base du PIC 16F877
Les 16F87X, en botier DIP 28 ou 40 broches, peuvent fonctionner une frquence maximale de 20
MHz pour un cycle d'instruction de 200ns. Ils sont constitus des lments suivants :

Mmoire programme du type Flash peut atteindre 8 K mots de 14 bits,


64 256 octets dEEPROM,
128 368 octets de RAM,
des ports E/S,
des Timers,
Un convertisseur A / N 10 bits avec 5 ou 8 entres multiplexes,
Un chien de garde (WatchDog).
Une interface srie synchrone (SPI) ou asynchrone (USART).

PIC

FLASH RAM

EEPROM

I/O

A/D

Port//

Port Srie

16F870

2K

128

64

22

NON

USART

16F871

2K

128

64

33

PSP

USART

16F872

2K

128

64

22

NON

MSSP

16F873

4K

192

128

22

NON

USART/MSSP

16F874

4K

192

128

33

PSP

USART/MSSP

16F876

8K

368

256

22

NON

USART/MSSP

16F877

8K

368

256

33

PSP

USART/MSSP

Tableau 10-1

10.2 Organisation du 16F877


Le 16F877 dispose de 8Ko de mmoire Flash pour le programme, 368 octets de RAM et 256 octets
d'EEPROM. Il possde 5 ports E/S (3 de 8 bits, un de 6 bits et un de 3 bits), ces 33 entres/sorties sont
configurables individuellement. Son convertisseur A/N est de 10 bits avec 8 entres multiplexes. En
plus des 3 Compteur/Timer de 8 bits, il possde 2 Timers 8 bits et un Timer 16 bits. Il a 15 sources
d'interruption. Il dispose de deux interfaces srie, une synchrone (SPI) et lautre asynchrone (USART).

Support de cours

Page 67

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 10-1

10.3 Organisation de la mmoire RAM


Lespace mmoire RAM adressable est de 512 positions de 1 octet chacune :
96 positions sont rserves au SFR (Special Function Registers) qui sont les registres de
configuration de la PIC.
Les 416 positions restantes constituent les registres GPR (General Propose Registers) ou RAM
utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets chacun ne sont pas implants
physiquement do une capacit de RAM utilisateur de 368 GPR.
Pour accder la RAM, on dispose de deux modes dadressage.

10.4 Registres

Support de cours

Page 68

Support de cours : Conception et simulation des systmes PIC

1 ELT

Figure 10-2

Support de cours

Page 69

Support de cours : Conception et simulation des systmes PIC

1 ELT

10.5 Le convertisseur A/N

Figure 10-3

La PIC 16F877 possde 8 entres analogiques (RA0..RA3, RA5 et RE0..RE2 pour les PICs disposant
du port E)
Ces entres sont multiplexes vers un CAN approximation successive (SAR = Successive
Approximation Register). Celui-ci a une rsolution de 10 bits.
Le CAN est prcd dun chantillonneur/bloqueur permettant une stabilit de la tension dentre
pendant toute la dure de la conversion.

Support de cours

Page 70

Support de cours : Conception et simulation des systmes PIC

11.

1 ELT

Les capteurs

La mise en uvre de capteurs dans les systmes microcontrleurs est utile dans de nombreuses
applications. Les capteurs permettent d'obtenir des lectures des grandeurs physiques telles que la
temprature, l'acclration, la pression, l'humidit, la vitesse du vent, la luminosit, le contraste entre
autres. Son application est importante dans les systmes de contrle, de la robotique et de
l'instrumentation.

11.1 Capteur de temprature LM35


Le capteur LM35 est un dispositif actif trois bornes permettant de mesurer des plages de temprature
ambiante de -55 150 degrs Celsius ou centigrades. Ce dispositif est facile mettre en uvre car il ne
comporte que deux bornes de polarisation et une sortie de tension directement proportionnel de la
temprature. Ce capteur peut tre aliment de 4V 30 V et possde une sortie de 10mV par degr
Celsius. L'aspect physique du capteur, son brochage et comment il se prsente ISIS, sont illustr dans
la figure suivante:

Figure 11-1

Pour effectuer la lecture de la tension de sortie du capteur, on met en uvre le module CAN du
microcontrleur. La sortie maximale du capteur est de 1,5V, lorsque la temprature est de 150 degrs
Celsius. Il est donc important de changer la valeur de la rfrence positive du convertisseur analogiquenumrique, afin d'amliorer la rsolution de la mesure de tension. Pour l'exemple suivant la tension de
rfrence positive de l'ADC sera fixe 2,5 volts. Prendre la rfrence positive 2,5V, le convertisseur
donne un rsultat binaire 1023 lorsque la tension convertir est de 2,5V. Dans le cas de ce capteur, va
tre dfini par les relations suivantes:

O Radc est le rsultat binaire de conversion AN. A partir de cet quation, on peut dduire que la
tension Vadc lue par le convertisseur analogique-numrique est le suivant:

Travailler avec la relation du capteur : 10mV/C, on peut se rfrer l'quation suivante:

O N est la temprature en degr Celsius enregistre par le capteur, de cet quation on peut dduire que
la temprature N est :

Remplaant lquation(2) en (4), on obtient la relation suivante :

Support de cours

Page 71

Support de cours : Conception et simulation des systmes PIC

1 ELT

Cette relation doit tre mise en uvre avec la conversion AD, dans le programmation du PIC.
Pour mettre en contexte l'utilisation de ce capteur, on peut observer et analyser le code source suivant
pour PIC 16F877A:
//Dfinition des broches du LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Dfinition des TRIS du LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main( void )
{
//Dclaration des variables.
unsigned int Radc, TemI;
float Tem;
char Text[16];
//Configuration du module ADC avec la broche AN3
//comme tension de rfrence positive.
ADCON1 = 0b11000001;
//Initialization du LCD.
Lcd_Init();
//Effacer le curseur.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Affichage du texte.
Lcd_Out( 1, 1, "Temperature:");
while(1)
//Boucle infinie.
{
//Lecture du canal 0 du module CAN.
Radc = ADC_Read(0);
//Utilisation de l quation (5).
Tem = 0.244*Radc;
//Convertir le rsultat en un nombre entier.
TemI = Tem;
//Convertir le nombre entier en une chaine de caractres.
IntToStr( TemI, Text );
//Affichage du rsultat.
Lcd_Out( 2, 1, Text);
//Retard de 100m secondes.
Support de cours

Page 72

Support de cours : Conception et simulation des systmes PIC

1 ELT

delay_ms(100);
}
}
Aprs l'dition et la compilation du programme, on doit construire un circuit dans ISIS avec les
dispositifs suivants: 16F877A, IC, LM35, et LM016L, ceci peut tre vu dans la figure suivante:

Circuit 11-1
Les rsistances 330 constituent un diviseur de tension pour crer la rfrence de 2,5 volts. Au cours de
la simulation, on peut changer la valeur de temprature au capteur LM35 pour le voir travailler....

11.2 Capteur de pression :


La pression est une quantit physique, reprsente par un vecteur qui est dfini comme tant la force
applique sur une surface dtermine. La pression est note en des units diffrentes selon le systme, la
pression peut tre donne: psi, Pascal, atmosphres, etc. Pour des raisons pratiques, on va travailler avec
le capteur de pression MPX4115, ce capteur est caractris en Kilo Pascal, et peut mesurer des pressions
comprises entre 15 et 115 kPa, ou entre 2,18 et 16,7 psi. L'apparence physique, le brochage et commet il
se prsente sur ISIS de ce dispositif est dans la figure suivante:

Figure 11.2
Support de cours

Page 73

Support de cours : Conception et simulation des systmes PIC


PIN
1
2
3
4, 5,6

1 ELT

Fonction
Vout
GND, rfrence
Vs, alimentation
No connects
Tableau 11-1

En fonction du capteur mis en place, chaque capteur a une relation de la sortie ou une fonction de
transfert, dans le cas particulier de la fonction de transfert du capteur MPX4115 indique par le
fabricant est:

O Vout est la tension de sortie du capteur, P est la pression en kilopascals, et Vs la tension


d'alimentation du capteur. Rsolution de l'quation (6), la pression P, on obtient:

En fonction du convertisseur AD du PIC configur avec 10 bits de rsolution on peut conclure:

Donc on va extraire la tension n de l'quation (8) et en la remplaant dans l'quation (7), on peut obtenir
la relation ou l'quation qui va tre utilise dans le microcontrleur pour dterminer la pression. La
relation est la suivante:

Pour le cas particulier de cet exemple, on utilise une source dalimentation de 5V pour le PIC et le
capteur. Donc Vs est gale 5V, la relation finale devient :

Pour dmontrer le fonctionnement pratique de ces capteurs, on peut observer et analyser le code source
suivant:
//Dfinition des broches du LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Dfinition des TRIS du LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main( void )
{
//Dclaration des variables.
Support de cours

Page 74

Support de cours : Conception et simulation des systmes PIC

1 ELT

unsigned int Radc, PreI;


float Pre;
char Text[16];
//Initialization du LCD.
Lcd_Init();
//Effacer le cursor.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Affichage du texte.
Lcd_Out( 1, 1, "Pression en KPa:");
while(1) //Boucle infinie.
{
//Lecture du canal 0 du module CAN.
Radc = ADC_Read(0);
//Utilisation de l quation (9).
Pre = 0.10861*Radc+10,5555;
//On prend la partie entire du rsultat.
PreI = Pre;
//On convertit le nombre entier en chaine de caractres.
IntToStr( PreI, Text );
//Affichage du rsultat.
Lcd_Out( 2, 1, Text);
//Retard de 100m secondes.
delay_ms(100);
}
}

Support de cours

Page 75

TP programmation C sur PIC avec Mikroc

1ELT

TP 1 Prise en main
I. Cration d'un premier projet

Vous disposez d'un petit fascicule en anglais intitul Creating the first project in mikroC for PIC. Ce
texte vous indique la marche suivre pour crer et compiler un projet.

1. Manipulation :
Suivre les instructions (jusqu' l'excution - run) avec les recommandations suivantes :
- nom du projet : tp1a
- Chemin du projet d:\tp_pic\tp1. Ce dossier doit tre cr en remplaant rep_perso par un nom qui
vous est propre
- Le type (device) est lire sur la puce elle-mme. En principe 16F887.
- Choisir les fusibles par dfaut.
- Le programme suivant est saisir :
1

2
3
4
5
6
7
8
9

void main ()
{
PORTB = 0;
TRISB= 0;
while (1) {
PORTB = ~PORTB; // Clignoter PORTC
delay_ms(1000);
}
}

Si vous voulez un fonctionnement correct de Delay_ms, il faut configurer aussi la frquence du quartz
(8 MHz) correctement.

2. Manipulation
Aller dans le dossier de votre projet et examiner les fichiers .hex, .mcl, .asm, .lst. Que contiennent ces
fichiers, quelle est leur utilit ?
Par quelles instructions assembleur sont traduites les lignes suivantes ?
- PORTB = 0;
- TRISB= 0;

II. Excution pas--pas, dboguage

Crer un nouveau projet toujours dans votre dossier tp1 nomm tp1b. Le programme saisir est le suivant :
1

2
3
4
5
6
7
8
9

void main ()
{
int k ;
PORTB = 0;
TRISB= 0;
for (k=0;k<256;k++) {
PORTB = k;
// Comptage binaire sur PORTB
delay_ms(500);}
}

A.TAOUNI

TP programmation C sur PIC avec Mikroc

1ELT

3. Manipulation
Pour utiliser le dbogueur reportez-vous la photocopie ci-aprs.

- Compiler le projet (Build - CTRL+F9)


- Lancer le dbogueur (Start Debugger - F9)
- Suivre en pas pas l'excution du programme (Step Into par exemple). Vrifier l'allumage correct des
diodes du PORTB.
Prenez l'habitude partir de maintenant de raliser vos programme en version runtime, c'est--dire sans
dbogueur. Celui-ci ne sera utilis que si ncessaire, c'est dire pour retrouver une erreur subtile dans
un programme.

A.TAOUNI

TP programmation C sur PIC avec Mikroc

1ELT

TP2 des leds


I. Rappels

On rappelle qu'en C le OU boolen se fait par ||, le ET boolen par &&. Nous aurons besoin du OU bit
bit | et du ET bit bit &. Soit le contenu d'un registre C sur 8 bits,
b7 b6 b5 b4 b3 b2 b1 b0
1
1
1
0
0
0
1
1

1. Prparation :
- Vous dsirez mettre le bit b2 1 sans changer les autres bits, comment faites-vous ?
- Vous dsirez mettre le bit b6 0 sans changer les autres bits, comment faites-vous ?
II. Exemple

On vous donne un programme C qui fait clignoter une led (poids faible) sur le portC.
1 void main ()
2
{
3
4
PORTC = 0;
5
TRISC= 0;
6
while (1) {
7
PORTC = 0x01;
8
Delay_ms(1000);
9
PORTC = 0x00;
10
Delay_ms(1000);
11
}
12 }

1. Exercice 2.1:
crire ce programme, le charger et l'excuter. Modifiez-le pour faire clignoter RC1.
III. Exercices

1. Exercice 2.2:
crire un chenillard simple : une led se dplaant sur le PORTC (de haut en bas) et en utilisant le
mme type de temporisation que dans le programme exemple. Utilisez l'un des oprateurs >> ou <<.

2. Exercice 2.3:
crire un chenillard double : un chenillard de haut en bas et simultanment de bas en haut qui se
croisent.

A.TAOUNI

TP programmation C sur PIC avec Mikroc

1ELT

TP3 Ports en entre/sortie


I. Rappels
:
Les ports A, B, C, D et E sont des ports d'entre/sortie dont chaque bit peut tre utilis soit en entre
soit en sortie, de faon indpendante. Ainsi chaque bit possde un satellite : TRISA, TRISB, TRISC,
TRISD et TRISE qui permet de dterminer le sens de chaque bit (0: Output, 1 : input). Par exemple :
1

void main ()

On
vous
2
{ donne un programme C qui fait clignoter une led (poids faible) sur le port B.
3
4
5

TRISA= 0b00000100; // tous les bits en sortie pour PORTA sauf RA2
PORTA = 0;
}

est un programme qui positionne des entres et sorties sur le PORTA.


II. Exercices

1. Exercice 3.1:
crire un programme qui positionne en entre les quatre bits de poids faible du PORTB et en sortie
les quatre autres. Le programme doit alors en permanence copier les 4 bits de poids faibles vers les
quatre bits de poids fort.

2. Exercice 3.2:
crire un programme qui comporte les lments suivants :

un compteur binaire sur le PORTC (256 tats). Placer une temporisation de 100 ms entre chaque
tat.
L'appui sur RB2 (bit b2 du PORTB) doit remettre zro le compteur.
Les accs aux bits seront effectus par des accs directs (en crivant PORTB.F2 pour accder
au bit b2 du PORTB). Puis dans un second temps avec des masques.

3. Exercice 3.3: Changement d'tat d'une diode


Raliser un programme avec le cahier des charges suivant :

En dbut de programme le bit RC0 (bit b0 du PORTC) doit tre allum.


Ensuite un front montant sur RB0 (bit b0 du PORTB) provoquera un changement d'tat de la
diode.
Les accs aux bits seront effectus par des accs directs (en crivant PORTB.F2 pour accder
au bit b2 du PORTB). Puis dans un second temps avec des masques.

4. Exercice 3.4: Compteur


Reprendre le compteur de l'exercice 3.2 avec les modifications suivantes :

un front descendant sur RA2 (bit b2 du PORTA) provoquera le RAZ du compteur


un front descendant sur RA1 (bit b1 du PORTA) incrmentera le compteur.

A.TAOUNI

TP programmation C sur PIC avec MikroC

1ELT

TP4 afficheurs LCD


I. Prsentation
:
Ce composant est spcialement fabriqu pour tre utilis avec les microcontrleurs. Il est utilis pour
afficher des diffrents messages sur un cran cristaux liquides miniature. Il peut afficher des
messages sur deux lignes de 16 caractres chacune. Il permet d'afficher toutes les lettres de
l'alphabet, les lettres grecques, des signes de ponctuation, des symboles mathmatiques, etc. Il est
galement possible d'afficher des symboles construits par l'utilisateur.
Autres fonctions utiles comprennent dplacement automatique des messages (gauche et droite),
l'apparence du curseur.

Figure 1

II. Exercices

1. Exercice 4.1:
En vous aidant de laide du mikroC PRO for PIC (figure 2) crire un programme qui affiche le
message Salam! Sur le LCD 2x16, conformment la (figure 3).

Figure 2

A.TAOUNI

TP programmation C sur PIC avec MikroC

1ELT

Figure 3

2. Exercice 4.2:
crire un programme qui comporte les lments suivants :

Effacer le curseur.

Modifier le programme pour crire le message Lyce Alkhaouarizmy sur deux lignes de
lafficheur LCD.

3. Exercice 4.3: Dcalage droite et gauche du texte :


Raliser un programme avec le cahier des charges suivant :

Modifier le programme de lexercice 4.2, pour dcaler le message 16 fois droite et 16 fois
gauche.
Effacer le lafficheur LCD.

A.TAOUNI

TP programmation C sur PIC avec MikroC

1ELT

TP5 Convertisseur analogique numrique du PIC16F877


I. Prsentation DU
:

C.A.N. (CONVERTISSEUR ANALOGIQUE NUMRIQUE).

Le PIC 16F877 possde 8 entres analogiques (RA0..RA5 et RE0..RE2 pour les PICs disposant du port
E) multiplexes vers un C.A.N. approximation successive (SAR = Successive approximation register).
Ce dernier est prcd dun chantillonneur / bloqueur permettant une stabilit de la tension dentre
pendant toute la dure de la conversion.

Figure 1

II. Exemple

On dsire afficher la valeur en provenance d'un convertisseur analogique numrique sur un LCD.
La figure ci-dessous explique comment et un programme d'exemple se trouve parmi les dmonstrations
fournies dans la rubrique daide.

Figure 2

A.TAOUNI

TP programmation C sur PIC avec MikroC

1
2
3
4
5
6
7
8
9
10
11
12
13
14

1ELT

unsigned int temp_res;


void main() {
TRISA = 0xFF;
TRISB = 0;
TRISC = 0;
do {
temp_res = ADC_Read(2);
PORTB = temp_res;
PORTC = temp_res >> 8;
} while(1);
}

// PORTA is input
// PORTB is output
// PORTC is output

// Get 10-bit results of AD conversion


// Send lower 8 bits to PORTB
// Send 2 most significant bits to RC1, RC0

1. Exercice 5.1:
crire un programme qui lit le convertisseur et affiche le rsultat sur lafficheur.
Adapter pour que votre programme lise RA3 (contre RA2 dans le programme d'exemple).

Figure 3

2. Exercice 5.2:
Modifier le programme prcdent pour quil affiche la valeur de la tension correspondante la valeur
numrique donne par le convertisseur conformment la figure ci-dessous :

A.TAOUNI

TP programmation C sur PIC avec MikroC

1ELT

Figure 4

A.TAOUNI

TD : Programmation du PIC en MikroC

1ELT

Exercice 1 :
crire le programme pour raliser la mesure et l'affichage sur LCD de la temprature en utilisant un
capteur de temprature LM35. La temprature mesure est comprise entre 0C et 150C.

Caractristiques du capteur de temprature LM 35

Le capteur LM35 dispose d'une caractristique linaire Vcapteur = f (T) suivante :

Caractristiques principales
Plage de la tension d'alimentation
Sensibilit
Prcision

0,2 Volt 35 Volts


10 mV / C
+/- 0,5C ( 25C)

Type de botier

TO 92

Lyce Alkhaouarizmy

A.Taouni

TD : Programmation du PIC en MikroC

1ELT

Exercice 2 :
crire le programme pour raliser la mesure et l'affichage sur LCD de la pression en utilisant un capteur
de pression MPX4115. La pression mesure est comprise entre 15 et 115KPa.
Caractristiques du capteur de pression MPX4115 :

PIN
1
2
3
4, 5,6

Lyce Alkhaouarizmy

Fonction
Vout
GND, rfrence
Vs, alimentation
No connects

A.Taouni

TD : Programmation du PIC en MikroC

1ELT

Exercice 3:
crire un programme de thermostat utilisant le LM35, un bouton UP, un bouton DOWN, un afficheur
LCD et une LED:

Appui sur UP: Trgle ++


Appui sur DOWN: Trgle -Affichage: Tmesure et Trgle
Si Tmesure < Trgle, LED allume
Si Tmesure Trgle, LED teint

Exercice 4:
Faire l'algorithme de gestion de l'affichage d'un menu sur LCD srie:

Au dbut:

Choix 1
Choix 2
Choix 3
Choix 4

Appui sur DOWN:

Choix 1
Choix 2
Choix 3
Choix 4

Appui sur DOWN:

Lyce Alkhaouarizmy

Choix 1
Choix 2
Choix 3
Choix 4

A.Taouni

TD : Programmation du PIC en MikroC

1ELT

Appui sur DOWN:

Choix 1
Choix 2
Choix 3
Choix 4

Choix 2
Choix 3
Choix 4
Choix 5

Appui sur DOWN:

Appui sur UP:

Choix 2
Choix 3
Choix 4
Choix 5

Le code ASCII pour est 0x7E

Exercice 5:
crire le programme pour faire dfiler un texte de gauche droite sur l'afficheur LCD:

L
Ly
lyc
lyce

Lycee
ycee

Alkhaouarizmy
Alkhaouarizmy

Lyce Alkhaouarizmy

A.Taouni