Vous êtes sur la page 1sur 63

V.TOURTCHINE. Programmation en mikroC.

Application pour les microcontrleurs de la


famille PIC

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE


MINISTERE DE LENSEIGNEMENT SUPERIEUR ET DE LA
RECHERCHE SCIENTIFIQUE

UNIVERSITE MHAMED BOGARA DE BOUMERDES


FACULTE DES SCIENCES - DEPARTEMENT PHYSIQUE

Spcialit : INFOTRONIQUE
&
IMAGERIE ET APPAREILLAGE BIOMEDICAL

V. TOURTCHINE
Programmation en mikroC. Application pour les
microcontrleurs de la famille PIC

/*******************************
COMMUNICATION SERIE RS232
=========================
Cet exemple illustre
l'utilisation de fonction
Software_UART de la bibliothque
du compilateur mikroC PRO.
Microcontrl.: 16F887
Oscillat.: HS,10.0000 Mhz
Fichier: COMMUNIC_RS232.c
********************************
/
char error, byte_read;
void main()
{
ANSEL = 0;
ANSELH = 0;
TRISC = 0x00; /*Configurer
PORTB en sortie */
PORTC = 0;
Initialiser Soft_UART en 9600
bods Soft_UART_Init(&PORTC,
7, 6, 9600, 1);
if (error > 0)

Manuscrit labor selon le programme officiellement agre et confirme par le Conseil


Scientifique de la Facult des Sciences

BOUMERDES - 2012

-0-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

I. LANGAGE ET COMPILATEUR mikroC POUR PIC


Le langage mikroC pour PIC a trouv une large application pour le dveloppement de systmes
embarqus sur la base de microcontrleur. Il assure une combinaison de l'environnement de
programmation avance IDE (Integrated Development Environment) , et dun vaste ensemble
de bibliothques pour le matriel, de la documentation complte et dun grand nombre des
exemples.

Le compilateur mikroC pour PIC bnficie d'une prise en main trs intuitive et d'une ergonomie
sans faille. Ses trs nombreux outils intgrs (mode simulateur, terminal de communication
Ethernet, terminal de communication USB, gestionnaire pour afficheurs 7 segments, analyseur
statistique, correcteur d'erreur, explorateur de code, mode Dbug ICD...) associ sa capacit
pouvoir grer la plupart des priphriques rencontrs dans l'industrie (Bus I2C, 1Wire,
SPI, RS485, Bus CAN, USB, gestion de cartes compact Flash et SD/MMC, gnration
de signaux PWM, afficheurs LCD alphanumriques et graphiques, afficheurs LEDs 7
segments, etc...) en font un outil de dveloppement incontournable pour les systmes
embarqus, sans aucun compromis entre la performance et la facilit de dbogage.

1.1 Compilateur mikroC PRO pour PIC

La nouvelle version appele mikroC PRO dispose de trs nombreuses amliorations du


compilateur mikroC : nouvelles variables utilisables, nouvelle interface IDE, amlioration des
performances du linker et de l'optimisateur, cycle de compilation plus rapide, code machine
gnr plus compact (jusqu' 40 % suivant les cas), nouveaux PIC supports, environnement
de dveloppement encore plus ergonomique, nouveaux exemples d'applications, etc...

1. Dans la suite nous utiliserons le compilateur mikroC PRO v.1.65

2. La simulation des applications de programmation nous ralisons laide du


logiciel PROTEUS v.7.6 SP

1.2 Installation du compilateur mikroC PRO v. 1.65

Pas 1 : Cliquer sur licne mikroC_PRO_1.65.exe (Si la fentre du Contrle de compte


dutilisateur souvre, cliquer sur oui), et attendre que les donnes de linstallation se
dcompressent.

-1-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Pas 2 : Cliquer sur Next

Pas 3 : Cocher la case : I accept the terms in the License Agreement et cliquer sur Next

-2-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Pas 4 : Avant de cliquer sur Next, il est recommand de laisser la case Install For All Users
coch. Cliquer sur Next

Pas 5 : Cliquer sur Next

-3-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Pas 6 : Cliquer sur Install (Noter bien lendroit dinstallation)

Pas 7 : Cliquer sur OUI pour lassociation du format de fichier .c avec le logiciel mikroC PRO

-4-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Pas 8 : Cliquer sur Finish

Pas 9 : Aller dans le rpertoire M_License et copier les deux fichiers qui sy trouvent.

Pas 10 : Coller pour remplacer les deux fichiers copis auparavant dans le rpertoire o
mikroC PRO a t install.

Pas 11 : Cliquer deux fois sur le fichier mikroC_PRO_PIC.key pour enregistrer ses
informations sur le registre de votre ordinateur.

Pas 12 : Lancer le programme MikroC PRO en cliquant deux fois sur mikroCPIC1618.exe

1.3 IDE mikroC PRO


Lancer le compilateur mikroC PRO en cliquant sur licne

mikroC PRO for PIC.lnk

Cest sur la figure 1.1 que vous obtenez lorsque vous dmarrez l IDE mikroC PRO pour la
premire fois.
Une description dtaill de toutes les options disponibles dans ce compilateur prendre trop de
temps, de sorte que nous allions sauter cette tape. Au lieu de cela, nous allons dcrire
salement le processus dcriture dun programme en langage mikroC, un simulateur de
contrle. Pour plus dinformations reportez-vous laide [F1].

-5-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Menu Toolbar Projet Manager

Code Explorer

Code Editor

Project Settings
(paramtres
principaux du
microcontrleur)

Error Window

Fig. 1.1 Lenvironnement IDE du compilateur microC PRO

Editeur de code (voire la figure 1.1 : Code Editeur)


Lditeur de code est le mme que toute diteur de texte standard pour lenvironnement de
Windows, y compris Copie, Coller , Annuler les actions etc Il possde en plus des ressources
comme suit :

Coloration syntaxique rglable


Assistant de code
Assistant de paramtre
Mise en forme automatique

Dans la bote de dialogue Obtions (figure 1.2) vous pouvez configurer la coloration syntaxique,
l'aide pour le code et paramtres, la correction automatique etc. Pour accder ce dialogue

cliquez sur Tools > Options du menu droulant ou sur l'icne

Assistant de code
Si vous imprimez les premires lettres du mot et puis appuyez sur Ctrl + Espace, tous les
identificateurs autoriss correspondant aux caractres imprims seront offerts dans une fentre
(voir la figure 1.3). Maintenant, nous pouvons continuer rduire le choix de taper ou d'utiliser
la sourie pour slectionner l'option approprie dans la propose et appuyez sur Entre.

-6-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Fig.1.2. Bote de dialogue Options

Fig.1.3. Assistant de code

Mise en forme automatique


Afin d'obtenir une lisibilit maximale, il est possible de gnrer automatiquement la mise en
forme de certaines instructions. Par exemple, tapez l'instruction IF, puis CRTL + J. A ce stade,
l'diteur ajoute tout seul les instructions. A vous ensuite de complter le programme.

Affichage syntaxique color


Toujours dans le but d'obtenir une lisibilit maximale de votre programme, il vous est possible
de configurer entirement les couleurs de chaque partie du listing (figure 1.2). Par exemple les
commentaires en "vert", les instructions en "noir", les valeurs numriques en "bleu clair", etc.

Outils intgrs
Le compilateur "MikroC PRO" pour PIC intgre diffrents petits outils trs pratiques qui vous
simplifieront lcriture des programmes de vos applications.

-7-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

a) Mini terminal USART


Le "MikroC PRO" intgre un petit terminal
de communication USART RS-232
(Universal Synchronous Asynchronous
Receiver) pour lequel vous pourrez
configurer le dbit, les commandes RTS
et DTR....

b) Mini gestionnaire 7 segments


Le "MikroC PRO" intgre un petit utilitaire
qui vous permettra de slectionner la
valeur dcimale ou hexadcimale fournir
pour piloter un afficheur 7 segments.

c) Table de conversion ASCII


Le "MikroC PRO" intgre un petit
utilitaire qui vous permettra d'afficher
une table de conversion ASCII (trs utile
lorsque vous travaillez avec des
afficheurs LCD).

d) Gestion des LCD graphiques


Le "MikroC PRO" intgre un petit utilitaire
qui vous permettra de convertir des fichiers
BMP en donnes pouvant tre affiches
sur plusieurs types de LCD graphiques.

-8-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

1.4 Cration dun nouveau projet

Le mikroC PRO pour PIC organise des applications dans des projets, compos d'un seul
fichier de projet (extension. mcppi) et un ou plusieurs fichiers sources (extension).

Les fichiers source peut tre compil que si elles font partie d'un projet.
Le fichier projet contient les informations suivantes :

- Nom du projet et une description facultative


- Composant cible
- Option du composant
- Frquence dhorloge du composant
- La liste des fichiers source du projet avec les chemins
- Fichiers d'image
- Fichiers binaires (* mcl.)
- D'autres fichiers

La meilleure faon de crer un projet cest l'aide de l'Assistant Nouveau projet (menu
Project> New ProjeCt ) ou en cliquant sur l'icne Nouveau projet partir de la barre d'outils
du projet.

-9-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Nouvelles tapes de l'Assistant de projet

Commencez crer votre nouveau projet, en cliquant sur le bouton Next :

Premier pas - Slectionnez le priphrique dans le priphrique dans la liste droulante.

- 10 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Deuxime pas - Saisir la valeur de frquence de l'oscillateur.

Troisime pas - Spcifiez l'emplacement o votre projet sera enregistr.

- 11 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Quatrime pas - Ajout pour le projet un fichier sil sont disponibles en ce moment.
vous pouvez toujours ajouter des fichiers de projet plus tard
en utilisant Project Manager.

- 12 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Cinquime tape - Cliquez sur Finish pour crer votre nouveau projet.

A ce stade, une nouvelle fentre vide (fig. 1.4) saffiche afin que vous pussiez y saisir votre
programme.

Ici vous devez saisir votre code-source

1.5 Compilation

- 13 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Lorsque vous avez cr le projet et crit le code source, il est temps de le compiler.

Slectionnez Project Build partir du menu droulant ou cliquez sur l'icne Build dans
la barre d'outils du projet.

Si plus d'un projet est ouvert, vous pouvez compiler tous ouverts projets en slectionnant Project

Build All dans le menu droulant, ou cliquez sur licne de la barre d'outils du projet.

Barre de progression s'affiche pour vous informer sur l'tat de la compilation. Si il y a des
quelques erreurs, vous en serez inform dans la fentre d'erreur (fig. 1.4).

Fig. 1.4 Avertissement des rreures

Aprs la compilation russie, le compilateur mikroC PRO pour PIC gnre des fichiers de sortie
dans le dossier du projet (dossier qui contient le fichier projet. mcppi). Les fichiers de sortie sont
rsums dans le tableau ci-dessous:

Format Description Type de fichier


Intel HEX Code hexadcimal dans le format Intel. Fichier est utilis .hex
pour programmer PIC
Binary Fichier compil pour la bibliothque mikroC. Les .mcl
distributions binaires sont des routines qui susceptibles

- 14 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

dtre inscrits dans d'autres projets.


List File Lmage globale de lallocation de mmoire du PIC pour : .lst
adresses dinstructions, les registres et les tiquettes du
programme.
Assembler Le fichier en assembleur avec des noms symboliques, .asm
File obtenus partir de liste des fichiers.

1.5 Fichiers Sources

Cration dun nouveau fichier source

Pour crer un nouveau fichier source, procdez comme suit :


Slectionne New depuis le menu File ou pressez Ctrl+N ou cliquez
sur licne New Fill depuis la barre doutils File.
Une nouvelle fentre souvrira dans laquelle vous pourrez saisir
votre code source. Slectionnez alors Save depuis le menu File ou
pressez Ctrl+S ou cliquez sur licne Save File depuis la barre
doutils File et nommez ce dernier comme vous le voulez.

