Académique Documents
Professionnel Documents
Culture Documents
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)
BOUMERDES - 2012
-0-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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
-3-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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 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
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
Code Explorer
Code Editor
Project Settings
(paramtres
principaux du
microcontrleur)
Error Window
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
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
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
-8-
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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 :
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
- 10 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
- 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.
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).
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:
- 14 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Sauvegarder un fichier
Assurez-vous que la fentre contenant le fichier que vous
voulez sauvegarder est active.
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).
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
}
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.
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.
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.
void main()
{
// Votre code ici
}
- 17 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
j = 5; // correcte
j = 5 // erreur
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 ;
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.
- 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.
temperature_V1
Pressure
no_hit
dat2string
SUM3
_vtext
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.
const if typedef
do register void
- 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.
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:
sum = 150;
ou
Les variables peuvent affecter des valeurs au cours de leur dclaration. Ainsi, les
dclarations ci-dessus peuvent aussi tre crites comme suit:
- 20 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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) 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 :
Les variables appels (signed) long (int) sont des variables signes de 32 bits avec une
gamme de - 2147483648 +2147483647. Un exemple est suivant :
Les variables appels unsigned long (int) sont des variables non signes de 32 bits ayant
une gamme de 0 4294967295. Un exemple est suivant:
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;
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).
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 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 :
- 22 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Entier dcimal
Point dcimal
Partie dcimale fractionnaire
e ou E et l'ordre du signe
Dans l'exemple suivant, une constante nomme TEMP est dclare comme ayant la
valeur fractionnelle 37.50 :
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 :
Une constante chane peut tre tendue travers une frontire en ligne en utilisant une
barre oblique inverse "\" :
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:
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.
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 .
\ b 0X08 BS (backspace)
- 24 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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 :
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 :
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 :
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 :
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.
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:
ou
Aprs avoir dfini Semaine comme un type numr, nous pouvons dclarer des variables
This_Week et Next_Week de type Semaine :
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:
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];
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:
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 :
et
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:
- 27 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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:
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 :
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];
Total[2] = 0;
et
*(Total + 2) = 0;
&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 :
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
ou
*P = 0; // Z[2] = 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:
*i = 10; // Cnt = 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:
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.
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;
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:
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;
}
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.
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.
union flags
{
unsigned char x;
unsigned int y;
}
union flags P;
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
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.
Caractristiques de loprateur () :
() parenthses () 15 gauche-droite
Oprateur daffectation
Loprateur la plus importante dans un langage de programmation est celle qui consiste
donner une valeur une variable.
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.
- 34 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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.
Exemple 1 :
Exemple 2 :
int a, b, c ;
float x, y, z ;
- 35 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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.
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.
II OU x II y 4 gauche-droite
- 36 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Les oprateurs suivants ne sont que des raccourcis de notation (pas doptimisation du
code gnr) :
+= 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
I= x=xIy x I= y 2 droite-gauche
^= x=x^y x ^= y 2 droite-gauche
Autres oprateurs
Oprateur conditionnel
? 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 ;
Oprateur squentiel
, 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.
Exemple :
Oprateur de parenthse
Oprateur de slection
Oprateurs du prprocesseur
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
#include <math.h>
#define #undef
#if #elif #endif
#ifdef #ifndef
#error
#ligne
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:
Nous pouvons passer des paramtres une dfinition de macro en prcisant les paramtres
entre les parenthses aprs le nom de la macro. Par exemple :
Lorsque cette macro est utilise dans un programme, (a, b) sera remplac par (a + b)
comme indiqu ci-dessous :
De mme, nous pouvons dfinir une macro pour calculer le carr de deux nombres :
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 :
Le dossier dans ce cas nest recherch que dans le chemin du rpertoire spcifi.
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
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
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
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
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.
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;
}
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
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 :
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:
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 :
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 :
- 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 :
Dans la boucle sans fin suivante, i commence par 1 et n'est pas incrment l'intrieur de la
boucle :
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 :
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 :
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 :
Comme il n'y a qu'une seule instruction excuter, l'exemple prcdent pourrait galement tre
s'crit :
{
for (j = 0; j < 4; j++) Sum = Sum + M[i][j];
}
Instruction while
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 :
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 peut galement tre forme par rglage de la condition qui doit tre
toujours vrai :
- 46 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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.
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);
- 47 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Une boucle sans fin peut galement tre cre si la condition est rgle pour tre vrai tout le
temps:
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;
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
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:
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).
asm
{
Instructions
}
asm
{
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
2.3 Exercices
Exercice 2.1
Ecrire un programme pour mettre tous les 8 pattes du PORTB au niveau 1.
Solution 2.1
PORTB est configur comme un port de sortie ( laide du registre TRISB), et ensuite
tous les 8 bits du port sont mis au niveau logique 1 (en chargeant le registre PORTB
par le nombre hexadcimal 0xFF) :
void main ()
{
TRISB = 0; // Configurer PORTB en sortie
PORTB = 0xFF; // Mettre toutes les bits du port 1
}
Exercice 2.2
crire un programme pour mettre les pattes impaires (1, 3, 5 et 7) du PORTB au
niveau 1.
Solution 2.2
Repres impaires de port peuvent tre mis au niveau logique 1 en envoyant la
configuration binaire 10101010 au registre PORTB. Cette configuration binaire est le
nombre hexadcimal 0xAA et le programme ncessaire est :
void main ()
{
TRISB = 0; // Configurer PORTB en sortie
PORTB = 0xAA; // Activer les pattes impairs numrots
}
Exercice 2.3
Ecrire un programme pour compter en binaire sans fin et envoie ces donnes
PORTB :
- 50 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
00000000
00000001
00000010
00000011
............
............
11111110
11111111
00000000
............
Solution 2.3
Une boucle sans fin peut tre utilise, et l'intrieur de cette boucle la valeur d'une
variable peut tre incrmente, puis envoye PORTB:
void main ()
{
unsigned char Cnt = 0;
for (;;) // Boucle sans fin
{
PORTB = Cnt; // Envoyer Cnt PORTB
Cnt++; // Incrmentation Cnt
}
}
Exercice 2.4
crire un programme pour mettre tous les bits de PORTB au niveau logique 1, puis
la logique 0, et rpter ce procd dix fois.
Solution 2.4
Linstruction for peut tre utilise pour crer une boucle rpter les oprations
requises dix fois
void main ()
{
unsigned char j;
for (j = 0; j < 10; j++) // Rpter 10 fois
{
PORTB = 0xFF; // Mettre les bits de PORTB 1
PORTB = 0; // Mettre les bits de PORTB 0
}
}
- 51 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Exercice 2.5
Le rayon et la hauteur d'un cylindre sont de 2,5 cm et 10 cm respectivement. Ecrire un
programme pour calculer le volume de ce cylindre.
Solution 2.5
Le programme est :
void main ()
{
float Rayon = 2.5, Hauteur = 10;
float Volume;
Volume = PI * Rayon * Rayon * Hauteur;
}
Exercice 2.6
Ecrire un programme pour trouver le plus grand lment d'un tableau d'entiers ayant
dix lments.
Solution 2.6
Au dbut, la variable m est affecte sur le premier lment de la matrice. Une boucle
est alors forme et le plus grand lment de la matrice se trouve :
void main ()
{
unsigned char j ;
int m, A [10];
m = A [0]; // Premier lment du tableau
for (j = 1; j < 10; j++)
{
if (A [j]> m) m = A [j];
}
}
Exercice 2.7
Ecrire un programme en utilisant une boucle while pour effacer tous les dix lments
entiers dans un tableau M.
Solution 2.7
Dans le programme qui suit, NUM est dfinie comme 10 et une variable j est utilise
comme le compteur de boucle:
- 52 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
#define NUM 10
void main ()
{
int M[NUM];
unsigned char j = 0;
while (j < NUM)
{
M[j] = 0;
j++;
}
}
Exercice 2.8
Ecrire un programme pour convertir la temprature de C F partir de 0 C, avec le
pas de 1 C jusqu' 100 C, et stocker les rsultats dans un tableau appel F.
Solution 2.8
F = (C- 32.0)/1.08
Une boucle for est utilise pour calculer la temprature en F et la ranger dans tableau F :
void main ()
{
float F[100];
unsigned char C;
for (C = 0; C <= 100; C++)
{
F[C] =(C 32.0) / 1.8;
}
}
- 53 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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
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 :
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
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
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 ();
void Compl()
{
PORTC = PORTC;
}
Compl ();
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
Surface = r2
o r est le rayon du cercle. La surface est calcule et stocke dans une variable locale
appele s, qui est ensuite retourne par la fonction :
Le code-source 3.1 montre comment la fonction Cercle_Surface peut tre utilise dans un
programme principal pour calculer la surface d'un cercle dont le rayon est de 2,5 cm. La
fonction est dfinie avant le programme principal. La fonction est appele l'intrieur du
programme principal pour calculer la surface et la stocker dans la variable Cercle.
Code-source 3.1
/****************************************************************************
SURFACE D'UN CERCLE
====================
Ce programme appelle la fonction Cercle_Surface pour calculer la surface d'un
cercle.
Microcontrleur : PIC 18F452
Oscillateur : HS, 08.0000 Mhz
Fichier: SURFACE_CERCLE.c
Date: Juillet 2012
****************************************************************************/
//Calcule la surface d'un cercle en fonction de rayon
void main ()
{
float r, Cercle;
r = 2.5;
Cercle = Cercle_Surface(r);
}
- 56 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Exercice3.2
crire une fonction appele Surface et une fonction appele Volume pour calculer la surface
et le volume d'un cylindre, respectivement. Puis crire un programme principal pour calculer la
surface et le volume du cylindre dont le rayon est 2,0cm et la hauteur est 5,0cm. Stocker la
valeur de cette surface dans la variable Cylindre_Surface et la valeur de volume dans la
variable Cylindre_Volume.
Solution 3.2
Exercice 3.3
Solution 3.3
La valeur ASCII du caractre en majuscule du premier caractre ('A') est gale 0x41. De
mme, la valeur l'ASCII du premier caractre en minuscule ('a') est gale 0x61. Un caractre
minuscule peut tre converti en son quivalent majuscule en soustrayant 0x20 du caractre en
minuscule.
Les fonctions ncessaires sont montres dans le code-source 3.3.
Exercice 3.4
Utilisez la fonction que vous avez cr dans l'exemple 3.3 dans un programme principal pour
convertir la lettre r en majuscules.
- 57 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Solution 3.4
Code-source 3.2
/**************************************************************************
SURFACE ET VOLME DUN CYLINDRE
==============================
Ce programme calcule la surface et le volume d'un cylindre dont le rayon est
2,0cm et la hauteur est 5,0cm.
Microcontrleur : PIC 18F452
Oscillateur : HS, 08.0000 Mhz
Fichier: VOLUM_CYLINDRE.c
Date: Juillet 2012
***************************************************************************/
//Fonction pour calculer la surface d'un cylindre
void main ()
{
float r = 2.0, h = 5.0;
float Cylindre_Surface, Cylindre_Volume;
Cylindre_Surface = Surface(r,h);
Cylindre_Volume = Volume(r,h);
}
- 58 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 3.3
/***********************************************************************
MINUSCULEMAJUSCULE
===================
Ce programme convertit le caractre en minuscule de la variable Lc dans le
caractre en majuscule et le sauvegarde dans la variable Uc.
Microcontrleur : PIC 16F84A
Oscillateur : HS, 8.0000 Mhz
Fichier: MINUSC_MAJUSC.c
Date: Juillet 2012
*************************************************************************/
void main ()
{
unsigned char Lc, Uc;
Lc = r;
Uc = Minuscule_Majuscule (Lc);
}
Si une fonction n'est pas dfinie avant qu'il ne soit appel, le compilateur gnre une erreur.
Une faon de contourner ce problme est de crer un prototype de fonction. Une fonction
prototype est construite facilement en faisant une copie de la tte de la fonction.
Les paramtres ne sont pas obligatoires, mais le type de donnes et des paramtres doivent
tre dfinis.
Dans un exemple, qui suit, le prototype de fonction appele Area est dclare et la fonction
s'attend davoir un paramtre de type en virgule flottante :
Prototype de fonction doit tre dclar au dbut d'un programme. Les dfinitions et les appels
de fonction peuvent alors tre faits n'importe quel point dans le programme.
- 59 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 3.4
/****************************************************************************
MINUSCULES EN MAJUSCULES
============================
Ce programme convertit le caractre en minuscule de la variable Lc en
majuscule et le sauvegarde dans la variable Uc.
Microcontrleur : 16F84A
Oscillateur : HS, 8.0000 Mhz
Fichier: MINUSC_MAJUSCUL.c
Date: Juillet 2012
****************************************************************************/
// Fonction pour convertir un caractre de minuscule en majuscule
void main ()
{
unsigned char Lc, Uc;
Lc = r;
Uc = Minuscule_Majuscule(Lc);
}
Exercice 3.5
Rpter l'exemple 3.4, mais dclarer que Minuscule_Majuscule est un prototype de fonction.
Solution 3.5
- 60 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 3.5
/****************************************************************************
MINUSCULES EN MAJUSCULES
============================
Ce programme convertit le caractre en minuscule de la variable Lc en
majuscule et le sauvegarde dans la variable Uc.
Microcontroller: 16F84A
Oscillateur : HS, 8.0000 Mhz
Fichier: MIN_MAJ_2.c
Date: Juillet 2012
***************************************************************************/
unsigned char Minuscule_Majuscule(unsigned char);
void main ()
{
unsigned char Lc, Uc;
Lc = r;
Uc = Minuscule_Majuscule (Lc);
}
unsigned char c = A;
unsigned int x = 100;
long Tmp;
long MaFonc(long a, long b); // prototype de fonction
void main ()
{
. . .. . .. . .. . .. . .
. . .. . .. . .. . .. . .
Tmp = MaFonc(c, x);
. . .. . .. . .. . .. . .
. . .. . .. . .. . .. . .
}
Dans cet exemple, le prototype de fonction dclare les deux arguments long,
les variables x et c sont convertis en long avant d'tre utilis l'intrieur de la fonction
MaFonc.
- 61 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Voici un exemple de fonction qui dpend des effets secondaires plutt que de la valeur de
retour :
#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
}
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 () :
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.
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 :
main ()
{
//...
res = fonc(limit, ch); // fonction call (appeler)
}
- 63 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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).
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
Solution 3.6
Une LED peut tre connecte un microcontrleur en deux modes : source de courant et
absorption de courant.
En mode d'absorption de courant (voir figure 3.1a) une patte de la LED est connecte + 5 V
travers une rsistance R de limitation de courant et l'autre patte est relie la patte de port de
sortie du microcontrleur. La LED sera allume lorsque le port de sortie du microcontrleur est
au niveau logique 0 ( savoir, environ +0 V).
En mode de source de courant (voir figure 3.1b) une patte de la LED est relie au port de sortie
du microcontrleur et l'autre patte est relie la masse travers une rsistance R de limitation
de courant. La LED sera allum lorsque le port de sortie du microcontrleur est au niveau
logique 1 ( savoir, environ +5 V). La mme valeur de rsistance R peut tre utilise en mode
de source de courant.
a) b)
Le programme requis est donn dans le code-source 3.6 (fichier LED CLIGNOT.C). Le port
PORTB est configur en sortie en utilisant la dclaration TRISB = 0. Une boucle sans fin est
alors forme avec la dclaration for, et l'intrieur de cette boucle la LED est allume ou
teinte avec un dlai dune second.
Un autre programme clignoter une LED donn par le code-source 3.7 (fichier LED
CLIGNOT2.C) est plus facile suivre en utilisant la commande de prprocesseur #define.
- 65 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Le tableau 3.2 donne une liste des fonctions de la bibliothque mikroC, organise en ordre
fonctionnel.
Certaines des fonctions de la bibliothque frquemment utilises sont les suivantes :
EEPROM bibliothque
LCD bibliothque
Logiciel UART bibliothque
Matriel USART bibliothque
Sound bibliothque
ANSI C bibliothque
Divers bibliothques
Code-source 3.6
/****************************************************************************
LED CLIGNOTANTE
================
Ce programme fait clignoter dune LED connecte au port RB0 d'un
microcontrleur PIC avec lintervalle dune seconde. La fonction intgr
Delay_ms est utilis pour crer un dlai de 1 seconde entre les
clignotements.
Microcontrleur: 16F84A
Oscillateur: HS, 4.0000 Mhz
Fichier: LED_CLIGNOTE.c
Date: Juillet 2012
****************************************************************************/
void main ()
{
TRISB = 0; // Configurer PORTB en sortie
for (;;) // Boucle sans fin
{
PORTB = 1; // Activer LED
Delay_ms (1000); // Retard 1 seconde
PORTB = 0; // Dsactiver LED
Delay_ms (1000); // Retard 1 seconde
}
}
Code-source 3.7
/***************************************************************************
LED CLIGNOTANTE_2
===================
Ce programme fait clignoter dune LED connecte au port RB0 d'un
microcontrleur PIC avec lintervalle dune seconde. En utilisant les
commandes de prprocesseur #define le programme est devenu plus facile
suivre.
Microcontrleur: 16F84A
Oscillateur: HS, 4.0000 Mhz
Fichier: LED_CLIGNOTE2.c
Date: Juillet 2012
**************************************************************************/
#define LED PORTB.0
#define ON 1
#define OFF 0
#define One_Second_Delay Delay_ms(1000)
- 66 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
void main()
{
TRISB = 0; // PORTB est configur en sortie
for(; ;) // Boucle sans fin
{
LED = ON; // LED est allume (ON)
One_Second_Delay; // Retard 1 seconde
LED = OFF; // LED est dsactive (OFF)
One_Second_Delay; // Retard 1 seconde
}
}
La bibliothque EEPROM inclut des fonctions pour lire les donnes non volatiles dEEPROM du
PIC, ou pour crire des donnes sur cette mmoire. Deux fonctions sont prvues :
Eeprom_Read
Eeprom_Write
La fonction Eeprom_Read lit un octet partir d'une adresse spcifie de la mmoire EEPROM.
Ladresse est de type entier, et donc la fonction prend en charge les microcontrleurs PIC avec
- 67 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
plus de 256 octets. Un retard de 20 ms doit tre utilis entre lectures successives de lEEPROM
pour garantir le retour des donnes correctes.
Dans l'exemple suivant, l'octet d'adresse 0x1F de la mmoire EEPROM est lu et stock dans
variable Temp:
Exercice 3.7
Ecrivez un programme pour lire le contenu de l'EEPROM de l'adresse 0 0x2F puis envoyez
ces donnes pour PORTB d'un microcontrleur PIC.
Solution 3.7
Le programme requis est donn dans le code-source 3.8 (fichier LECTURE DE LEEPROM).
Une boucle for est utilise pour lire les donnes de lEEPROM et puis de l'envoyer au PORTB
du microcontrleur. Notez que quelques 20ms retard sont utiliss entre chaque lecture
successive.
Code-source 3.8
/****************************************************************************
LECTURE DE LEEPROM
====================
Ce programme lit les donnes partir d'adresses de 0 0x2F de l'EEPROM et
puis envoie ces donnes pour PORTB du microcontrleur.
Microcontrleur: 16F84A
Oscillateur: HS, 4.0000 Mhz
Fichier: EEPROM.c
Date: Juillet 2012
****************************************************************************/
void main()
{
unsigned int j;
unsigned char Temp;
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
1 VSS Ground
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 :
- 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
Cette fonction devrait tre utilise pour modifier la connexion par dfaut. Il devrait tre appel
avec les paramtres dans l'ordre suivant :
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
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_Cp
Lcd_Out_Cp ("Ordinateur");
Lcd_Chr
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
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);
- 72 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Exercice 3.8
Un contrleur de texte LCD est reli un microcontrleur PIC16F84A dans le mode par dfaut
comme illustre la figure 3.2.
Solution 3.8
Au dbut le PORTB est configur en sortie par la dclaration TRISB = 0. L'cran LCD est
alors initialis, l'affichage est effac, et le texte Mon Ordinateur "est affich sur l'cran LCD.
Code-source 3.9
/****************************************************************************
REDACTION D'UN TEXTE A LECRAN LCD
==================================
Un contrleur de texte LCD est reli un microcontrleur PIC dans le mode
(4,5,3,2,1,0). Ce programme affiche les textes "AFFICHAGE" sur la 1 re ligne
et display_LCD_4bit sur la 2me ligne d'cran LCD.
Microcontrleur: 16F887
Oscillateur: HS, 10.0000 Mhz
Compilateur: microC PRO v.1.56
Fichier: LCD.c
Date: Juillet 2012
***************************************************************************/
// Connections de LCD
// Fin de connections
- 73 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
void main()
{
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
/* Configurer E/S du portB comme numriques*/
ANSELH = 0;
ANSEL = 0;
Lcd_Init(); // Initialiser LCD
Lcd_Cmd(_LCD_CLEAR); // Effacer un texte sur lecrant LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Curseur est en off
Lcd_Out(1,2,"-- AFFICHAGE -- "); // Ecrire le texte sur la 1re ligne
Lcd_Out(2,1,"display_LCD_4bit"); // Ecrire le texte sur la 2me ligne
}
Fig. 3.2 Connexion du PIC avec LCD (pour la simulation dans le PROTEUS)
- 74 -
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
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.
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
Ici :
port est le port utilis comme UART logiciel (par exemple, PORTB) ;
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_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.
char MyData = A;
Soft_Uart_Write(MyData);
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
- 77 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Le programme requis est indiqu dans le code-source 3.10 (fichier SERIAL.C). Au dbut du
programme, la fonction Soft_Uart_Init est appele pour configurer le port srie.
Puis une boucle sans fin est forme en utilisant linstruction while(1). La fonction
Soft_Uart_Read est appel lire un caractre partir du terminal. Aprs la lecture d'un
caractre, il est renvoy la patte en appelant la fonction Soft_Uart_Write.
Fig. 3.5 Schma du circuit dexercice 3.9 (pour la simulation dans le PROTEUS)
Les bibliothques standards ANSI C se compose des bibliothques suivantes (plus de dtails
sur ces bibliothques sont disponibles dans le manuel de l'utilisateur mikroC):
Ctype bibliothque
Math bibliothque
Stdlib bibliothque
String bibliothque
Bibliothque Ctype
Les fonctions de la bibliothque Ctype sont principalement utilises pour la conversion des
essais ou des donnes. Tableau 3.5 dresse la liste des fonctions les plus couramment utiliss
dans cette bibliothque.
Bibliothque Math
Les fonctions de la bibliothque Math sont utilises pour les oprations mathmatiques en
- 78 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
virgule flottante. Le tableau 3.6 dresse la liste des fonctions les plus couramment utiliss dans
cette bibliothque.
Code-source 3.10
/***************************************************************
LECTURE ET CRITURE DE PORT SERIE
==================================
Dans ce programme les pattes RC6 et RC7 du PORTC sont configurs comme
srie TX et RX, respectivement. La vitesse de transmission est fixe
9600. Un caractre est reu partir du terminal, et ensuite il est renvoy
vers le terminal.
Microcontrleur: 16F887
Oscillateur: HS, 10.0000 Mhz
Ficher: SERIAL_PORT.c
Date: Juillet, 2012
******************************************************************/
char error, byte_read; // Variables locales
void main()
{
ANSEL = 0; // Configurer des pins AN en E/S numriques
ANSELH = 0;
if (error > 0)
{
PORTC = error; // Signaler error dInitialisation
while(1); // Stop programme
}
Delay_ms(100);
byte_read = Soft_UART_Read(&error);
Soft_UART_Write(byte_read);
}
}
- 79 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
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.
- 80 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Fonction Description
rand Retourne un nombre alatoire compris entre 0 et 32767; la fonction stand doit
tre appele obtenir une squence diffrente de nombres
srand Gnre une fonction rand donc une nouvelle squence de nombres est gnre
Exemple 3.10
Ecrire un programme pour calculer le sinus des angles de 0 90 avec le pas de 1 et stocker
le rsultat dans un tableau appel Trig_Sine.
Solution 3.10
Le programme requis est indiqu dans le code-source 3.11 (fichier SINE.C). Une boucle est
cr en utilisant linstruction for, et l'intrieur de cette boucle le sinus d'angles sont calcules
et stockes dans le tableau Trig_Sine. Notez que les angles doivent tre convertis en radians
avant d'tre utilis dans les fonctions sin.
Code-source 3.11
/**************************************************************************
SINUS DES ANGLES DE 0 A 90
=============================
Ce programme calcule le sinus d'angles de 0 90. Les rsultats sont
stocks dans un tableau appel Trig_Sine.
Microcontrleur: 16F887
Oscillateur: HS, 10.0000 Mhz
Compilateur: microC PRO v.1.56
Ficher: SINE.C
Date: Juillet, 2012
**************************************************************************/
void main()
{
unsigned char j;
double PI = 3.14159, rads;
for(j = 0; j <= 90; j++)
{
rads = j*PI /180.0;
angle = sin(rad);
Trig_Sine[j] = angle; - 81 -
}
}
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Bibliothque String
La bibliothque des fonctions string est utilise pour effectuer la manipulation de chanes de
caractres et de la mmoire oprations. Tableau 3.8 dresse la liste des fonctions les plus
couramment utiliss dans cette bibliothque.
Exemple 3.11
Ecrire un programme pour illustrer comment les deux chanes "MON PUISSANT et
COMPUTER peuvent tre joints dans une nouvelle chane en utilisant les fonctions de la
bibliothque string.
Solution 3.11
Code-source 3.12
/**************************************************************************
ASSEMBLAGE DE DEUX LIGNES DE CARACTERES
=================================
Ce programme montre comment deux chanes peuvent tre jointes pour obtenir
une nouvelle chane de caractres.
La fonction strcat est utilis pour joindre les deux chanes pointes par
p1 et p2 dans une nouvelle chane stocke dans le tableau de caractres
New_String.
Microcontrleur: 16F887
Oscillateur: HS, 10.0000 Mhz
Fichier: JOIN.C
Date:Juillet, 2012
************************************************************************/
void main()
{
const char *p1 = MON PUISSANT ; // Premire ligne
const char *p2 = COMPUTEUR; // Deuxime ligne
char New_String[80];
strcat(strcat(New_String, p1), p2); // Joindre les deux lignes
} - 82 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Les divers bibliothques se compose des bibliothques suivantes (plus de dtails sur ces
bibliothques sont disponibles dans le manuel de l'utilisateur mikroC):
Bibliothque de conversions
Bibliothque de fonctions trigonomtriques
Bibliothque de fonctions de sortie sprint
Bibliothque de Setjmp
Bibliothque pour travailler avec le temps
Le tableau 3.9 dresse la liste des fonctions les plus couramment utiliss dans la bibliothque de
conversions.
Tableau 3.9
Fonction Description
- 83 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Dans ce projet les huit LEDs sont connectes PORTC d'un microcontrleur.
Lorsqu'une tension est applique au microcontrleur (ou est rinitialis), les LEDs s'allument en
alternance. Il y a le dlai dune seconde de sorte quune LED peut tre vu tourner sur ON et
OFF.
Le schma de principe du projet est illustr la figure 4.1.
- 84 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.1
/****************************************************************************
Chenille LEDs
===============
Les huit LEDs sont connectes PORTC du microcontrleur 18f452. Lorsqu'une
tension est applique au microcontrleur (ou est rinitialis), les LEDs
s'allument en alternance.
Microcontrleur: 18F452
Oscillateur : HS, 4.0000 Mhz
Fichier: LED1.c
Date: Juillet 2012
***************************************************************************/
void main()
{
unsigned char J = 1;
TRISC = 0; // PORTC est configure en sortie
for(;;) // Boucle sans fin
{
PORTC = J; // Envoyer J au PORTC
Delay_ms(100); // Pause 100 ms
J = J << 1; // Dcalage gauche J
if(J == 0) J = 1; // Si la dernire LED, allumer la 1re LED
}
}
On propose de faire clignoter LEDs branches au port B dun microcontrleur (fig. 4.2) de deux
faons diffrentes :
1. Ds que le microcontrleur est activ, tous les LEDs clignotent avec une priode dune
seconde (voire la figure ci-dessous). Et a doit rpter 10 fois.
2. Aprs cela, les LEDs doivent clignoter chaque 500 ms infiniment comme indiqu dans la
figure ci-dessous.
Le fichier nomm LED2.C qui ralise ce projet est reprsent dans le code-source 4.2
- 85 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.2
/****************************************************************************
LEDs clignotantes diffremment
===============================
Les huit LEDs sont connectes PORTB du microcontrleur 16f887. Lorsqu'une
tension est applique au microcontrleur (ou est rinitialis), les LEDs
s'allument en alternance en deux faon diffrente.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: LED2.c
Date: Juillet 2012
***************************************************************************/
void main()
{
ANSEL = 0;
ANSELH = 0;
PORTB = 0xFF;
TRISB= 0;
Delay_ms(500);
PORTB = 0;
Delay_ms(500);
}
}
PORTB=0b01010101;
while(1)
{
PORTB= ~PORTB;
Delay_ms(500);
}
}
Exemple 3. RELAI
Dans ce projet la minuterie, sur la base de registre TMR0, est utilise comme un compteur.
L'entre de comptage est relie un bouton-poussoir Input (fig. 4.3) de sorte que toute
pression sur Input provoque TMR0 compter une impulsion. Lorsque le nombre d'impulsions
correspond au nombre stock dans le registre nomm TEST, la valeur logique 1 (5V) apparat
sur le pin3 de PORTD. Cette tension active un relais lectromcanique, et ce bit est appel
RELAI dans le programme (voire le fichier RELAI.C de code-source 4.3).
Dans le registre de TEST est stock un nombre de 5 pour cet exemple. Bien sr, il peut tre
n'importe quel nombre dfini comme une constante. Par ailleurs, le microcontrleur peut activer
un autre appareil au lieu de relais, tandis que le capteur peut tre utilis la place du bouton-
poussoir. Cet exemple illustre l'une des applications les plus courantes du microcontrleur dans
l'industrie; quand quelque chose est effectu autant de fois que ncessaire, puis quelque chose
d'autre doit tre activ ou dsactiv ....
- 87 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.3
/****************************************************************************
RELAI
=======
Dans ce projet la minuterie, sur la base de registre TMR0, est utilise comme
un compteur. L'entre de comptage est relie un bouton-poussoir Input de
sorte que toute pression sur Input provoque TMR0 compter une impulsion.
Lorsque le nombre d'impulsions correspond au nombre stock dans le registre
nomm TEST, la valeur logique 1 (5V) apparat sur le pin3 de PORTD. Cette
tension active un relais lectromcanique RELAI.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: RELAI.c
Date: Juillet 2012
***********************************************************************************/
void main()
{
char TEST = 5; // Constante TEST = 5
enum sortie {RELAI = 3}; // Constante RELAI = 3
ANSEL = 0; // Les E/S sont configures en numriques
ANSELH = 0;
PORTA = 0; // Initialisation du porte A
TRISA = 0xFF; // Porte A est configur en entr
PORTD = 0; // Initialisation du PORTD
TRISD = 0b11110111; // Broche 3 du PORTD3 est configur en sortie
Une selle constante numre RELAI est utilise dans cet exemple. Il est attribu un valeur
lorsquelle est dclare :
Si plusieurs broches du PORTD sont relies des RELAIS, lexpression ci-dessus pourrait tre
crite comme suit :
Toutes les constantes, aprs celle avec les valeurs affectes (RELAI = 3 et ECLARAGE = 6),
sont des valeurs automatiquement incrment de 1 par rapport la valeur prcdente. Dans ce
cas, la constante CHAUFFAGE et celle POMPE seront affects les valeurs 4 et 7 respectivement
(CHAUFFAGE = 4 et POMPE = 7).
- 88 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Dans l'exemple prcdent, le microcontrleur ne fait rien entre des impulsions de comptage en
utilisant des boucles sans fin. Ces dchets du temps est un luxe inadmissible et par consquent
une autre mthode doit tre applique.
Considrons le schma microcontrleur 16F887 de la figure 4.1 qui sera toujours le mme
pour raliser les nouvelles fonctions.
Le fichier INTERRUP_TMR0.C du code-source 4.4 montre lutilisation du registre TMRO avec
prdiviseur pour gnrer une interruption. Une fois que le registre TMR0 est trop-plein le
routin dinterruption incrmente automatiquement la variable cnt par 1. Lorsque sa valeur
atteint 400, le PORTB est incrment de 1. L'ensemble de la procdure est masqu, qui
permet au microcontrleur de faire autre chose.
Code-source 4.4
/***************************************************************************
TMR0
=======
Une fois que le registre TMR0 est trop-plein le routin dinterruption
incrmente automatiquement la variable cnt par 1. Lorsque sa valeur atteint
400, le PORTB est incrment de 1. L'ensemble de la procdure est masqu,
qui permet au microcontrleur de faire autre chose.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: INTERRUP_TMR0.c
Date: Juillet 2012
***************************************************************************/
unsigned cnt; // Dfinir la variable cnt
void interrupt()
{
cnt++; /* Interruption cause lincrmentation par 1
de la variable cnt*/
- 89 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
On voie que lInterruption se produit sur chaque dbordement du registre TMR0. Le nombre
dinterruption 400, dans cet exemple, provoque lincrmentation du PORTB comme indique la
figure ci-dessous.
Code-source 4.5
/****************************************************************************
TMR1
=======
Une fois que le registre TMR1 est trop-plein la routine dinterruption
incrmente automatiquement par 1 la variable cnt. Lorsque sa valeur atteint
76, les bits du PORTB sont inverss.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: INTERRUP_TMR1.c
Date: Juillet 2012
****************************************************************************/
unsigned short cnt; // Dfinir la variable cnt
void interrupt()
{
cnt++ ; /* Interruption cause lincrmentation par 1 de la
variable cnt*/
PIR1.TMR1IF = 0; // Remise 0 bit TMR1IF
TMR1H = 0x80;
TMR1L = 0x00; // Valeurs initiales du TMR1H and TMR1L
}
void main()
{
ANSEL = 0; // Broches E/S sont configur en numriques
ANSELH = 0;
PORTB = 0xF0; // Initialisation de PORTB
TRISB = 0; // PORTB est configur en sortie
T1CON = 1; // Remise 1 du TMR1
PIR1.TMR1IF = 0; // Remise 0 du TMR1IF
TMR1H = 0x80; // Initialisation du TMR1
TMR1L = 0x00;
PIE1.TMR1IE = 1; /* Activer linterruption en cas de dbordement du
TMR1*/
cnt = 0; // Remis 0 la variable cnt
INTCON = 0xC0; // Activer interruption (bits GIE et PEIE)
do
{ // Boucle sans fin
- 90 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
if (cnt == 76)
{
PORTB = ~PORTB; /* Bits du PORTB sont inverss aprs 76
dinterruptions*/
Cet exemple illustre l'utilisation de module CCP1 en mode PWM. Pour rendre les choses plus
intressantes, la dure dimpulsions la sortie P1A/CCP1 (PORTC, 2) peut tre change avec
les touches symboliquement marqus comme "BRILLANT" et "NOIR", tandis que la dure est
considre comme la combinaison binaire sur le port B (fig.4.4).
Remarque dauteur : La diode D1 dans le schma de simulation dans le PROTEUS (fig. 4.4)
signale que le module CCP1 est activ. Dans le montage rel son tat corresponde ltat de
la diode D2 pendant la simulation.
Afin de rendre cet exemple fonctionne correctement, il est ncessaire de cocher les
bibliothques suivantes dans le gestionnaire de bibliothque avant de compiler:
PWM
Bouton
- 91 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.6
/****************************************************************************
Module CCP1 comme gnrateur du signal PWM
==========================================
Cet exemple illustre l'utilisation de module CCP1 en mode PWM. La
dure dimpulsions la sortie P1A/CCP1 (PORTC, 2) peut tre change
avec les touches symboliquement marqus comme "BRILLANT" et "NOIR",
tandis que la dure est considre comme la combinaison binaire sur le
PORTB.
Microcontrleur: 16F887
Oscillateur : HS, 8.0000 Mhz
Fichier: SIGNAL_PWM.c
Date: Juillet 2012
****************************************************************************/
unsigned short current_duty, old_duty; /* Dfinition des variables
current_duty and old_duty*/
void initMain()
{
ANSEL = 0; // Toutes les E/S sont numriques
ANSELH = 0;
PORTA = 0x00; // Initialisation du PORTA
TRISA = 0xFF; // PORTA est configur en entre
PORTB = 0; // Initialisation du PORTB
TRISB = 0; // PORTB est configur en sortie
PORTC = 0; // Initialisation du PORTC
TRISC = 0xFF; // PORTC est configur en entr
- 92 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Dans ce projet un signal analogique variable est appliqu la broche AN2 de microcontrleur
16F887, tandis que le rsultat de conversion de 10 bits est localise sur les ports B et D (8 LSB
sur le PORTD et 2 MSB sur le PORTB). GND est utilis comme rfrence de tension ngative
Vref-.
Le convertisseur A / D gnre toujours un rsultat binaire de 10 bits, ce qui signifie qu'il dtecte
au total de 1024 niveaux de tension et donc il est capable de dtecter de lgres modifications
de la tension.
Le fichier CONVERT_A/D.C est donn dans le codesource 4.7 et le schma de simulation du
projet est reprsent sur la figure 4.5.
- 93 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.7
/****************************************************************************
CONVERTISSEUR A/D
===================
Un signal analogique variable est appliqu la broche AN2 du microcontrleur
16F887, tandis que le rsultat de conversion de 10 bits est localise dans
les PORTB et PORTD (8 LSB dans le PORTD et 2 MSB dans le PORTB). GND est
utilis comme rfrence de tension ngative Vref-.
Microcontrleur: 16F887
Oscillateur : HS, 8.0000 Mhz
Fichier: CONVERT_A/D.c
Date: Juillet 2012
****************************************************************************/
unsigned int temp_res;
void main()
{
ADCON1 = 0x80; // Configurer Vref
ANSEL = 0x0C; /* Configurer la broche AN2 du PORTA en
analogique */
TRISA = 0xFF; // PORTA est configur en entre
ANSELH = 0; /* Configurer les autres broches du
PORTA en numrique */
do
{
temp_res = ADC_Read(2); /* Rsultat de la conversion A / D est
copi dans temp_res */
Dans cet exemple le registre du PORTB est incrment en permanence. Au moment de l'appui
sur le bouton appel MEMO_EEPROM, un nombre binaire du PORTB sera sauvegard dans
la mmoire EEPROM. Ce nombre doit tre directement lu de lEEPROM et ensuite affich sur
PORTD sous forme binaire.
Le fichier EEPROM.c est donn dans le code-source 4.8.
- 94 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.8
/****************************************************************************
Mmoire EEPROM
===================
Le registre du PORTB est incrment en permanence. Au moment de l'appui sur
le bouton appel MEMO_EEPROM, un nombre binaire du PORTB sera sauvegard
dans la mmoire EEPROM. Ce nombre doit tre directement lu de lEEPROM et
ensuite affich sur PORTD sous forme binaire.
Microcontrleur: 16F887
Oscillateur : HS, 8.0000 Mhz
Fichier: EEPROM.c
Date: Juillet 2012
****************************************************************************/
void main()
{
ANSEL = 0; //Toutes les E/S sont configurs en numriques
ANSELH = 0;
PORTB = 0; // Initialisation du PORTB
TRISB = 0; // PORTB est configur en sortie
PORTD = 0; // Initialisation du PORTD
- 95 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Dans ce projet de deux afficheurs 7 segments LEDs (cathode commune) sont connectes
PORTC d'un microcontrleur.
La cathode de chiffre 1 (chiffre de gauche) est connect au PORTB (broche RB0)
et la cathode de chiffre 2 (chiffre de droite) est connect au PORTB (broche RB1) du
microcontrleur.
- 96 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Microcontrleur: 18F452
Oscillateur : HS, 4.0000 Mhz
Fichier: AFFICH_MULTIPLEXE.c
Date: Juillet 2012
****************************************************************************/
#define DIGIT1 PORTB.F0
- 97 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
- 98 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Delay_ms(1000);
for(;;) // Boucle sans fin
{
Cnt++; // Incrmentation de Cnt
if(Cnt == 100) Cnt = 0; // Comptage de 0 99
Delay_ms(1000); // Attendre 1 seconde
}
}
- 99 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.10
/****************************************************************************
MULTIMETRE AVEC LAFFICHEUR LCD
================================
Ce projet illustre l'utilisation d'un cran LCD alphanumrique.
Un message crit en deux lignes apparat sur l'afficheur LCD :
Multimtre
- Mesure de -
Deux secondes plus tard, le message dans la seconde ligne est modifi et
affiche tension prsent sur l'entre (broche RA2) de convertisseur A / D :
Multimetre
Tension:
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: MULTIMETRE_LCD.c
Date: Juillet 2012
****************************************************************************/
// Connections du module LCD
while (1)
{
adc_rd = ADC_Read(2); // Conversion A / D. Pin RA2 est une entre.
Lcd_Out(2,1,text); // Ecrire rsultat dans la deuxime ligne
tlong = (long)adc_rd * 5000;// Convertir le rsultat en millivolts
tlong = tlong / 1023; // 0 .. 1023 -> 0-5000mV
ch = tlong / 1000; /* Extrait volts (en milliers de millivolts)
partir du rsultat */
Lcd_Chr(2,9,48+ch); // Ecrire le rsultat en format ASCII
Lcd_Chr_CP('.');
ch = (tlong / 100) % 10; // Extrait des centaines de millivolts
Lcd_Chr_CP(48+ch); // Ecrire le rsultat en format ASCII
ch = (tlong / 10) % 10; // Extrait des dizaines de millivolts
Lcd_Chr_CP(48+ch); // Ecrire le rsultat en format ASCII
ch = tlong % 10; // Extrait chiffres pour millivolts
Lcd_Chr_CP(48+ch); // Ecrire le rsultat en format ASCII
Lcd_Chr_CP('V');
Delay_ms(1);
}
}
- 101 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Une des faons de simuler le fonctionnement de cette instalation consiste en lutilisation d'un
programme reprsent dans le fichier COMMUNIC_RS232.c du code-source 4.11. Cet
exemple illustre l'utilisation de la fonction Software_UART de bibliothque du compilateur
mikroC PRO.
Dans le schma de simulation donn par la figure 4.9, la visualisation de chaque octet envoy
et reu via la communication srie est affiche l'aide d'un programme standard de PROTEUS
appel VIRTUAL TERMINAL.
Code-source 4.11
/****************************************************************************
COMMUNICATION SERIE RS232
==========================
Cet exemple illustre l'utilisation de fonction Software_UART de la
bibliothque du compilateur mikroC PRO.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: COMMUNIC_RS232.c
Date: Juillet 2012
****************************************************************************/
char error, byte_read; // Variables auxiliaires
void main()
{
ANSEL = 0; // Configuration E/S en numrique
ANSELH = 0;
TRISC = 0x00; /* Configurer PORTB en sortie
(signalisation derreur)*/
PORTC = 0; // Pas derreur
byte_read = Soft_UART_Read(&error);
if (error) // Si l'erreur a t dtecte
PORTC= error; // signale error sur le PORTB
else
Soft_ UART_Write (byte_read) ; /* Si lerrur na pas t dtecte,
loctet lu en retour */
}
}
- 102 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Mesure de la temprature est l'une des tches les plus courantes effectues par le
microcontrleur. Un capteur DS1822 est utilis pour la mesure. Il est capable de mesurer la
temprature dans la plage de -55 C +125 C avec la prcision 0,5 C. Pour le but de
transfrer des donnes vers le microcontrleur, un type particulier de communication srie
appel 1-Wire (1-fil) est utilise (voire la figure ci-dessous).
- 103 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
En raison d'une utilisation simple de ces capteurs, les commandes utilises pour excuter et
contrler sont stockes sous la forme de fonctions dans la bibliothque One_Wire du
compilateur mikroC PRO. Il y a trois fonctions au total:
Code-source 4.12
/****************************************************************************
Mesure de la temprature l'aide du capteur DS1822.
L'utilisation de protocole de '1-Wire
====================================================
Un capteur DS1822 est utilis pour la mesure. Il est capable de mesurer la
temprature dans la plage de -55 C +125 C avec la prcision 0,5 C.
Pour le but de transfrer des donnes vers le microcontrleur, un type
particulier de communication srie appel 1-Wire (1-fil) est utilise
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: TEMPERATURE_One_Wire.c
Date: Juillet 2012
****************************************************************************/
// Configuration des connections d'afficheur LCD avec PIC
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
// Fin de configuration
- 104 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Lcd_Chr(2,4,'+');
if (temp_whole/100)
text[0] = temp_whole/100 + 48; // Extrait d'un chiffre des centaines
else
text[0] = '0';
text[1] = (temp_whole/10)%10 + 48; // Extrait d'un chiffre des dizaines
text[2] = temp_whole%10 + 48; // Extrait d'un chiffre des units
Lcd_Out(2,5, text);
}
void main()
{
ANSEL = 0; // Configurer E/S en numrique
ANSELH = 0;
Lcd_Init(); // Initialiser LCD
Lcd_Cmd(_LCD_CLEAR); // Effacer l'affichage sur LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Mettre invisible le curseur
Lcd_Out(1, 1, " Temperature: ");
- 105 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Ow_Reset(&PORTA, 5);
Ow_Write(&PORTA, 5, 0xCC); // Envoi de commandes SKIP_ROM
Ow_Write(&PORTA, 5, 0xBE); // Envoi de commandes READ_SCRATCHPAD
Delay_ms(400);
Display_Temperature(temp);
Delay_ms(500);
} while (1);
}
- 106 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Les signaux audio sont souvent utiliss quand il est ncessaire d'attirer votre lattention que
certains des boutons-poussoirs sont enfonc, vous avertir que les valeurs minimales ou
maximales sont atteintes, etc. Il peut tre juste un bip du signal ainsi que plus ou moins
longue mlodie. Cet exemple montre comment l'aide des fonctions appartenant la
bibliothque Sound du compilateur mikroC PRO raliser un gnrateur de sons (voire le code-
source 4.13). Le schma de simulation pour cet exemple est reprsent sur la figure 4.11.
Code_source 4.13
/****************************************************************************
Gnrateur de sons
===================
A l'aide des fonctions appartenant la bibliothque Sound du compilateur
mikroC PRO il est facile de raliser un gnrateur de sons
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: GENERAT_SONS.c
Date: Juillet 2012
****************************************************************************/
void Tone1()
{
Sound_Play(659, 250); // Son de frquence = 659Hz, dure = 250ms
}
void Tone2()
{
Sound_Play(698, 250); // Son de frquence = 698Hz, dure = 250ms
}
void Tone3()
{
Sound_Play(784, 250); // Son de frquence = 784Hz, dure = 250ms
}
void ToneA()
{
Sound_Play( 880, 100);
}
void ToneC()
{
Sound_Play(1046, 100);
}
- 107 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
void ToneE()
{
Sound_Play(1318, 100);
}
void Melody2()
{
unsigned short i;
for (i = 9; i > 0; i--)
{
ToneA(); ToneC(); ToneE();
}
}
void main()
{
ANSEL = 0; // Configurer PORTB en numrique
ANSELH = 0; // Configurer PORTE en numrique
C1ON_bit;
C2ON_bit;
Sound_Init(&PORTB, 0);
Sound_Play(1200, 600); // Son 880Hz pendant 1 seconde
while (1)
{
if (Button(&PORTB,7,1,1)) // RB7 son Tone1
Tone1();
while (RB7_bit) ; // Attendre que le bouton d'tre relch
- 108 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Un cran LCD graphique (GLCD) fournit une mthode avance pour afficher des messages
visuels. Bien que l'cran LCD de caractres ne puisse afficher que des caractres
alphanumriques, le GLCD peut afficher des messages sous la forme de dessins et de bitmaps.
L'cran GLCD le plus couramment utilis est 128x64 pixels que signifie la rsolution de
l'cran.
Sur la figure 4.12, le GLCD affiche une image de camion qui est stock dans le fichier
truck_bmp.c.
- 109 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.14
/****************************************************************************
Utilisation dafficheur LCD graphique
========================================
GLCD peut afficher des messages sous la forme de dessins et de bitmaps.
L'cran GLCD le plus couramment utilis est 128x64 pixels que signifie la
rsolution de l'cran. Ici on a reprsent poussires images : dun camion,
des lignes, des cercles, des caractres.
Microcontrleur: 16F887
Oscillateur : HS, 10.0000 Mhz
Fichier: IMAGE_GLCD.c
Date: Juillet 2012
****************************************************************************/
// Declarations
const code char truck_bmp[1024];
// Connections dafficheur Glcd
char GLCD_DataPort at PORTD;
- 110 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
// Fin de connections
void delay2S()
{ // 2 secondes de temporisation
Delay_ms(2000);
}
void main()
{
unsigned short ii;
char *someText;
#define COMPLETE_EXAMPLE
ANSEL = 0; // Configurer E/S en numrique
ANSELH = 0;
C1ON_bit = 0; // Dsactiver les comparateurs
C2ON_bit = 0;
Glcd_Init(); // Initialiser GLCD
Glcd_Fill(0x00); // Effacer lcran de GLCD
while(1)
{
#ifdef COMPLETE_EXAMPLE
Glcd_Image(truck_bmp); // Afficher l'image dune camion
delay2S(); delay2S();
#endif
Glcd_Fill(0x00); // Effacer lcran de GLCD
Glcd_Box(62,40,124,56,1); // Tracer une bote
Glcd_Rectangle(5,5,84,35,1); // Tracer un rectangle
Glcd_Line(0, 0, 127, 63, 1); // Tracer une line
delay2S();
for(ii = 5; ii < 60; ii+=5 ) /* Tracer les lignes horizontales
et verticales
{
Delay_ms(250);
Glcd_V_Line(2, 54, ii, 1);
Glcd_H_Line(2, 120, ii, 1);
}
delay2S();
Glcd_Fill(0x00); // Effacer lcran de GLCD
#ifdef COMPLETE_EXAMPLE
#ifdef COMPLETE_EXAMPLE
Glcd_Fill(0xFF); // Remplir GLCD
Glcd_Set_Font(Character8x7, 8, 7, 32); // Changer des caractres
- 111 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
// ------------------------------------------------------
// GLCD Picture name: truck.bmp
// GLCD Model: KS0108 128x64
// ------------------------------------------------------
- 112 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
255,255,255,255,255,255,255,127,127,127,127,127,127,127,127,255,
255,255,127,127,125,120,120120,120,120,248,120,120,120,120,120,
120,248,248,232,143, 0, 0, 0, 0, 0, 0, 0, 0,128,240,248,
120,188,220, 92,252, 28, 28, 60, 92, 92, 60,120,248,248, 96,192,
143,168,216,136, 49, 68, 72, 50,160, 96, 0, 0, 0, 0, 0, 0,
0, 0, 0,128,192,248,248,248,248,252,254,254,254,254,254,254,
254,254,254,254,254,255,255,255,255,255,246,239,208,246,174,173,
169,128,209,208,224,247,249,255,255,252,220,240,127,255,223,255,
255,255,255,255,255,254,254,255,255,255,255,255,255,255,254,255,
255,255,255,255,255,255,254,254,254,254,254,254,254,254,254,254,
254,254,254,254,255,255,255,255,255,255,254,255,190,255,255,253,
240,239,221,223,254,168,136,170,196,208,228,230,248,127,126,156,
223,226,242,242,242,242,242,177, 32, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 7, 7, 7, 7, 7, 15,
15, 15, 7, 15, 15, 15, 7, 7, 15, 14, 15, 13, 15, 47, 43, 43,
43, 43, 43, 47,111,239,255,253,253,255,254,255,255,255,255,255,
191,191,239,239,239,191,255,191,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,127,127,127,127,255,255,191,191,191,191,255,254,
255,253,255,255,255,251,255,255,255,127,125, 63, 31, 31, 31, 31,
31, 31, 63, 15, 15, 7, 7, 3, 3, 3, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 1, 1, 3, 3, 3, 11, 11, 11, 11, 7, 3, 14, 6, 6,
6, 2, 18, 19, 19, 3, 23, 21, 21, 17, 1, 19, 19, 3, 6, 6,
14, 15, 15, 7, 15, 15, 15, 11, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
Avant de compiler le fichier IMAGE_GLCD.c il est ncessaire de cocher les fonctions Glcd dans
le gestionnaire de bibliothque du compilateur mikroC PRO.
Pour inclure le fichier truck_bmp.c dans le projet, il faut procder les tapes de 1 8 dans le
compilateur mikroC PRO comme cest montr ci-dessous.
1
2 3
- 113 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
33
4 5 6 7
8
GLCD Picture name: truck.bmp
Le projet est une calculatrice simple qui peut effectuer des oprations arithmtiques entires.
Les touches sont organises comme suit :
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Les touches sont tiquetes comme suit :
1 2 3 4
5 6 7 8
9 0 ; Entrer
+ - * /
Les oprations et rsultats de calcule doivent tre affichs sur lcran de LCD.
Le fichier pour cet exemple appel CALCUL_LCD.c est prsent dans le code-source 4.15.
- 114 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.15
/****************************************************************************
Calculatrice avec CLAVIER et LCD
================================
Le projet est une calculatrice simple qui peut effectuer des oprations
arithmtiques entires.
Les touches sont organises comme suit :
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Les touches sont tiquetes comme suit :
1 2 3 4
5 6 7 8
9 0 ; Entrer
+ - * /
Les oprations et rsultats de calcule sont affichs sur lcran de LCD
Microcontrleur: 18F452
Oscillateur : HS, 10.0000 Mhz
Fichier: CALCUL_LCD.c
Date: Septembre 2012
********************************************************************/
#define MASK 0xF0
#define Enter 11
#define Plus 12
#define Minus 13
#define Multiply 14
#define Divide 15
//
// Cette fonction obtient une touche du clavier
//
- 116 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Res="); // Afficher Res=
switch(MyKey) // Effectuer l'opration
{
case Plus:
Calc = Op1 + Op2; // Si Plus
break;
case Minus:
Calc = Op1 - Op2; // Si Minus
break;
case Multiply:
Calc = Op1 * Op2; // Si Multiply
break;
case Divide:
Calc = Op1 / Op2; // Si Divide
break;
}
LongToStr(Calc, op); // Convertir en chaine dans op
//
// Supprimer les espaces gauche
//
j=0;
for(i=0;i<=11;i++)
{
if(op[i] != ' ') // Si un blanc
{
lcd[j]=op[i];
j++;
}
}
Lcd_Out_CP(lcd); // Afficher le rsultat
Delay_ms(5000); // Temporisation de 5 secondes
Lcd_Cmd(_LCD_CLEAR);
}
}
- 117 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Dans cet exemple, le PC est connect au microcontrleur via un cble RS232. Le projet cest
une simple calculatrice o les donnes sont envoyes au microcontrleur en utilisant le clavier
de l'ordinateur et ensuite ils sont affichs sur monitor de PC.
Lexemple de calcul :
CALCULATRICE PROGRAMME
Entrer Premier Nombre : 12
Entrer Deuxime nombre : 2
Entrer Opration : +
Rsultat : 14
- 118 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
Code-source 4.16
/***************************************************************************
CALCULATRICE AVEC LINTERFACE RS232
===================================
Le projet est une simple calculatrice. L'utilisateur saisit les donnes l'aide
du clavier du PC. Les rsultats sont affichs sur l'cran du PC.
Les oprations suivantes peuvent tre effectues:
+,-,*,/.
Dans ce programme, la communication srie est traite par le logiciel
Soft_UART et le port srie est configur pour fonctionner avec 9600 Baud.
Broches du port RC6 et RC7 sont utiliss pour srie TX et RX respectivement.
Microcontrleur: 18F452
Oscillateur : HS, 10.0000 Mhz
Fichier: CALCUL_RS232.c
Date: Septembre 2012
***************************************************************************/
#define Enter 13
#define Plus '+'
#define Minus '.'
#define Multiply '.'
#define Divide '/'
void Newline()
{
Soft_UART_Write(0x0D); // Envoyer retour chariot
Soft_UART_Write(0x0A); // Envoyer saut de ligne
}
void main()
{
unsigned char MyKey, i,j,error,kbd[5],op[12];
unsigned long Calc, Op1, Op2,Key;
unsigned char msg1[] = " CALCULATRICE PROGRAMME";
unsigned char msg2[] = " Entrer Premier Nombre : ";
unsigned char msg3[] = " Entrer Deuxieme Nombre : ";
unsigned char msg4[] = " Enter Operation : ";
unsigned char msg5[] = " Resultat = ";
- 119 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
// Program loop
for(;;) // Boucle sans fin
{
MyKey = 0;
Op1 = 0;
Op2 = 0;
Newline(); // Envoyer saut de ligne
Newline(); // Envoyer saut de ligne
Text_To_Usart(msg1); // Envoyer TEXT
Newline(); // Envoyer saut de ligne
Newline(); // Envoyer saut de ligne
// Pour premier nombre
Text_To_Usart(msg2); // Envoyer message 2
do // Obtenir le premier numro
{
do // Si un nombre est tap
MyKey = Soft_UART_Read(&error); // Envoyer ce nombre
while (error);
if(MyKey == Enter)break; // Si le clavier ENTER est press
Soft_UART_Write(MyKey); // Sauter nouvelle ligne
Key = MyKey - '0';
Op1 = 10*Op1 + Key; // Premier nombre de Op1
} while(1);
Newline();
// Pour deuxime nombre
Text_To_Usart(msg3); // Envoyer message 3
do // Obtenir le deuxime nombre
{
do
MyKey = Soft_UART_Read(&error); // Envoyer le deuxime nombre
while(error);
if(MyKey == Enter) break; // Si le clavier ENTER est press
Soft_UART_Write(MyKey); // Sauter nouvelle ligne
Key = MyKey - '0';
Op2 = 10*Op2 + Key; // Deuxime nombre de Op2
} while(1);
Newline();
// Pour opration
Text_To_Usart(msg4);
do
{
do
MyKey = Soft_UART_Read(&error);
while(error);
if(MyKey == Enter)break;
Soft_UART_Write(MyKey);
Key = MyKey;
} while(1);
Newline();
switch(Key) // Calcule
{
case Plus:
Calc = Op1 + Op2; // Si Addition
break;
case Minus:
Calc = Op1 - Op2; // Si Soustraction
break;
case Multiply:
- 120 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
- 121 -
V.TOURTCHINE. Programmation en mikroC. Application pour les microcontrleurs de la
famille PIC
- 122 -