Ouvrir un fichier existant


Slectionnez Open depuis le menu File ou pressez Ctrl+Q ou
cliquez sur licne Open File depuis la barre doutils File. Dans la
boite de dialogue Ouvrir, slectionnez alors lemplacement du
fichier que vous dsirez ouvrir et cliquez sur le bouton Ouvrir.

Le fichier slectionn saffiche dans sa propre fenetre. Si le


fichier slectionn est dj ouvert, sa fenetre ddition (Editor)
deviendra alors active.

Sauvegarder un fichier
Assurez-vous que la fentre contenant le fichier que vous
voulez sauvegarder est active.

Slectionnez ensuite Save depuis le menu File ou pressez


Ctrl+S ou cliquez sur licne Save Fail de la barre doutils File.

Sauvegarder un fichier sous un nom diffrent


Assurez-vous que la fentre contenant le fichier que vous
voulez sauvegarder est active.

Slectionnez ensuite Save As depuis le menu File. Une bote


- 15saffichera
de dialogue Save [nom du fichier] .c as - alors.
Dans cette bote, slectionnez lemplacement dans lequel
vous voulez sauvegarder le fichier.
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

II. INTRODUCTION AU LANGAGE DE PROGRAMMATION MICROC


2.1 Structure d'un programme en mikroC

La structure la plus simple d'un programme en mikroC, cest le programme reprsent dans le
code-source 2.1, qui nous permettra de faire clignoter une LED connecte au PORTB (par
exemple bit 0 du PORTB) du microcontrleur PIC avec une priode de 2 secondes (1 seconde
allume et une seconde teinte).

2.1.1 Rgles gnrale dcriture en microC

Les instructions propres au langage microC doivent tre crites en minuscule


(void main (void)).
Les instructions particulires aux microcontrleurs doivent tre crites en majuscule
(TRISB).
Les retours la ligne et les espaces servent uniquement arer le code

Toutes instructions ou actions se terminent par un point virgule ; .

Code-source 2.1

/****************************************************************************
LED clignotante
==============
Ce programme fait clignoter dune LED connecte au PORTB (broche RB0) avec
un des intervalles d'une seconde.
Microcontrleur : 16F84A
Oscillateur : HS, 4.0000 Mhz
- 16 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Fichier : LED.c
Date : Juillet 2012
****************************************************************************/
void main()
{
for(;;) // Boucle sans fin
{
TRISB = 0; // Configuration du PORTB en sortie
PORTB.0 = 0; // RB0 = 0
Delay_Ms(1000); // Pause dune seconde
PORTB.F0 = 1; // RB0 = 1
Delay_Ms(1000); // Pause dune seconde
} // Fin de la boucle
}

Examinons le fichier LED.c du code-source

2.1.2 Commentaires
Les commentaires sont utiliss pour prciser le fonctionnement du programme et pour une
annotation du programme. Les lignes de commentaires sont ignores et non compil par le
compilateur.

En mikroC les commentaires de programmes peuvent tre de deux types: de longs


commentaires, stendant sur plusieurs lignes, et de courts commentaires, occupant une
seule ligne.

Un commentaire au dbut d'un programme peut dcrire brivement le fonctionnement du


programme et de fournir le nom de l'auteur, le nom du fichier programme, la date laquelle le
programme a t crit, et une liste des numros de version, ainsi que les modifications dans
chaque version.

Comme montre le Code-source 2.1 les longs commentaires commencent par le caractre
/* et se termine par le caractre */ .
De mme, de courts commentaires commencent par le caractre // et il na pas
besoin d'un caractre de terminaison.

2.1.2 Dbut et fin d'un programme

En langage microC, un programme commence avec les mots-cls:

void main()

Aprs cela, une accolade ouvrante est utilise pour indiquer le dbut du corps de programme.
Le programme se termine par une accolade fermante.

Ainsi, comme indiqu dans le Code-source 2.1, le programme a la structure suivante :

void main()
{
// Votre code ici
}

- 17 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

2.1.3 Fin dune instruction


Le point virgule ; indique la fin dune instruction, sinon une erreur du compilateur sera
gnre.

j = 5; // correcte
j = 5 // erreur

2.1.4 Espaces blancs

Les espaces blancs sont des espaces, des flans, les tabulations et les caractres de nouvelle
ligne. Le compilateur microC ne tient pas compte tous les espaces blancs. Ainsi, les trois
squences suivantes sont identiques :

int i; char j;

ou

int i;
char j;

ou

int i;
char j;
De mme, les squences suivantes sont identiques :

i=j+2 ;
ou

i=j
+2 ;

2.2 Elments de programmation en mikroC

2.2.1 Les variables. Dfinition et dclaration de variables

Une variable est une portion rserve dune mmoire laquelle on a donn un nom. On peut
stocker ou lire les informations de ces variables.
Toute variable utilise dans un programme doit auparavant tre dfinie.
La dfinition dune variable consiste la nommer et lui donne un type et ventuellement lui
donner une valeur initiale (initialiser). Cest cette dfinition qui rserve (alloue) la place mmoire
ncessaire en fonction du type.
Lorsque le programme que lon ralise est dcompos en plusieurs modules, une mme
variable, utilise dans plusieurs modules, doit tre dclare dans chacun de ces modules. Par
contre, on ne dfinira cette variable que dans un seul de ces modules. Cest au moment de
ldition des liens que lon mettra en correspondance les variables apparaissant dans plusieurs
modulez (variable partage, mot-cl extern).
La position de la dclaration ou de la dfinition dune variable dtermine sa porte cest--dire
sa dure de vie et sa visibilit.

Les variables globales sont dclares en dehors de toute fonction.

- 18 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Les variables locales sont dclares lintrieur des fonctions et ne sont pas visible
lextrieur de la fonction dans laquelle celle-ci est dfinie.

Les noms des variables ne peuvent contenir que des lettres de a z et partir de A Z, le trait
de soulignement "_" et les chiffres de 0 9.

Les noms des variables dans mikroC n'est pas sensible la casse, de sorte que Sum, som et
soM reprsente le mme identifiant.

Voici quelques identificateurs valides:

temperature_V1
Pressure
no_hit
dat2string
SUM3
_vtext

... mais voici quelques identificateurs incorrectes:

7temp // ne peut pas commencer par un chiffre


% Suprieur // ne peut pas contenir de caractres spciaux
int // ne peut pas rpter un mot-cl

j23.07.04 // ne peut pas contenir de caractres spciaux


(priode)

Certains noms sont rservs pour le compilateur lui-mme et ne peut pas tre utiliss comme
noms de variables dans un programme. Le tableau 2.1 donne une liste alphabtique de ces
noms rservs.

Tableau 2.1 Noms rservs en mikroC


asm enum signed

auto extern sizeof

break float static

case for struct

char goto switch

const if typedef

continue int union

default long unsigned

do register void

double return volatile

else short while

- 19 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Le langage mikroC prend en charge les types de variables indiques dans le tableau 2.2.

Tableau 2.2: Types de variables en mikroC


Taille
(bits)
Type Plage

unsigned char 8 0 255

unsigned short int 8 0 255

unsigned int 16 0 65535

unsigned long int 32 0 4294967295

signed char 8 -128 127

signed short int 8 -128 127

signed int 16 -32768 32767

signed long int 32 - 2147483648 2147483647

float 32 1.17549435082E-38 6.80564774407E38

double 32 1.17549435082E-38 6.80564774407E38

long double 32 1.17549435082E-38 6.80564774407E38

(unsigned) char or unsigned short (int)

Les variables appeles (unsigned) char ou unsigned short (int), sont des variables non
signes de 8 bits avec une plage de 0 255. Dans l'exemple suivant deux variables de 8
bits nommes total et sum sont crs, et sum est affecte la valeur dcimale 150:

unsigned char total, sum;

sum = 150;

ou

char totale, sum;


sum = 150;

Les variables peuvent affecter des valeurs au cours de leur dclaration. Ainsi, les
dclarations ci-dessus peuvent aussi tre crites comme suit:

char total, sum = 150;

- 20 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

signed char or (signed) short (int)

Les variables appeles signed char, ou (signed) short (int) sont des variables signes de
8 bits avec une gamme de -128 +127. Dans l'exemple suivant, une variable signe de 8
bits nomme counter est cr avec une valeur de 50 :

signed char counter =- 50;


soit
short counter = -50;
soit
short int counter = -50;

(signed) int

Les variables appels (signed) int sont des variables signes de 16 bits avec une gamme
ayant de - 32768 +32767. Dans l'exemple suivant d'un entier sign nomm Big est :

int Big;

unsigned (int)

Les variables appels unsigned (int) sont des variables non signs de 16 bits avec une
gamme de 0 65535. Dans l'exemple suivant une variable de 16 bits nomme count est
affecte la valeur dcimale de 12000 :

unsigned int count = 12000;

(signed) long (int)

Les variables appels (signed) long (int) sont des variables signes de 32 bits avec une
gamme de - 2147483648 +2147483647. Un exemple est suivant :

signed long LargeNumber;

unsigned long (int)

Les variables appels unsigned long (int) sont des variables non signes de 32 bits ayant
une gamme de 0 4294967295. Un exemple est suivant:

unsigned long VeryLargeNumber;

float or double or long double

Les variables appeles float ou double ou long double, sont des variables virgule
flottante mis en uvre en utilisant le mikroC de format 32 bits.
Nombres virgule flottante comprise entre - 1.17549435082E-38
+ 6.80564774407E38. Dans l'exemple suivant, une variable flottante nomme area est
affecte la valeur 12.235:
- 21 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

float area ;
area = 12.235;

Pour viter toute confusion lors de l'laboration du programme, il est recommand de


prciser le signe de la variable (sign ou non sign) ainsi que le type de variable. Par
exemple, utiliser unsigned char au lieu de char seulement, et unsigned int au lieu
de unsigned seulement.

2.2.2 Constantes
Constantes reprsentent des valeurs fixes (numrique ou caractre) dans des programmes qui
ne peuvent pas tre changes.
En mikroC, constantes peuvent tre entiers, flottants, caractres, les chanes, ou des types
numrs.

Integer Constants
Les constantes entires (Integer Constants) peuvent tre en dcimal, hexadcimal, octal
ou binaire. Le type de donnes d'une constante est tir par le compilateur partir de sa
valeur. Mais suffixes peut tre utilis pour changer le type d'une constante.

Dans le tableau 2.2, nous avons vu que les constantes dcimales (signed long int)
peuvent avoir des valeurs de 2147483648 + 4294967295. Par exemple, nombre
constant 210 est stock comme un entier non sign ( unsigned char) ou (unsigned short
int). De mme, nombre constant - 200 est stock comme un entier sign (signed int).

Le suffixe u ou U force la constante d'tre non sign (unsigned) et le suffixe l ou L force


la constante d'tre longue (long). Utilisation de U (ou u) et L (ou l) oblige la constante
d'tre
unsigned long.

Les constantes sont dclares en utilisant le mot-cl const et sont stockes dans le flash
de mmoire du microcontrleur PIC. Par exemple, MAX est dclar comme la constante
100 :
const MAX =100;

Les constantes hexadcimales commencent par les caractres 0x ou 0X et peuvent


contenir des donnes numriques de 0 9 et les caractres hexadcimaux de A F.
Dans l'exemple suivant, TOTAL est la constante de la valeur hexadcimale FF:

const TOTAL = 0xFF;

Les constantes octales ont un zro au dbut du nombre et peuvent contenir des donnes
numriques de 0 7. Dans l'exemple suivant, une constante CNT est affecte une valeur
octale 17 :

const CNT = 017;

- 22 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Les constantes binaires commencent par 0b ou 0B et ne peuvent contenir que 0 ou 1.


Par exemple une constante nomme Min est dclare comme ayant la valeur binaire
11110000:

const Min = 0b11110000

Floating Point Constants

Les constantes virgule flottante (Floating Point Constants) se compose de:

Entier dcimal
Point dcimal
Partie dcimale fractionnaire
e ou E et l'ordre du signe

MikroC limite les valeurs de constantes virgule flottante par la gamme :

1.17549435082 * 10-38 ... 6.80564774407 * 1038.

Dans l'exemple suivant, une constante nomme TEMP est dclare comme ayant la
valeur fractionnelle 37.50 :

const TEMP = 37.50


ou
const TEMP = 3.750E1

Character Constants

Une constante de caractre (Character Constants) est un caractre renferm dans des
guillemets simples. Par exemple, une constante nomme First_Alpha est dclare
comme ayant la valeur du caractre A :

const First_Alpha = A;

String Constants

Les constantes de chane (String Constants ) sont des squences fixes de caractres
stockes dans la mmoire flash du microcontrleur. La chane doit commencer et se
terminer par un guillemet " . Un exemple dune constante de type chane est la
suivante :

"Il s'agit d'un exemple de chane constante"

Une constante chane peut tre tendue travers une frontire en ligne en utilisant une
barre oblique inverse "\" :

"C'est la premire partie de la chane \


et c'est la poursuite de la chane "

Cette dclaration de la constante chane est la mme que :

"C'est la premire partie de la chane et c'est la poursuite


de la chane "
- 23 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Enumerated Constants

Les constantes numres (Enumerated Constants) sont de type entier et sont utilises
pour faire un programme plus facile suivre. Dans l'exemple suivant, une constante
nomme couleur stocke les noms de couleurs. Le premier lment de couleur a la
valeur 0:

enum couleur {noir, marron, rouge, orange, jaune, vert, bleu,


gris,
white};

2.2.3 Squences d'chappement

Les squences d'chappement (Escape Sequences) sont utilises pour reprsenter les
caractres ASCII non imprimables. Tableau 2.3 montre quelques squences d'chappement
couramment utiliss et de leur reprsentation en langage microC.

Par exemple, la combinaison de caractres \n reprsente le caractre de nouvelle ligne.

Un caractre ASCII peut galement tre reprsent en prcisant son code hexadcimal, aprs
une barre oblique inverse.

Par exemple, le caractre de nouvelle ligne peut galement tre reprsent comme \x0A .

Tableau 2.3: Quelques squences d'chappement


Valeur de
la
Squence squence
d'chappement Hex
Caractre

\ a 0X07 BEL (cloche)

\ b 0X08 BS (backspace)

\ t 0X09 HT (tabulation horizontale)

\ n 0XLF 0A (saut de ligne)

\ v 0X0B VT (tabulation verticale)

\ f 0X0C FF (saut de page)

\ r 0X0D CR (retour chariot)

\ xH Chane de chiffres Hex

- 24 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

2.2.4 Variables statiques

Les variables statiques (Static variables ) sont des variables locales utilises dans les fonctions

lorsque la dernire valeur d'une variable entre les appels successifs de la fonction doit tre
prserve. Comme le montre l'exemple suivant, les variables statiques sont dclares en
utilisant le mot cl static :

statique unsigned int count ;

2.2.5 Variables externes

Utilisation du mot (extern) devant un nom de variable dclare cette variable comme externe. Il
indique au compilateur que la variable est dclare ailleurs dans un code-source distincte

module. Dans l'exemple suivant, les variables sum1 et SUM2 sont dclars comme externes
entiers non signs :

extern int sum1, SUM2 ;

2.2.6 Variables volatiles

Les variables volatiles (Volatile Variables ) sont importantes dans d'interruption des
programmes et de routines dentres-sorties. Utilisation de mot-cl volatile indique que la valeur
de la variable peut changer au cours de la dure de vie du programme indpendant de
l'coulement normal du programme. Dans l'exemple suivant, la variable Led est dclare
comme un volatile non sign :

volatile unsigned char Led;

2.2.7 Variables numres

Les variables numres sont utilises pour rendre un programme plus lisible. Dans une
variable numre, une liste de rfrences est spcifie et la valeur du premier lment est fix
0, l'autre lment est mis 1, et ainsi de suite. Dans l'exemple suivant, la Semaine de type
est dclar comme un liste numre et LUN = 0, MAR = 1, WEN = 2, et ainsi de suite :

enum Semaine {LUN, MAR, MER, JEU, VEN, SAM, DIM};

Il est possible d'impliquer les valeurs des lments dans une liste numre. Dans le
exemple suivant, noir = 2, bleu = 3, rouge = 4, et ainsi de suite.

enum couleurs {noir = 2, bleu, rouge, blanc, gris};

De mme, dans l'exemple suivant, noir = 2, bleu = 3, rouge = 8, et gris = 9:

enum couleurs {black = 2, bleu, rouge = 8, gris};

Les variables de type de recensement peuvent tre dclares par les spcifiant aprs la liste
- 25 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

des articles. Par exemple, pour dclarer la variable My_Week de la Semaine de type numr,
utilisez la dclaration suivante:

enum Semaine {LUN, MAR, MER, JEU, VEN, SAM, DIM} My_Week;

Maintenant, nous pouvons utiliser My_Week comme une variable dans un programme:

My_Week = MER // assigne 2 My_Week

ou

My_Week = 2 // le mme que ci-dessus

Aprs avoir dfini Semaine comme un type numr, nous pouvons dclarer des variables
This_Week et Next_Week de type Semaine :

enum Semaine This_Week, Next_Week;

2.2.8 Tableaux

Les tableaux (Arrays) sont utiliss pour stocker des lments lis dans le mme bloc de
mmoire et en vertu d'un nom spcifi. Un tableau est dclar en spcifiant son type, le nom, et
le nombre dlments stocker. Par exemple:

unsigned int Total [5] ;

Ce tableau de type unsigned int est nomm Total et dispose de cinq lments. Le premier
lment d'un tableau est index 0. Ainsi, dans cet exemple, Total[0] se rfre au premier
lment du tableau et Total[4] se rfre au dernier lment. Le tableau Total est stock
dans un mmoire ayant cinq emplacements conscutifs comme suit:

Total[0]
Total[1]
Total[2]
Total[3]
Total[4]

Les donnes peuvent tre stockes dans le tableau en spcifiant le nom du tableau et de
l'indice. Par exemple, pour stocker 25 dans le deuxime lment du tableau, nous devons
crire:

Total[1] = 25;

De mme, le contenu d'un tableau peut tre lu en spcifiant le nom du tableau et de son
index. Par exemple, pour copier l'lment de tableau dindex 2 une variable appele Temp ,
nous devons crire:

Temp = Total[2];

Le contenu d'un tableau peut tre initialis lors de la dclaration du tableau en


attribuant d'une squence de valeurs spares par des virgules dans le tableau. Voici un
exemple dun tableau ayant 12 lments des mois[0] = 31, mois[1] = 28, et
ainsi de suite:
- 26 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

unsigned char mois[12] = {31,28,31,30,31,30,31,31,30,31,30,31};


www.newnespress.

Le mme tableau peut galement tre dclar sans spcifier sa taille:

unsigned char mois[ ] = {31,28,31,30,31,30,31,31,30,31,30,31};

Des tableaux de caractres peuvent tre dclars de manire similaire. Dans l'exemple suivant,
un tableau de caractres nomms Hex_Letters est dclare avec 6 lments:

unsigned char Hex_Letters[ ] ={A, B, C, D, E, F};

Les chanes sont des tableaux de caractres avec un terminateur null. Les chanes peuvent
tre dclares soit par enfermant la chane entre guillemets, ou en spcifiant chaque caractre
du tableau au sein de apostrophes et puis en terminant la chane avec un caractre nul. La
chane de deux dclarations dans l'exemple suivant est identique :

unsigned char Mystring[ ] = COMP;

et

unsigned char Mystring[ ] = {C, O, M, P, \0};

Dans le langage de programmation microC, nous pouvons aussi dclarer des tableaux aux
dimensions multiples. Tableaux unidimensionnels sont gnralement appels vecteurs, et des
tableaux bidimensionnels sont appels matrices. Un rseau bidimensionnel est dclar en
spcifiant le type de donnes de la matrice, le nom de tableau, et la taille de chaque dimension.
Dans l'exemple suivant, un tableau deux dimensions nomm P contiens trois lignes et quatre
colonnes. Au total, le tableau a douze lments. Le premier lment de la matrice est
P[0][0], et le dernier lment est P[2][3].
La structure de ce tableau est montre ci-dessous:

P[0][0] P[0][1] P[0][2] P[0][3]

P[1][0] P[1][1] P[1][2] P[1][3]

P[2][0] P[2][1] P[2][2] P[2][3]

- 27 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

lments d'un tableau multidimensionnel peut tre spcifi lors de la dclaration du


tableau. Dans l'exemple suivant, rseau bidimensionnel Q a deux ranges et deux
colonnes, ses lments diagonaux sont mis 1, et de ses lments non diagonaux sont
remis 0:

unsigned char Q[2][2] = { {1,0}, {0,1} };

2.2.9 Pointeurs
Les pointeurs (Pointers) sont une partie importante du langage microC, car ils occupent les
adresses mmoire des autres variables. Les pointeurs sont dclares de la mme manire que
d'autres variables, mais avec le caractre * en face du nom de variable.
Dans l'exemple suivant, un pointeur de caractre non sign du nom pnt est dclar:

unsigned char *pnt;

Quand un nouveau pointeur est cr, son contenu est d'abord indtermin et il ne tient pas
l'adresse d'une variable. Nous pouvons attribuer l'adresse d'une variable un pointeur l'aide
le & :

pnt = &Count;

Maintenant pnt affecte l'adresse de variable Count. La variable Count peut tre affecte
une valeur en utilisant le caractre * en avant de son pointeur. Par exemple, le Count peut
tre attribue 10 l'aide de son pointeur :

* pnt = 10; // Count = 10

cest la mme chose que

Count = 10; // Count = 10


ou, la valeur du Count peut tre copi la variable Cnt en utilisant son pointeur :

Cnt = *pnt; // Cnt = Count

Pointeurs de tableaux

Dans le langage microC, le nom d'un tableau est aussi un pointeur de tableau. Ainsi, pour le
tableau :
unsigned int Total[10];

Le nom Total est galement un pointeur de ce tableau, et il contient l'adresse du premier


ellment de la matrice. Ainsi, les deux noncs suivants sont gaux:

Total[2] = 0;
et
*(Total + 2) = 0;

En outre, l'nonc suivant est vrai:

&Total[j] = Total + j ;

- 28 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

En langage microC, nous pouvons effectuer des oprations arithmtiques pour pointeurs qui
peuvent impliquer :

Comparaison de deux pointeurs


Addition ou la soustraction d'un pointeur et un entier
La soustraction de deux pointeurs
Assigner un pointeur vers un autre
En comparant un pointeur avec zro
Par exemple, supposons que le pointeur P est affect afin de contenir l'adresse du tableau
dlment Z[2]:

P = &Z[2];

Nous pouvons maintenant effacer les lments 2 et 3 du tableau Z, comme dans les deux
exemples qui suivent. Les deux exemples sont identiques, sauf que dans le premier
exemple pointeur P contient l'adresse de Z[3] la fin des tats, et il contient l'adresse de Z[2]
la fin de deuxime srie de dclarations:

*P = 0; // Z[2] = 0

P = P + 1; // maintenant P pointe llment 3 de Z


*P = 0; // Z[3] = 0

ou

*P = 0; // Z[2] = 0

*(P +1) = 0; // Z[3] = 0

Un pointeur peut tre affect un autre pointeur. Dans l'exemple suivant, les variables Cnt et
Tot sont lensable de 10 lments crs l'aide de deux pointeurs diffrents:

unsigned int *i, *j; // dclare 2 pointeurs

unsigned int Cnt, Tot; // dclare deux variables

i = &Cnt; // i pointe vers Cnt

*i = 10; // Cnt = 10

j = i; // copy pointeur i vers pointeur j

Tot = *j; // Tot = 10

2.2.10 Structures

- 29 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Une structure peut tre utilise pour recueillir des lments connexes, qui sont ensuite traits
comme un seul objet. Contrairement un tableau, une structure peut contenir un mlange de
types de donnes. Par exemple, un structure permet de stocker les donnes personnelles
(nom, prnom, ge, date de naissance, etc) d'un tudiant.
Une structure est cre en utilisant le mot-cl struct, suivie d'une structure de nom et dune
liste des dclarations de membre. ventuellement, des variables de mme type que la structure
peuvent dclarer l'extrmit de la structure.
L'exemple suivant dclare une structure nomme Personne :

struct Personne

{
unsigned char name[20];
unsigned char prnom[20];
unsigned char nationalit[20];
unsigned char ge;
}

Nous pouvons dclarer des variables du mme type que la structure en donnant le nom de la
structure et le nom de la variable.

Par exemple, deux variables Moi et Toi de type Personne vous pouvez crer par
la dclaration:

struct Personne Moi, Toi;

Les variables de type Personne peuvent galement tre cres lors de la dclaration de la
structure comme suit :

struct Personne
{
unsigned char name[20];
unsigned char prnom [20];
unsigned char nationalit [20];
unsigned char ge;
}Moi, Toi

Nous pouvons attribuer des valeurs aux lements d'une structure en spcifiant le nom de la
structure, suivi d'un point . et le nom de l'lment. Dans l'exemple suivant, l'ge

des variables de structure Moi est mis 25, et M variable est affect la valeur de l'ge dans
variable de structure Vous:

Moi.age = 25;
M = Vous.age;

Elments de la structure peut tre initialis lors de la dclaration de la structure. Dans l'exemple
suivant, le rayon et la hauteur de la structure sont initialiss Cylindre 1.2 et
2.5 respectivement :

- 30 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

struct Cylindre
{
valeur de rayon;
valeur dhauteur;
} MienCylindre {1.2, 2.5};

Les valeurs peuvent galement tre attribues pour les lments d'une structure lade des
pointeurs en dfinissant les variable el les types des pointeurs. Par exemple, si LeCylindre
est dfini comme un pointeur vers la structure Cylindre, alors nous pouvons crire :

struct Cylindre
{
valeur de rayon;
flotter dauteur;
}*LeCylinder;
LeCylinder -> rayon = 1.2;
LeCylinder -> hauteur = 2.5;

La taille d'une structure est le nombre d'octets contenus dans la structure. Nous pouvons utiliser
l'oprateur sizeof pour obtenir la taille d'une structure.

Considront l'exemple ci-dessus :

sizeof (MienCylindre)

retours 8, tant donn que chaque variable de type float occupe 4 octets en mmoire.

Les champs de bits peuvent tre dfinis en utilisant les structures. Avec les champs de bits,
nous pouvons attribuer des identificateurs pour les bits dune variable. Par exemple, pour
identifier les bits 0, 1, 2, 3 d'une variable pour LowNibble et d'identifier les 4 bits restants pour
HighNibble nous pouvons crire :

struct
{
LowNibble: 4;
HighNibble: 4;
} MienVariable;

On peut alors accder aux quartets bits de la variable MienVariable :

MienVariable.LowNibble = 12;
MienVariable.HighNibble = 8;

En microC, nous pouvons utiliser les dclarations typedef pour crer de nouveaux types
dune variable. Par exemple, une nouvelle structure type de donnes nomm Reg peut tre
cr comme suit :

- 31 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

typedef struct
{
unsigned char nom[20];
unsigned char prenom[20];
unsigned ge;
}Reg;

Les variables de type Reg peuvent ensuite tre crs de la mme manire que les autres types
de variables. Dans l'exemple suivant, les variables MyReg, Reg1, et Reg2 sont crs partir
de type de donnes Reg:

Reg MyReg, REG1, REG2;

Le contenu dune structure peut tre copi dans une autre structure, condition que
des structures soient dtermines partir du mme modle. Dans l'exemple qui suit , P2 est
copi sur P1:
struct Personne
{
unsigned char nom [20];
unsigned char prenom [20];
unsigned int ge;
unsigned int hauteur;
unsigned poids;
}

struct Personne P1, P2;


........................
........................
P2 = P1;

2.2.11 Unions
Les unions sont utilises pour les variables de recouvrement. Une union est similaire une
structure et il est mme dfini d'une manire similaire. Les deux sont bass sur des modles, et
les membres de tous les deux sont accessible l'aide des oprateurs . ou -> . Une
chausse diffre d'une structure en ce que tous variables dans une union occupent la mme
zone mmoire, ils partagent le mme stockage. Un exemple de dclaration de l'union est la
suivante :

union flags

{
unsigned char x;
unsigned int y;
}P;

Dans cet exemple, les variables x et y occupent la mme zone de mmoire, et la taille de ce
l'union est de 2 octets de long, ce qui est de la taille de la plus grande partie de l'union. Quand

la variable y est charg avec une valeur de 2 octets, la variable x aura la mme valeur que
faible octet de y.

Dans l'exemple suivant, y est charg avec 16-bit valeur hexadcimale


0xAEFA, et x est charg avec 0xFA:

P.y = 0xAEFA ;

- 32 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

La taille d'une union est la taille (nombre d'octets) de son lment est le plus important. Ainsi,
la dclaration:

sizeof (P)

renvoie 2.

Cette union peut aussi tre dclare comme suit :

union flags
{
unsigned char x;
unsigned int y;
}
union flags P;

2.2.12 Oprateurs et expressions en mikroC

Les oprateurs sont appliqus aux variables et d'autres objets dans les expressions pour
assurer certaines conditions ou des calculs.

Une expression est un objet syntaxique obtenu en assemblant des constantes, des variables et
des oprateurs.

Exemple :

x + 12

Dans le langage microC, il y a dautres oprateurs que les oprateurs arithmtiques quon a
lhabitude de manipuler. Il y en a en fait plus de 40 oprateurs.

Oprateurs et priorits

Vous avez lhabitude de manipuler des expressions arithmtiques :

2+3*4*5-2, 2-3-4

On sait que ces expressions sons quivalentes (2+(3*(4*5)))-2, (2-3)-4.

Introduire les parenthses permet de dfinir sans ambiguit lexpression que lon manipule.
Pour viter lusage des parenthses qui alourdissent la lecture, il existe des rgles pour lever
toute ambigit :

Exemple :

2+3*4

La sous expression 3*4 est value en premier et le rsultat obtenu est ajout la valeur 2
(forme avec parenthse : 2+(3+4)).
On dit que loprateur * possde une priorit suprieur la priorit de loprateur + .

2-3-4

- 33 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

La sous expression 2-3 est value en premier et au rsultat obtenu, on soustrait la valeur 4
(forme avec parenthse : (2-3)-4).
On dit que lordre dvaluation de loprateur est de gauche droite.

La donne dune priorit et dun ordre dvaluation permet de fixer des rgles communes
dvaluation des expressions.

Ces priorits et ordre dvaluation ne permettent videment pas de se dispenser


compltement des parenthses :

(2+3)*4 comparer 2+3*4

Caractristiques de loprateur () :

Oprateur Nom Notation Priorit Ordre

() parenthses () 15 gauche-droite

Oprateur daffectation

Loprateur la plus importante dans un langage de programmation est celle qui consiste
donner une valeur une variable.

Cette opration est dsigne par le symbole = .

Comme laffectation range une valeur dans une variable (une zone mmoire), il est
impratif que le membre gauche dune affectation reprsente une zone (left value).

Une constante nest pas une left value car il ne dsigne pas ladresse dune zone
mmoire. Elle ne peut donc pas figurer en membre gauche dune affectation.

Le membre droit dune affectation peut dsigner soit une constante soit une zone
mmoire soit une expression.

Oprateur Nom Notation Priorit Ordre

= affectation x=y 2 droite- gauche

Les oprateurs arithmtiques

Oprateur Nom Notation Priorit Ordre

+ addition x+y 12 gauche-droite

- soustraction x-y 12 gauche-droite

* multiplication x*y 13 gauche-droite

/ division x/y 13 gauche-droite

- 34 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

% modulo x%y 13 gauche-droite

Les oprateurs +, -, * , fonctionnent comme en arithmtique.

Par contre, loprateur / (division) se comporte de manire diffrente selon que les oprandes
sont des entier ou des nombres flottants :

Nombres flottants : le rsultat est un nombre flottant obtenu en divisant les deux
nombres.
Nombres entiers : le rsultat est un nombre entier obtenu en calculant la division entier
ou division euclidienne. Loprateur % nest dfini que pour les entiers et le rsultat est le reste
de la division entire des oprandes.

Rappel sur la division entire : On appelle quotient et reste de la division entire de a et de b,


les nombres entiers q et vrifiant :

a = q*b +r ; 0 < r < B

Exemple 1 :

Si a = 20 et b = 3 alors q = 6 et r = 2 (on a vrifi : 20 = 6*3 + 2)

Exemple 2 :

int a, b, c ;
float x, y, z ;

a = b/c; //division entire


a = x/y; //reste entier
x = y/z; //division relle
x = 2/3; //division entire
x = 2.0/3.0; //division relle
x = (float)((float)a)/y; //division relle

Loprateur unaire a une priorit suprieure aux oprateurs binaires arithmtiques :

Oprateur Nom Notation Priorit Ordre

-(unaire) ngation -x 13 droite- gauche

Les oprateurs de comparaison

Oprateur Nom Notation Priorit Ordre

== teste dgalit x == y 9 gauche-droite

!= teste de non galit x!=y 9 gauche-droite

- 35 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

<= teste infrieur ou gal x <= y 10 gauche-droite

>= teste suprieur ou gal x >= y 10 gauche-droite

< teste infrieur strict x<y 10 gauche-droite

> teste suprieur strict x>y 10 gauche-droite

Thoriquement, le rsultat dune comparaison est une valeur boolenne (vrai ou faux). En
microC, le rsultat dune comparaison est 1 (!= 0) ou 0 selon que cette comparaison est vraie
ou fausse.
Il nexiste pas de type boolen en microC : la valeur entire 0 sera considre comme
quivalente la valeur faux et toute valeur diffrente de 0 quivalente la valeur vrai.

Les oprateurs logiques

Une variable boolenne est une variable pouvant prendre la valeur vrai ou faux.

La valeur dune expression boolenne est, comme le rsultat des comparaisons, une valeur
entire.

Oprateur Nom Notation Priorit Ordre

&& ET x && y 5 gauche-droite

II OU x II y 4 gauche-droite

! (unaire) NON !x 14 droite- gauche

Les oprateurs de manipulation de bits

Oprateur Nom Notation Priorit Ordre

& ET bit bit x&y 8 gauche-droite

I OU bit bit xIy 6 gauche-droite

^ OU exclusif bit bit x^y 7 gauche-droite

(unaire) NON bit bit x 14 droite-gauche

>> dcalage droite >> x 11 droite-gauche

- 36 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

<< dcalage gauche << x 11 droite-gauche

Les autres oprateurs binaires daffectation

Les oprateurs suivants ne sont que des raccourcis de notation (pas doptimisation du
code gnr) :

Oprateur Equivalent Notation Priorit Ordre

+= x=x+y x += y 2 droite-gauche

-= x=x-y x -= y 2 droite-gauche

*= x=x*y x *= y 2 droite-gauche

/= x=x/y x /= y 2 droite-gauche

%= x=x%y x %= y 2 droite-gauche

= x=xy x = y 2 droite-gauche

<<= x = x << y x <<= y 2 droite-gauche

&= x=x&y x &= y 2 droite-gauche

I= x=xIy x I= y 2 droite-gauche

^= x=x^y x ^= y 2 droite-gauche

Autres oprateurs unaires daffectation

Oprateur Equivalent Notation Priorit Ordre

++ x=x+1 x++ ou ++x 14 droite-gauche

-- x=x-1 x-- ou --x 14 droite-gauche


y =
x++ ;
cest le raccourci pour y = x ; x = x+1 ;
y = ++x ; cest le raccourci pour x = x + 1 ; y = x ;

Autres oprateurs

Oprateur conditionnel

Oprateur Equivalent Notation Priorit Ordre

? oprateur e ? x : y 3 droite-gauche
conditionnel

- 37 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Cette expression est une sorte de si alors sinon sous forme dexpression : si la condition e est
vraie alors cette expression vaut x sinon elle vaut y.

Exemple :

a = (v == 2) ? 1 : 2 ;

affecte la variable a la valeur 1 si v vaut 2, sinon la variable a la valeur 2.

Oprateur squentiel

Oprateur Equivalent Notation Priorit Ordre

, oprateur e1 , e2 1 droite-gauche
squentiel
Cet
oprateur permet de regrouper plusieurs expressions en une seule : lvaluation de lexpression
e1, e2 consiste en lvaluation successive (dans lordre) des expressions e1 puis de e2.

Oprateur de dimension

Cet oprateur donne loccupation mmoire (en octets) dune variable ou dun type de donn.

Oprateur Equivalent Notation Priorit Ordre

sizeof oprateur de sizeof (e) 14 droite-gauche


dimension

Exemple :

La valeur de lexpression sizeof(c) est 1 si c est une variable de type char.


Lexpression sizeof(char)donne galement la valeur 1.

Oprateur de parenthse

Loprateur de parenthse ( ) permet de dfinir lordre dvaluation dune expression.


Cest galement ce mme oprateur qui est utilis pour encapsuler les parenthses des
fonctions.
Mme lorsquune fonction na pas darguments, ces parenthses sont obligatoires.

Oprateur Equivalent Notation Priorit Ordre

() oprateur dadressage () 15 gauche-droite

Oprateur de slection

Ces oprateurs . et -> servent slectionner des champs de donnes structures.


- 38 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Oprateur Equivalent Notation Priorit Ordre

. oprateur de slection x,info 15 gauche-droite

-> oprateur de slection x->info 15 gauche-droite

[] oprateur de slection x[3] 15 gauche-droite

Oprateurs du prprocesseur

Toute ligne de code-source commence par # est considre comme un oprateur de


prprocesseur (ou loprateur de prtraitement ou encore la ligne de commande).
Les oprateurs du prprocesseur sont gnralement placs au dbut du code-source, mais ils
ont le droit d'tre n'importe o dans le programme.

Le prprocesseur permet un programmeur de :

Compiler un programme de sorte que les parties du code ne sont pas compils
Remplacer les symboles avec d'autres symboles ou des valeurs
Insrer des fichiers texte dans un programme

La syntaxe plus commune d'un oprateur du prprocesseur est :

#include <math.h>

MikroC compilateur prend en charge les commandes de prprocesseur suivantes:

#define #undef
#if #elif #endif
#ifdef #ifndef
#error
#ligne

Commande du prprocesseur #define

La commande prprocesseur #define fournit une macro o chaque apparition de son nom
dans le programme est remplac par la valeur de ce nom.

Par exemple, pour remplacer toutes les apparitions de MAX avec une valeur de 100, nous
pouvons crire:

#define MAX 100

Notez que la commande prprocesseur #define noccupe pas lespace en mmoire.

Nous pouvons passer des paramtres une dfinition de macro en prcisant les paramtres
entre les parenthses aprs le nom de la macro. Par exemple :

#define ADD (a, b) (a + b)


- 39 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Lorsque cette macro est utilise dans un programme, (a, b) sera remplac par (a + b)
comme indiqu ci-dessous :

p = ADD (x, y) sera transform en p = (x + y)

De mme, nous pouvons dfinir une macro pour calculer le carr de deux nombres :

#define CARRE (a) (a * a)

Nous pouvons maintenant utiliser cette macro dans un programme :

p = CARRE (x) sera transform en p = (x * x)

Commande du prprocesseur #include

La commande #include est utilis pour inclure un fichier source dans un programme.
Habituellement les fichiers avec l'extension ". H" sont utiliss avec #include. Il y a deux
formats pour l'utilisation de #include:

#include <fichier>
et
#include "fichier"

Dans la premire option le fichier est recherch d'abord dans le rpertoire d'installation mikroC,
puis dans les chemins de recherche des utilisateurs.

En seconde option le fichier spcifi est recherch dans le dossier de projet mikroC , puis dans
le dossier d'installation mikroC, puis dans les chemins de recherche des utilisateurs.
Il est galement possible de spcifier un chemin de rpertoire complet :

#include "C: \ temp \ last.h"

Le dossier dans ce cas nest recherch que dans le chemin du rpertoire spcifi.

Commande du prprocesseur #if, #elif, #else, #endif

Les commandes prprocesseur #if, #elif, #else et #endif sont utilise pour les
compilations conditionnelles, o certaines parties du code-source peut tre compile si
certaines conditions sont remplies.
Dans l'exemple suivant, si M a une valeur diffrente de zro la section de code o les variables
A et B sont mis zro est tabli, sinon la section de code o A et B sont tous les deux 1 est
compil.
Notez que le #if doit se terminer par #endif:

#if M
A = 0;
B = 0;
#else
A = 1;
B = 1;
#endif
- 40 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Nous pouvons galement utiliser la condition #elif, qui teste une nouvelle condition si la
condition prcdente tait fausse :

#if M
A = 0;
B = 0;
#elif N
A = 1;
B = 1;
#else
A = 2;
B = 2;
#endif

Dans l'exemple ci-dessus, si M a une valeur diffrente de zro, A = 0 ; B = 0. Sinon, si N


est une valeur non nulle, A = 1; B = 1. Enfin, si la fois M et N sont gaux zro, alors A
= 2 ; B = 2.
Notez quune seule section de code est compil entre #if et #endif et qu'une section
de code peut contenir n'importe quel nombre dinstructions.

2.2.13 Structure de contrle de programme

Les instructions sont normalement excutes squentiellement partir du dbut la fin dun
programme. Nous pouvons utiliser des instructions de contrle pour modifier ce flux squentiel

normal dans un programme C. Les instructions de contrle suivantes sont disponibles dans les
programmes en mikroC:

De slection if et switch
D'itration ou bouclage for
Modifications inconditionnels dexcution

Instructions de slection if et switch

Instruction if
Cette instruction conditionnelle if permet dexcuter des instructions de manire slective en
fonction du rsultat dun test. La dclaration du format gnral de l'instruction if est la
suivante :

if (expression)
instruction1
else
instruction2

ou

if(expression) instruction1; else instruction2;

Si lexpression est vraie (valeur non nulle), linstruction1 sexcute sinon, dans le deuxime cas,
cest listruction2 qui sexcute.

- 41 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Le mot-cl else est optionnel et peut tre omis.


Dans l'exemple suivant, si la valeur de x est suprieure MAX alors la variable P est
incrmente de 1, sinon elle est dcrment de 1:

if (x > MAX)
P++;
else
P--;

Nous pouvons avoir plus d'une instruction en joignant les dclarations dans boucls
entre parenthses. Par exemple:

if (x> MAX)
{
P++;
Cnt = P;
Sum = Sum = Cnt;
}
else
P--;

Dans cet exemple, si x est suprieur MAX, donc les trois instructions boucls
entre les parenthses sont excuts, sinon la dclaration P-- est excut.

Un autre exemple en utilisant l'instruction if est la suivante:

if (x> 0 && x <10)


{
Total + = Sum;
Sum++;
}
else
{
Total = 0;
Sum = 0;
}

Instruction switch

L'instruction switch (commutateur) est utilis pour assurer le commutation entre des
dfrentes dclarations si un certain nombre des conditions son vraie ou faut.

La syntaxe de commutation :

switch (condition)
{
case condition1:
Instructions;
break;

case condition2:
Instructions;

break;
. . . . . . . . . . . . . . . . . . . . .
- 42 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

. . . . . . . . . . . . . . . . . . . . .
case condition:
Instructions;
break;
default:
Instructions;
}

Linstruction switch fonction comme suit : d'abord la condition est value. La


condition est ensuite compare condition1 et si une correspondance est trouve, les
dclarations contenues dans ce bloc sont valus. Puis seffectuer le saut de contrle en dehors
de l'instruction switch lorsque le mot break est rencontr.

Si la condition ne se trouve pas, la condition est compare condition2


et si une correspondance est trouve, les dclarations de ce bloc sont values et le saut de
contrle dehors dtats de commutation seffectuer, et ainsi de suite.
Lavaleur par dfault est facultative, si la condition ne correspond aucune des conditions
spcifies.

Dans l'exemple suivant, la valeur de la variable est valu Cnt. Si Cnt = 1, A est mis
1. Si Cnt = 10, B est mis 1, et si Cnt = 100, C est mis 1. Si Cnt n'est pas gal 1,
10,ou100, donc D est fix 1:

switch (Cnt)
{
case 1:
A=1;
break;
case 10:

B=10 ;
break ;
case 100:
C=100;
break;
default:
D =1;
}

Puisque les espaces blancs sont ignors en langage C, nous pouvons galement crire le code
prcdent comme suit:

switch (Cnt)
{
case 1: A = 1; break;
case 10: B = 1; break;
case 100: C = 1; break;
dfault: D = 1;
}

- 43 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Instructions d'itration for, while, do, goto, continue et break

Les instructions d'itration nous permettent d'effectuer des boucles dans un programme, o une
partie d'un code doit tre rpt un certain nombre de fois. Dans mikroC l'itration peut tre
effectue de quatre faons. Nous se penchera sur chacun des exemples :

Utilisation de for
Utilisation de while
Utilisation de do
Utilisation de goto, continue et break

Instruction for
La syntaxe d'une instruction for est :

for (expression initiale; expression de condition; expression


incrment)
{
Instructions;
}

L'expression initiale dfinit la variable au dpart de la boucle, et cette variable est


compare l'expression de condition avant l'entre dans la boucle. Dclarations l'intrieur de
la boucle sont excutes de faon rpte, et aprs chaque itration la valeur dexpression est
incrmente. L'itration se poursuit jusqu' moment o l'expression de condition devient fausse.
Une boucle sans fin est forme si l'expression condition est toujours vraie.

L'exemple suivant montre comment une boucle peut tre mise en place pour excuter 10 fois.
Dans cet exemple, la variable i commence par 0 et elle est augmente de 1 la fin de chaque
itration. La boucle se termine quand i = 10, puisque dans ce cas, la condition i <10 devient
fausse. la sortie de la boucle, la valeur de i est de 10:

for(i = 0; i < 10; i ++)


{
Instructions;
}

Cette boucle pourrait galement tre lance par une expression initiale avec une valeur
diffrente de zro. Ici, i commence par 1 et la boucle se termine quand i = 11. La sortie de la
boucle se produira lorsque la valeur dei sera de 11 :

for (i = 1; i <= 10; i++)


{
Instructions;
}

Les paramtres d'une boucle for sont tous optionnels et peuvent tre omises. Si la condition
expression est laisse de ct, il est suppos pour tre vrai. Dans l'exemple suivant, une boucle
sans fin est forme par l'expression de condition qui est toujours vraie et la valeur de i
commence avec 0 et est incrment aprs chaque itration :

// Boucle sans fin avec incrmentation i


for (i = 0;; i++)
{
Instructions;
}

- 44 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Dans l'exemple suivant d'une boucle sans fin o tous les paramtres sont omis :

// Exemple de boucle sans fin


for (;;)
{
Instructions;
}

Dans la boucle sans fin suivante, i commence par 1 et n'est pas incrment l'intrieur de la
boucle :

// Boucle sans fin avec i = 1


for (i = 1;;)
{
Instructions;
}

Sil n'y a qu'une seule instruction l'intrieur de la boucle for, les accolades peuvent tre
omises comme cest montr dans l'exemple suivant :

for (k = 0; k <10; k++) Total = Total + Sum;

Les boucles imbriques peuvent galement tre utiliss. Dans une boucle for imbrique, la
boucle intrieure est excute pour chaque itration de la boucle externe. Dans l'exemple
suivant la boucle interne est excute 5 fois et la boucle extrieure est excute 10 fois. Le
nombre ditrations totales est de cinquante :

// Exemple de deux boucles imbriques


for (i = 0; i < 10; i++)
{
for (j = 0; j < 5; j++)
{
Instructions;
}
}

Dans l'exemple suivant, la somme de tous les lments d'un matrice M [3 x 4] est calcule
et stockes dans une variable appele Sum :

// Ajouter tous les lments d'une matrice 3x4


Sum = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
Sum = Sum + M[i][j];
}
}

Comme il n'y a qu'une seule instruction excuter, l'exemple prcdent pourrait galement tre
s'crit :

// Ajouter tous les lments d'une matrice 3x4


Sum = 0;
for (i = 0; i < 3; i++)
- 45 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

{
for (j = 0; j < 4; j++) Sum = Sum + M[i][j];
}

Instruction while

La syntaxe d'une instruction while est la suivante :

while (condition)
{
Instructions;
}

Ici, les instructions sont excutes jusqu' ce que la condition devienne fausse, ou les
instructions sont excutes de faon rpte aussi longtemps que la condition est vraie. Si la
condition est fausse l'entre de la boucle, la boucle ne sera pas excut et le programme sera
continuer de l'extrmit de la boucle while. Il est important que la condition est chang
intrieur de la boucle, sinon une boucle sans fin sera form.
Le code suivant montre comment mettre en place une boucle d'excuter 10 fois :

// Une boucle qui s'excute 10 fois


k = 0;
while (k <10)
{
Instructions;
k++;
}

Au dbut du code, la variable k est gal 0. Comme k est infrieur 10, la boucle while
commence. L'intrieur de la boucle, la valeur de k est incrment dun aprs chaque itration.
La boucle se rpte tant que k < 10 et se termine lorsque k = 10. la fin la valeur de k est
10. Notez quune boucle sans fin sera form si k n'est pas incrment l'intrieur de la boucle:

// Une boucle sans fin


k = 0;
while (k <10)
{
Instructions;
}

Une boucle sans fin peut galement tre forme par rglage de la condition qui doit tre
toujours vrai :

// Une boucle sans fin


while (k = k)
{
Instructions;
}

Voici un exemple de calcul de la somme des nombres de 1 10 et le stockage du


rsultat d'une somme variable appele sum :

- 46 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

// Calculer la somme des nombres de 1 10


unsigned int k, sum;
k = 1;
sum = 0;
while (k <= 10)
{
sum = sum + k;
k++;
}

Il est possible d'avoir une dclaration while sans corps. Une telle dclaration est utile, pour par
exemple, si nous attendons un port d'entre pour changer sa valeur. Voici un exemple o le
programme va attendre aussi longtemps que le bit 0 de PORTB (PORTB.0) est au niveau
logique 0. Le programme se poursuivra jusquau changement la valeur logique 1 sur les
broches du port.

while (PORTB.F0 == 0); // Attendre jusqu' ce que PORTB.0 devient un


ou
while (PORTB.F0);

Instruction do

Une dclaration do est similaire une dclaration while sauf ce que la boucle

excute jusqu' ce que la condition devient fausse, ou, la boucle s'excute tant que la
la condition est vraie. La condition est teste la fin de la boucle. La syntaxe d'une dclaration
do est la suivante :

do
{
Instructions;
} while (condition);

La premire itration est toujours effectue si la condition est vraie ou fausse. Il s'agit de la
principale diffrence entre une dclaration while et une dclaration do.
Le code suivant montre comment mettre en place une boucle d'excuter 10 fois en utilisant la
dclaration do

/*Excute 10 fois */
k = 0;
do
{
Instructions;
k++;
} while (k <10);

La boucle commence avec k = 0, et la valeur de k est incrment intrieur de la boucle aprs


chaque itration. la fin de boucle k est test, et si k n'est pas infrieur 10, la boucle termine.
Dans cet exemple k = 0 au dbut de la boucle, la fin de la boucle la valeur de k est 10.
Une boucle sans fin sera forme si la condition n'est pas modifie l'intrieur de la boucle,
comme est illustr dans l'exemple ci-dessous. Ici k est toujours infrieur 10 :

- 47 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

/*Une boucle sans fin*/


k = 0 ;
do
{
Instructions;
} while (k < 10);

Une boucle sans fin peut galement tre cre si la condition est rgle pour tre vrai tout le
temps:

/* Une boucle sans fin */


do
{
Instructions;
}while (k = k);

Instruction goto, continue et break

Une instruction goto peut tre utilise pour modifier le flux normal de contrle dans un
programme. Elle provoque le programme sauter une tiquette spcifie. Une tiquette peut

tre n'importe quel jeu de caractres alphanumriques commenant par une lettre et se
terminant par le caractre : .
Bien que linstruction goto soit non recommande, elle peut tre utilise conjointement avec
une instruction if pour crer un programme en itrations. L'exemple suivant montre comment
mettre en place une boucle pour lexcuter 10 fois en utilisant goto et if :

/ * Excute 10 fois * /
k = 0;
Boucle:
Instructions;
k++;
if (k < 10) goto Boucle;

La boucle commence par ltiquette Boucle et la variable k = 0. Les instructions sont


excutes l'intrieur de la boucle et k est incrment de 1. La valeur de k est alors compar

10 et le programme retourne ltiquette Boucle si k <10. Ainsi, la boucle est excute 10


fois jusqu' ce que la condition la fin devienne fausse. la fin de la boucle la valeur de k est
10.

Les instructions continue et break peuvent tre utiliss l'intrieur ditrations pour modifier
le flux de commande. Une instruction continue est gnralement utilise avec une instruction
if et provoque le saut de la boucle ditration.

Voici un exemple qui calcule la somme des nombres de 1 10, sauf le nombre 5:

- 48 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

/* Calculer la somme des nombres 1,2,3,4,6,7,8,9,10 */


Sum = 0;
i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5) continue; // Passer numro 5
Sum = Sum + i;
}

De mme, une instruction break peut tre utilis pour mettre fin une boucle l'intrieur de la
boucle.

Dans l'exemple suivant, la somme des nombres de 1 5 est calcule, mme si les paramtres
de la boucle sont mis parcourir 10 fois:

/ * Calculer la somme des nombres 1,2,3,4,5 * /


Sum = 0;
i = 1;
for (i = 1; i <= 10; i++)
{
if (i > 5) break; // Stop boucle si i > 5
}
2.2.14 Utilisation mikroC avec des instructions en langage dassembleur

Il devient parfois ncessaire dutiliser la langue assembleur pour microcontrleurs PIC et des
instructions en langage mikroC.
Des instructions en langage assembleur peuvent tre incluses dans un programme en utilisant
mot-cl asm (ou _asm, ou __ asm).

La syntaxe est la suivante:

asm
{
Instructions
}

Commentaires du langage dassembleur (une ligne commenant par un point-virgule) ne sont


pas autoriss, mais les deux types de commentaires en microC peuvent tre utiliss dans les
routines en langage d'assembleur :

asm
{

// Ce code introduit un temporisation

MOVLW 6 // Charge W avec 6


. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .

Les variables en microC peuvent tre utilises dans les routines en langage d'assembleur,
mais elles doivent tre dclares et initialises avant son utilisation.

Par exemple, une variable Temp peut tre initialise et ensuite charge dans le registre W :

- 49 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

III. FONCTIONS ET BIBLIOTHEQUES DANS MIKROC


3.1 Fonctions dans mikroC
Les fonctions sont gnralement dfinies comme des sous-programmes qui renvoient une
valeur fonde sur un certain nombre de paramtres d'entre.
Chaque programme doit avoir une seule fonction externe marquant le point d'entre dans le
programme principale.
Les fonctions sont dclars comme des prototypes en standard ou fourni par l'utilisateur, ou par
des fichiers du programme.
Chaque programme crit en langage mikroC se compose de nombre plus ou moins de
fonctions. L'ide principale est de diviser un programme en plusieurs parties qui utilisent ces
fonctions afin de rsoudre le problme rel plus facile. En outre, les fonctions nous permettent
d'utiliser les comptences et les connaissances d'autres programmeurs. Par exemple, sil est
ncessaire d'envoyer une chane de caractres un cran LCD, il est beaucoup plus facile
d'utiliser une partie dj crite du programme que de recommencer.
Les fonctions consistent des commandes prcisant ce qui doit tre fait sur des variables. Elles
peuvent tre compares des sous-routines. En rgle gnrale, il est beaucoup mieux d'avoir
un programme compos d'un grand nombre de fonctions simples que de quelques fonctions
importantes.

3.1.1 Dclaration dune fonction

Chaque fonction doit tre dclare de manire tre correctement interprt au cours du
processus de compilation. Dclaration contient les lments suivants:

Nom de la fonction
Liste des paramtres
Dclaration des paramtres
Corps de la fonction
Type de rsultat de la fonction

La syntaxe gnrale d'une dfinition de fonction est montre ci-dessous :

type_de_rsultat nom_fonction(parameter1, parameter2, .....)


{
.............
corps de la fonction
.............
}

Dans lexemple qui suit, la fonction, nomme Mult, reoit deux arguments entiers, a et b, et
renvoie leur produit. Notez que l'utilisation des parenthses dans une instruction de retour est
facultative :

int Mult(int a, int b)


{
return (a*b);
}

Quand une fonction est appele, elle s'attend gnralement donner le nombre d'arguments
exprims en liste d'arguments de la fonction. Par exemple, la fonction prcdente peut tre
appele :

- 54 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

z = Mult (x, y);

o la variable z est le type de donnes int. Notez que les arguments dclars dans la
dfinition de la fonction et les arguments passs lorsque la fonction est appele sont
indpendants les uns des autres, mme si elles ont le mme nom. Dans l'exemple prcdent,
lorsque la fonction est appele, variable x est copi a et variable y et est copie b sur
entre en fonction Mult.

Certaines fonctions ne renvoient pas de donnes. Le type de donnes de ces fonctions doit tre
dclares comme nul. Par exemple

void LED(unsigned char D)


{
PORTB = D;
}

Fonctions void peut tre appele sans aucune instruction d'affectation, mais les parenthses
sont ncessaire pour indiquer au compilateur que un appel de fonction est faite:
LED ();

En outre, certaines fonctions ne possdent pas d'arguments. Dans l'exemple suivant, la


fonction, nomme Compl, complte PORTC du microcontrleur. Il ne renvoie pas de donnes
et n'a pas d'arguments:

void Compl()
{
PORTC = PORTC;
}

Cette fonction peut tre appele en tant que :

Compl ();

Les fonctions sont normalement dfinies avant le dbut du programme principal.

Certaines dfinitions de fonction et de leur utilisation dans les programmes principaux sont
illustres dans les exemples suivants:

Exercice 3.1

crire une fonction appele Cercle_Surface pour calculer la surface d'un cercle dont le
rayon sera utilis comme un argument. Utilisez cette fonction dans un programme principal pour
calculer la surface d'un cercle dont le rayon est de 2,5 cm. Sauvegarder la valeur de cette
surface dans une variable appele Cercle.

Solution 3.1

Le type de donnes de la fonction est dclar comme float. La surface d'un cercle est
calcule par la formule :
- 55 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

3.1.3 Dfinition de fonction

La fonction se compose de sa dclaration et de son corps de la fonction. Le corps de fonction


est un bloc, reprsentant de dfinitions locales et des dclarations entre les accolades {}.
Toutes les variables dclares au sein de corps sont locales. La fonction elle-mme peut tre
dfinie uniquement dans le cadre du fichier. Cela signifie que les dclarations ne peuvent pas
tre imbriques. Pour revenir au rsultat de la fonction, utilisez l'instruction de return.
Dclaration retour dune fonction de type void ne peut pas avoir un paramtre, vous pouvez
omettre linstruction return si elle est la dernire instruction du corps de la fonction. Voici une
dfinition de fonction chantillon :

// retourne Max avec le plus grand l'un de ses 2 arguments

int Max (int x, int y)


{
return (x >= y)? x: y;
}

Voici un exemple de fonction qui dpend des effets secondaires plutt que de la valeur de
retour :

/* Fonction qui convertit coordonnes Descartes (x, y)


en coordonnes polaires (r, fi): */

#include <math.h>
voide polaire (double x, double y, double *r, double *fi)
{
*r = sqrt (x * x + y y *);
*fi = (x == 0 && y == 0)? 0: atan2 (y, x);
return; // cette ligne peut tre omise
}

3.1.3 Appels de fonctions

Une fonction est appele avec des arguments rels placs dans la mme squence que leur
correspondant paramtres formels. Utilisez un oprateur d'appel de fonction () :

fonction_nom (expression_1, expression_2, ..., expression_n)

Chaque expression dans l'appel de fonction est un argument rel. Nombre et types des
arguments rels doivent correspondre ceux des paramtres de fonctions formelles.
Arguments rels peuvent tre de n'importe quelle complexit. Sur lappel de fonction, tous les
paramtres formels sont crs en tant qu'objets locaux initialis par des valeurs d'arguments
rels. De retour d'une fonction, lobjet temporaire est cr la place de l'appel, et il est initialis
par l'expression de la dclaration de retour.

Cela signifie que l'appel de fonction comme un oprande de l'expression complexe est traite
en rsultat de fonction.
- 62 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Si la fonction est sans rsultat (type void) ou vous n'avez pas besoin du rsultat, vous pouvez
crire l'appel de fonction comme une expression autonome.
En C, les paramtres scalaires sont toujours passs la fonction par valeur. Une fonction peut
modifier les valeurs de ses paramtres formels, mais cela n'a aucun effet sur le rel argument
dans la routine d'appel. Vous pouvez passer objet scalaire par le discours de dclarer un
paramtre formel d'tre un pointeur. Ensuite, utilisez l'oprateur * pour accder l'objet
pointu.

3.1.4 Conversion argument

Quand un prototype de la fonction n'a pas t pralablement dclar, mikroC convertit


arguments intgraux un appel de fonction de l'largissement intgrante (l'expansion)
Quand un prototype de fonction est en porte, mikroC convertit l'argument donn par le type de
paramtre dclar comme par affectation.

Si un prototype est prsent, le nombre d'arguments doivent correspondre. Les types doivent
tre compatibles uniquement dans la mesure o une cession peut galement les convertir.
Vous pouvez toujours utiliser une conversion explicite pour convertir un argument pour un type
qui est acceptable un prototype de fonction.

Remarque :
Si le prototype de fonction ne correspond pas la dfinition de la fonction relle,
mikroC permet le dtecter si et seulement si cette dfinition se trouve dans la mme unit de
compilation comme le prototype.
Le compilateur est aussi capable de forcer les arguments du type appropri. Supposons que
vous ayez le code qui suit :

int limit = 32;


char ch = 'A';
long res;

extern long fonc(long par1, long par2); // prototype

main ()
{
//...
res = fonc(limit, ch); // fonction call (appeler)
}

Comme il a le prototype de fonction pour func, ce programme convertit limit et ch


long, en utilisant la rgle standard, avant qu'il ne les place sur la pile pour l'appel la fonction
fonc.
Sans le prototype de fonction, limit et ch aurait t plac dans la pile comme un entier et un
caractre, respectivement. Dans ce cas, la contenu de pile ne serait pas correspondre la taille
ou le contenu de fonc, conduisant un problme. Lutilisation des prototypes de fonctions
facilite grandement dans la rvlation des erreurs.

- 63 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

3.2 Fonctions intgres


Le compilateur mikroC fournit un ensemble de fonctions intgres qui peuvent tre appeles
partir du programme. Ces fonctions sont numres dans le tableau 3.1, avec une brve
description de chacune.
La plupart de ces fonctions peuvent tre utilises dans un programme sans avoir inclure des
fichiers d'en-tte.

Tableau 3.1: Fonctions intgres


Fonction Description

Lo Renvoie le plus faible nombre d'octets (bits 0 7)

Hi Renvoie le plus faible nombre d'octets (bits 8 15)

Higher Renvoie le plus leve d'octet d'un nombre (bits 16 23)

Highest Retourne le plus grand d'octets d'un nombre (bits 24 31)

Delay_us Cre le retard dans les units de microseconde

Delay_ms Cre le retard constante dans les units de millisecondes

Vdelay_ms Cre le retard en millisecondes en utilisant des variables de programme

Delay_Cyc Cre le retard bas sur l'horloge de microcontrleur

Clock_Khz Rgler lhorloge de microcontrleur en KHz

Clock_Mhz Rgler lhorloge de microcontrleur en MHz

Les exceptions sont des fonctions Lo, Hi, Higher, et Highest, qui exigent le fichier den-tte
built_in.h. De plus dtails sur l'utilisation de ces fonctions sont disponibles dans le manuel
de mikroC.
Delay_us et delay_ms fonctions sont frquemment utiliss dans les programmes o les
retards sont requis (par exemple, se met clignoter une LED).

L'exemple suivant illustre l'utilisation de la fonction Delay_ms :

Exercice 3.6

Une LED est connecte au PORTB (broche RB0) d'un microcontrleur PIC16F84A
travers dune rsistance de limitation, comme indiqu dans la figure 3.1.

Ecrire un programme qui fera clignoter le LED ON et OFF en permanence dans lintervalle
d'une seconde.

- 64 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

3.3.2 Bibliothque pour LCD

La programmation en assembleur d'un cran LCD en mode parallle ou en srie est


gnralement une tche complexe et ncessite dune bonne comprhension du fonctionnement
interne de l'cran LCD. La langue mikroC fournit des fonctions pour les deux modes de
programmation base sur le texte dj prpar, ce qui simplifie l'utilisation d'crans LCD.

Le contrleur LCD HD44780

Le HD44780 est l'un des contrleurs de cristaux liquides les plus apprcis, tant utilis dans
l'industrie et dans les applications commerciales.

Le module est monochrome et vient dans diffrentes formes et tailles. Des modules avec 8, 16,
20, 24, 32 et 40 caractres sont disponibles.

Selon le modle, l'cran LCD est fabriqu avec 14 ou 16 pattes pour l'interface.

Le tableau 3.3 prsente la configuration des pattes et les fonctions des pattes dun LCD 14
pattes.

La patte VSS est 0V ou du sol. La patte VDD doit tre connect la borne positive
dalimentation. Bien que les fabricants spcifient une alimentation 5V DC, les modules
travaillent habituellement aussi avec une alimentation un peu bas que 3V ou aussi haut que 6V.

La patte 3 VEE est dsign pour rglage du contraste de l'affichage et doit tre relie une
alimentation en courant continu. Un potentiomtre est gnralement connect l'alimentation
avec son curseur raccord la patte VEE et l'autre patte du potentiomtre reli la masse. De
cette faon la tension la patte VEE, et o le contraste de l'affichage, peut tre rgle
volont.

La patte 4 est le registre de slection (RS) et lorsque cette patte 0 V, les donnes sont
transfrs l'affichage cristaux liquides. Lorsque RS est +5 V, les donnes de caractres
peuvent tre transfrs partir du module LCD.

La patte 5 est le registre de slection de lecture / criture (R / W). Cette patte est relie avec la
masse (tat logique bas) afin d'crire des donnes de caractres au module LCD. Lorsque
cette broche est +5 V (tats logique haut) donc les informations sortants du module LCD
peuvent tre lues.

La patte 6 est la validation (EN), qui est utilis pour initier le transfert de commandes ou de
donnes entre le module et le microcontrleur. Lors de l'criture l'cran, les donnes sont
transfrs uniquement sur le front descendant (haut-bas) sur cette patte. Lors de la lecture de
laffichage, les donnes deviennent accessibles aprs le front montant (bas-haut) de la patte de
validation, et ces donnes demeurent tant que la patte de validation est au niveau logique haut.

Les broches 7 14 sont les huit lignes de bus de donnes (D0 D7). Les donnes peuvent
tre transfres entre le microcontrleur et le module LCD l'aide soit d'un seul octet de 8 bits
soit de deux 4-bits. Dans ce dernier cas, seuls les quatre lignes de donnes suprieures (D4
D7) sont utilises. Le 4-bits mode a l'avantage de ncessiter moins de lignes d'E / S pour
communiquer avec l'cran LCD.
- 69 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Tableau 3.3 : Les pattes du module LCD HD44780

Broche Appellation Fonction


N

1 VSS Ground

2 VDD +ve supply

3 VEE Contrast

4 RS Register select

5 R/W Read/write

6 EN Enable

7 D0 Data bit 0

8 D1 Data bit 1

9 D2 Data bit 2

10 D3 Data bit 3

11 D4 Data bit 4

12 D5 Data bit 5

13 D6 Data bit 6

14 D7 Data bit 7

Le mikroC LCD bibliothque fournit un grand nombre de fonctions pour contrler du texte LCD
avec 4-bits et les interfaces de donnes 8-bit, et pour les graphiques LCD. La plus courante
sont les 4-bit interface en mode texte sur cran LCD. Ce qui suit sont les fonctions disponibles
pour LCD 4-bit interface en mode texte LCD :

Lcd_Config
Lcd_Init
Lcd_Out
Lcd_Out_Cp
Lcd_Chr
Lcd_Chr_Cp
Lcd_Cmd

Lcd_Config
La fonction Lcd_Config est utilise pour configurer l'interface LCD. La connexion par dfaut
entre le LCD et le microcontrleur est la suivante :

LCD Patte du port de microcontrleurs

- 70 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

RS 2
FR 3
D4 4
D5 5
D6 6
D7 7

La patte R / W de l'cran n'est pas utilis et doit tre relie la masse.

Cette fonction devrait tre utilise pour modifier la connexion par dfaut. Il devrait tre appel
avec les paramtres dans l'ordre suivant :

nom de port, RS patte, EN patte, R/W patte, D7 patte, D6 patte, D5


patte, D4 patte

Le nom du port doit tre spcifi en passant son adresse. Par exemple, si RS patte est
connecte RB0, EN patte RB1, D7 patte RB2, D6 patte RB3, D5 patte RB4, et D4
patte RB5, alors la fonction doit tre appele comme suit :

Lcd_Init

La fonction Lcd_Init est appele pour configurer l'interface entre le microcontrleur et l'cran
LCD lorsque les connexions sont faites par dfaut que vient d'tre illustr. Le nom du port doit
tre spcifi en passant son adresse. Par exemple, en supposant que LCD est relie PORTB
et les connexions par dfaut prcdentes sont utilises, la fonction doit tre appele en tant que
:

Lcd_Init();

Lcd_Out

La fonction Lcd_Out affiche du texte la ligne indique et la position des colonnes


de l'cran LCD. La fonction doit tre appele avec des paramtres dans l'ordre suivant :

ligne, colonne, texte

Par exemple, pour afficher du texte "Ordinateur" la ligne 1 et la colonne 2 de l'cran LCD
nous devrions appeler la fonction comme suit :

Lcd_Out (1, 2, "Ordinateur");

Lcd_Out_Cp

La fonction Lcd_Out_Cp affiche le texte la position actuelle du curseur.


Par exemple, pour afficher le texte "Ordinateur" la position actuelle du curseur, la fonction
devrait tre appel en tant que :

Lcd_Out_Cp ("Ordinateur");

Lcd_Chr

La fonction Lcd_Chr affiche un caractre la ligne indique et la colonne la position du


curseur. La fonction doit tre appele avec les paramtres dans le l'ordre suivant :
- 71 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

ligne, colonne, caractre

Par exemple, pour afficher caractre "K" la ligne 2 et la colonne 4 de l'cran LCD nous
devrions appeler la fonction de :

Lcd_Chr(2, 4, K);

Lcd_Chr_Cp

La fonction Lcd_Chr_Cp affiche un caractre la position actuelle du courser. Par exemple,


pour afficher le caractre "M" la position actuelle du curseur, la fonction doit tre appele en
tant que :

Lcd_Chr_Cp ('M');
Lcd_Cmd

La fonction Lcd_Cmd est utilise pour envoyer une commande l'cran LCD. Avec ce
commande, nous pouvons dplacer le curseur vers n'importe quelle ligne, dsactiver l'cran
LCD, faire clignote le curseur, dcaler l'affichage, etc. Une liste des plus couramment utiliss
commandes LCD est donne dans Tableau 3.4.

Par exemple, pour effacer l'cran LCD nous devrions appeler la fonction comme suit :

Lcd_Cmd (Lcd_Clear);

Tableau 3.4: Commandes LCD


Commande LCD Description

LCD_CLEAR Effacer l'affichage

LCD_RETURN_HOME Retourner vers la position du curseur

LCD_FIRST_ROW Dplacer le curseur vers la premire ligne

LCD_SECOND_ROW Dplacer le curseur vers la deuxime ligne

LCD_THIRD_ROW Dplacer le curseur vers la troisime ligne

LCD_FOURTH_ROW Dplacer le curseur vers la quatrime ligne

LCD_BLINK_CURSOR_ON Clignotement du curseur

LCD_MOVE_CURSOR_LEFT Dplacer le curseur gauche

LCD_MOVE_CURSOR_RIGHT Dplacer le curseur droite

LCD_SHIFT_LEFT Dcaler l'affichage gauche

LCD_SHIFT_RIGHT Dcaler l'affichage droite

Un exercice ci-dessous illustre l'initialisation et l'utilisation de l'cran LCD.

- 72 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

utilis pour le bus RS232 de la communication srie entre deux appareils lectroniques.
Dans la communication de srie, seulement deux cbles (plus un cble de terre) sont
ncessaires pour transfrer des donnes dans les deux sens. Les donnes
sont envoys en format srie bit par bit. Normalement, le dispositif de rception est au
repos.

Pour lmission la patte TX est au niveau logique 1, galement connu sous le nom
MARK. Transmission des donnes commence lorsque le niveau logique sur cette patte
passe de 1 0, galement connu sous le nom ESPACE. Le premier bit envoy est le bit
de dpart la logique 0. La suite de ce bit, 7 ou 8 bits de donnes sont envoys, suivie
par un bit de parit en option. Le dernier bit envoy sappelle bit d'arrt est au niveau
logique 1. Les donnes en srie est gnralement envoy sous forme de 10 bits : un bit
de dpart, 8 bits de donnes, et un bit d'arrt, et aucun bits de parit.

La figure 3.3 montre comment le caractre A peut tre envoye en utilisant la communication
srie. Caractre "A" a la configuration binaire ASCII est 01000001.

IDLE 1 1 STOP

0 0 0 0 0 0 0
START

Fig. 3.3 Envoi un caractre "A" par la communication srie

Comme montre cette figure, le premier bit de dpart est envoy, cela est suivi par 8 bits de
donnes 01000001, et enfin le bit d'arrt est envoy. Le rythme binaire est trs important dans
la communication de srie, et la transmission (TX) et rception (Rx) dispositifs doivent avoir la
mme rythme de bits. Le rythme binaire est mesur par la vitesse de transmission, qui spcifie
le nombre de bits transmis ou reus par seconde.

Les vitesses typiques de transmission sont : 4800, 9600, 19200, 38400, et ainsi de suite. Par
exemple, lorsque exploitation 9600 bauds avec une taille d'image de 10 bits, 960 caractres
sont transmis ou reus par seconde. La synchronisation entre les bits est alors d'environ
104ms.

En RS232, base sur la communication en srie, les deux priphriques sont connects les uns
aux autres (voir figure 3.4) en utilisant soit un connecteur 9 voies ou d'un connecteur 25
voies. Normalement, seul le Broches TX, RX et GND sont ncessaires pour la communication.
Les pattes ncessaires pour deux types de connecteurs sont donnes dans le tableau 3.5.

Fig. 3.4 Les connecteurs RS232

Les niveaux de tension spcifis par le protocole RS232 sont 12V. Un signal logique HIGH
(haut) est - 12V et un signal logique LOW (bas) est + 12V. Les microcontrleurs PIC,
fonctionnent normalement des niveaux de tension : 0 et 5 V. Donc les signaux pour RS232
doivent tre convertie pour l'entre d'un microcontrleur. De mme, la sortie du microcontrleur
- 75 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

doit tre convertie en 12V avant l'envoi au dispositif de rception RS232. La conversion de
tension est gnralement ralise avec des circuits de conversion, comme le MAX232,
fabriqu par Maxim Inc.

La communication srie peut tre mis en uvre dans un matriel utilisant une patte spcifique
d'un microcontrleur, ou les signaux ncessaires peuvent tre gnrs par le logiciel pour toute
patte ncessaire dun microcontrleur. Mise en uvre matrielle ncessite soit une carte
intrieure de circuit UART (ou USART) ou d'une carte UART extrieure connecte au
microcontrleur.

Le mikroC PRO pour PIC fournit des routines pour la mise en uvre du logiciel de
communication UART. Ces routines sont indpendantes du matriel et peut tre utilis avec
n'importe quel microcontrleur.

Le compilateur mikroC PRO prend en charge les fonctions du logiciel UART suivantes:

Soft_UART_Init
Soft_UART_Read
Soft_UART_Write
Soft_UART_Break

Soft_UART_Init

La fonction UART1_Init spcifie les paramtres de communication srie et le fait


dans l'ordre suivant :

port, rx patte, tx patte, vitesse de transmission, mode

Ici :
port est le port utilis comme UART logiciel (par exemple, PORTB) ;

rx est le receveur dun nombre de transmission ;

tx est lmmteur de transmission ;

vitesse de transmission est le taux de transmission choisi, o la valeur maximale


dpend de la frquence d'horloge du microcontrleur ;

mode spcifie si les donnes devraient tre inverss ou non lors de la sortie. Un 0
indiquent quils ne devraient pas tre inverss, et un 1 indique qu'ils devraient tre
inverss. Quand un RS232 est utilis donc dans ce cas le mode doit tre rgl 1.
Soft_Uart_Init doit tre la premire fonction appele avant que le logiciel soit
tabli.

L'exemple suivant configure l'UART utiliser PORTC comme un port srie, avec RC6 pour la
patte TX et RC7 pour la patte RX. La vitesse de transmission est fix 9600 avec le mode non
inverss:

- 76 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Soft_Uart_Init (PORTB, 0, 1, 9600, 0);

Soft_Uart_Read

La fonction Soft_Uart_Read reoit un octet partir d'une patte du port srie spcifi. La
renvoie une condition d'erreur et les donnes sont lues partir du port srie. La fonction
ne pas attendre que les donnes soient disponibles sur le port, et donc le paramtre d'erreur
doit tre test si un octet est prvu. L'erreur est normalement de 1 et devient 0 quand un octet
est lu partir du port.

L'exemple suivant illustre la lecture d'un octet partir du port configur en srie
en appelant la fonction Soft_Uart_Init. L'octet reu est stock dans une variable Temp:

do
Temp = Soft_Uart_Read(&Rx_Error);

while (Rx_Error);

Soft_Uart_Write

La fonction Soft_Uart_Write transmet un octet une patte de port configur en srie. Les
donnes envoyer doivent tre spcifis comme un paramtre dans l'appel de la fonction.

Par exemple, pour envoyer un caractre "A" la patte de port srie :

char MyData = A;
Soft_Uart_Write(MyData);

L'exercice suivant illustre l'utilisation des fonctions du logiciel UART.

Exercice 3.9

Le port srie d'un ordinateur (par exemple, COM1) est reli un microcontrleur PIC16F887, et
logiciel d'mulation de terminal (par exemple, HyperTerminal) est exploit sur le PC pour utiliser
un port srie. Pattes RC6 et RC7 du microcontrleur sont les broches TX et RX respectivement.
Le dbit en bauds est de 9600.
Ecrire un programme pour lire les donnes du terminal, puis les renvoyer vers le terminal. Par
Un circuit intgr de conversion MAX232 est utilis pour convertir les signaux du
microcontrleur des niveaux RS232.
La figure 3.5 montre le schma du circuit de cet exercice.

Solution 3.9

Le circuit MAX232 reoit le signal TX de la patte RC6 du microcontrleur et le convertit en


niveaux RS232. Les donnes sries reues du circuit MAX232 sont converties en niveaux de
tension du microcontrleur, puis envoy la patte RC7. Noter que le fonctionnement correct du
circuit MAX232 ncessite quatre condensateurs tre connect au circuit.

- 77 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC

Tableau 3.5 Fonctions de la bibliothque Ctype


Fonction Description

isalnum Retourne 1 si le caractre spcifi est alphanumrique (a - z, A - Z, 0 - 9)

isalpha Retourne 1 si le caractre spcifi est alphabtique ( a - z, A - Z)

isntrl Retourne 1 si le caractre spcifi est un caractre de contrle (dcimale 0- 31


et 127)

isdigit Retourne 1 si le caractre spcifi est un chiffre (0 - 9)

islower Retourne 1 si le caractre spcifi est en minuscules

isprint Retourne 1 si le caractre spcifi est imprimable (dcimal 32 - 126)

isupper Retourne 1 si le caractre spcifi est en majuscule

toupper Convertir un caractre en majuscules

tolower Convertir un caractre en minuscule

Bibliothque Stdlib

La bibliothque stdlib contient des fonctions de bibliothque standard. Tableau 3.7 dresse la
liste des fonctions les plus utilises dans cette bibliothque.

Tableau 3.6 Fonctions de la bibliothque Math


Fonction Description

acos Retours en radians de l'arc cosinus de son paramtre


asin Retours en radians de l'arc sinus de son paramtre
atan Retours en radians de l'arc tangent de son paramtre
atan2 Retours en radians de l'arc tangent de son paramtre o les signes des
paramtres sont utiliss pour dterminer le quadrant du rsultat
cos Retourne le cosinus de son paramtre en radians
cosh Renvoie le cosinus hyperbolique de son paramtre
exp Renvoie la valeur exponentielle de son paramtre
fabs Retourne la valeur absolue de son paramtre
log Retourne le logarithme naturel de son paramtre
Log10 Retourne le logarithme en base 10 de son paramtre
pow Retourne la puissance d'un nombre
sin Retourne le sinus de son paramtre en radians
sinh Retourne le sinus hyperbolique de son paramtre
sqrt Retourne la racine carre de ses paramtre
tan Retourne la tangente de son paramtre en radians
tanh Retourne la tangente hyperbolique de son paramtre en radians

Tableau 3.7 Fonctions de la bibliothque Stdlib

- 80 -

Vous aimerez peut-être aussi