Vous êtes sur la page 1sur 7

COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 1 / 7

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP IV. Structure dun programme en C


/* Tout ce qui se trouve entre ces symboles
I. Historique du langage C est du commentaire */
// Ce qui est droite de ces symboles est galement du commentaire
1972 : naissance du C dans les laboratoires BELL par Dennis Ritchie et dveloppement du
systme d'exploitation UNIX. void main() // Un programme en C comporte au moins une fonction
// principale appele main.
// Nous verrons plus loin le terme void.
1978 : vulgarisation du langage et sortie du livre de B. Kernighan et D. Ritchie "The C
programming language". { // Les accolades dfinissent lintrieur de la
// fonction.
1983 : normalisation A.N.S.I du langage C. Ce travail commence en 83 et dure 5 ans. fonction_1() ; // Les espaces doivent tre remplacs par _
fonction_2() ; // Les fonctions sont spare par un ;
1988 : existence d'une norme : " C-ANSI ". La 2me dition du livre de Kernighan et Ritchie
devient la rfrence. fonction_n() ; // Attention la casse car le C fait la diffrence
// entre minuscules et majuscules.
} // On aligne les accolades et on dcale le corps de la
II. Les qualits du langage C // fonction par souci de lisibilit.

Le langage C est : Le programme doit galement contenir la dfinition des diffrentes fonctions cres par le
PORTABLE : Les modifications d'un programme pour passer dun systme un autre sont programmeur (voir IX. Les Fonctions). Les fonctions doivent tre dfinies (au moins leur prototype)
minimes. avant dtre appeles par une autre fonction.
COMPLET : Un texte C peut contenir des squences de bas niveau (proches du matriel) en Le langage C comporte des bibliothques de fonctions prdfinies sous forme de fichiers comportant
assembleur. lextension .h. Ces fonctions seront ajoutes au programme excutable lors de ldition de liens. Pour
incorporer dans un programme un fichier .h, on utilise la commande #include <fichier.h> place
SOUPLE : Tout est possible en C mais une grande rigueur simpose. habituellement en dbut de fichier. Exemples :
EFFICACE : On rflchit (devant une feuille de papier) et on crit (peu).
#include <delay.h> // delay.h contient des fonctions ralisant des
// temporisations logiciels.
III. Notion de filire de dveloppement #include <pic16f6x.h> // Grce ce fichier .h, le compilateur connat
// ladresse de chaque registre et port
On dsigne ainsi lensemble des outils qui interviennent entre le texte source C et le code objet // Ex : PORTB correspond ladresse 06, etc.
tlcharg dans le microcontrleur PIC.
Les tapes de gnration dun programme crit en langage C sont : V. Composition dun programme en C

Ldition du fichier source mon_programme.C avec Code source : mon_programme.C Un programme en C utilise 2 zones mmoire principales :
un diteur de texte (simple sans mise en forme du La zone des VARIABLES est un bloc RAM o sont stockes des donnes manipules par le
texte). Compilateur programme.
La compilation du fichier source pour obtenir un La zone des FONCTIONS et CONSTANTES est un bloc ROM qui recevra le code excutable
fichier objet : mon_programme.ASM. La compilation du programme.
est la transformation des instructions C en instructions Code objet : mon_programme.ASM
Avant dutiliser une variable, une fonction ou une constante, il faut la dclarer afin dinformer le
assembleur pour microcontrleur PIC. compilateur de son existence.
Ldition de liens permet dintgrer des fonctions diteur de liens Leur nom que l'on utilise est un identificateur. Leur criture doit :
prdfinies. Le programme auxiliaire diteur de liens Utiliser les lettres de l'alphabet, de a z, et de A Z, les chiffres de 0 9 (sauf pour le premier
(linker ou binder) gnre partir du fichier caractre), le soulign ( _ ).
Programme excutable : mon_programme.HEX
mon_programme.ASM un fichier excutable
mon_programme.HEX compatible avec le PIC. Ne contenir ni espace, ni caractre accentu.
Lancement du programme
tre reprsentative de leur rle dans le programme.
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 2 / 7

VI. Les diffrents types de valeur du langage C B. Les oprateurs arithmtiques

Toutes les valeurs (constantes et variables) utilise en C sont classes selon des types. Un type dcide + Exemple : a = 5 ; b = 4 ; x = a+b ; // rend la somme de a et b.
de loccupation mmoire de la donne. Pour dclarer correctement une variable ou une constante, il // x vaut 9
faut donc savoir auparavant ce quelle va contenir. On distingue les types suivants :
- Exemple : a = 5 ; b = 4 ; x = a-b ; // rend la soustraction de a et b.
// x vaut 1
char a ; // Dclare un entier sign 8 bits [-128 +127 ]
* Exemple : a = 5 ; b = 4 ; x = a*b ; // rend la multiplication de a et b.
unsigned char b ; // Dclare un caractre non sign 8 bits [0 255] // x vaut 20
int c ; // Dclare un entier sign 16 bits [-32768 +32767 ] / Exemple : a = 10 ; b = 3 ; x = a/b ; // rend le quotient de la division
// entire de a et b.
unsigned int d ; // Dclare un entier non sign 16 bits [0 65535] // x vaut 3
long e ; // Dclare un entier sign 32 bits % Exemple : a = 10 ; b = 3 ; x = a%b ; // rend le reste de la division
// [-2147483648 +2147483647] // entire de a et b.
// x vaut 1
unsigned long f ; // Dclare un entier non sign 32 bits // % se prononce modulo
// [0 4292967295]
C. Les oprateurs de manipulation de bits
float g; // Dclare un rel sign 32 bits dont la valeur
// absolue est comprise entre 3,4.10-38 et 3,4.10+38
~ Exemple : a = 0b0110 ; x = ~a ; // rend le complment de a.
// x vaut 0b1001
double h; // Dclare un rel sign 64 bits dont la valeur
// absolue est comprise entre 1,7.10-308 et 1,7.10+308
& Exemple : a = 2 ; b = 3 ; x = a&b ; // rend le ET bit bit de a et b.
// x vaut 0b10
long double i; // Dclare un rel sign 80 bits dont la valeur
// absolue est comprise entre 3,4.10-4932 et 3,4.10+4932
| Exemple : a = 2 ; b = 5 ; x = a|b ; // rend le OU bit bit de a et b.
// x vaut 0b111
VII. Reprsentation des diffrentes bases et du code ASCII
^ Exemple : a = 2 ; b = 7 ; x = a^b ; // rend le OU EXCLUSIF bit
int a = 4 ; // Un nombre seul reprsente un nombre dcimal. // bit de a et b.
// x vaut 0b101
int b = 0b1010 ; // Un nombre prcd de 0b est un nombre binaire.
>> Exemple : a = 2 ; b = 1 ; x = a>>b ; // rend la valeur de a dcale
int p = 0x00FF ; // Un nombre prcd de 0x est un nombre hexadcimal. // droite de b bits.
// x vaut 0b01
char c = x ; // Un caractre entre reprsente son code ASCII. << Exemple : a = 2 ; b = 3 ; x = a<<b ; // rend la valeur de a dcale
// gauche de b bits.
// x vaut 0b10000
VIII. Les oprateurs
D. Les oprateurs de test
A. Loprateur daffectation
Remarque : En C, FAUX est la valeur 0, VRAI est tout ce qui est 0.
Cet oprateur a dj t utilis dans les exemples prcdents. Il permet, entre autres, dinitialiser une
variable. > Exemple : a = 6 ; x = a>4 ; // rend VRAI si a est suprieur
// 4. FAUX sinon.
= Exemple : a = 5 ; // Range 5 dans a. // x vaut VRAI
PORTB = 0 ; // le PORTB est mis 0
>= Exemple : a = 2 ; x = a>= 2 ; // rend VRAI si a est suprieur ou
Attention : Le transfert de la valeur va toujours de la droite vers la gauche du signe gal. // gal 2. FAUX sinon.
// x vaut VRAI
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 3 / 7

< Exemple : a = 6 ; x = a<3 ; // rend VRAI si a est infrieur Exemple :


// 3. FAUX sinon.
// x vaut FAUX
Programme en C appelant des fonctions prdfinies et des fonctions crites par le programmeur.
<= Exemple : a = 3 ; x = a<= 6 ; // rend VRAI si a est infrieur ou
// gal 6. FAUX sinon. #include <pic16f6x.h> // Fichier de dfinition des adresses des registres
// x vaut VRAI // des PIC de la famille 16F6x
#include <pic.h> // Fichier de fonctions prdfinies
== Exemple : a = 6 ; x = a == 5 ; // rend VRAI si a est gal 5. #include <delay.h> // Fichier de fonctions prdfinies pour
// FAUX sinon. // temporisations logiciels
// x vaut FAUX // Note prof : <delay.h> le fichier se trouve dans le
// rpertoire des fichiers dentte du compilateur
!= Exemple : a = 4 ; x = a != 2 ; // rend VRAI si a est diffrent // "delay.h" le fichier se trouve dans le mme
// de 2. FAUX sinon. // rpertoire que le fichier source
// x vaut VRAI
// Directives dassemblage
&& Exemple : a = 9 ; b = 1 ; // ET LOGIQUE : rend VRAI si les
x = (a == 9) && (b != 8); // deux tests sont VRAI. __CONFIG(MCLRDIS & LVPDIS & PWRTEN & BORDIS & \ // le \ permet le
// FAUX sinon. UNPROTECT & DATUNPROT & WDTDIS & XT); // passage la ligne
// x vaut VRAI

|| Exemple : a = 6 ; b = 3 ; // OU LOGIQUE : rend VRAI si au // Dfinitions des fonctions crite par le programmeur
x = (a == 5) || (b != 3); // moins un des deux tests
// est VRAI. FAUX sinon. void PORTB_en_sortie(void)
// x vaut FAUX {
TRISB=0; // PORTB en sortie
! Exemple : a = 1 ; x = !a ; // NEGATION LOGIQUE : rend VRAI si }
// a est FAUX. FAUX sinon.
y = !(a == 5) ; // x vaut FAUX et y vaut VRAI void Allumer_LED_PORTB(void)
{
PORTB=0xFF; // RB0 RB7 mis 1
Remarque : }
Les oprateurs ont une priorit. Cette priorit nest pas forcment celle des mathmatiques et varie
dun langage informatique un autre. Il vaut donc mieux utiliser les parenthses pour viter tous void Eteindre_LED_PORTB(void)
problmes. {
PORTB=0x00; // RB0 RB7 mis 0
}
IX. Les Fonctions
// Fonction principale
A. Prsentation
void main(void)
Un programme en C est un ensemble de fonctions : {
PORTB_en_sortie(); // fonction crite par le programmeur
La fonction principale main qui est la premire fonction appele lors de lexcution du while(VRAI) // Rpter toujours
programme. // voir La structure alternative ou slection page 5
{
Allumer_LED_PORTB(); // fonction crite par le programmeur
Les fonctions crites par le programmeur qui doivent tre dclares avant leur appel.
DelayMs(250) ; // fonction prdfinie
// Note prof : Le fichier delay.c doit tre
Fonctions prdfinies issues des bibliothques standards du compilateur (dont le code nest // ajout au projet MPLAB en plus du delay.h
pas crit par le programmeur mais insr dans le programme par lditeur de liens grce au Eteindre_LED_PORTB() ; // fonction crite par le programmeur
fichier.h). DelayMs(250) ; // fonction prdfinie
}
Pour quun programme soit structur, chaque fonction doit effectuer une tche bien spcifique. }
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 4 / 7

B. Syntaxe dcriture dune fonction C. Appel de fonction avec passage de paramtres par valeur

<type de la valeur de retour> nom_fonction(<liste des paramtres reus par la fonction>) La valeur du paramtre pass est recopie dans une variable locale la fonction appele. Une
{ modification de cette variable na aucun effet sur la variable la fonction appelante.

dfinition des variables locales ; Exemple de fonction main appelant Ma_fonction_somme :

instructions ; void main()


{
int a,x,y,z ; // dclaration de quatre entiers a, x, y et z;
} x = 1 ; // initialisation des variables locales
y = 2 ;
Remarques : a = 5 ;

La liste des paramtres reus peut-tre vide. z = Ma_fonction_somme(x,y) ; // z vaut la somme de x et de y.


La valeur de retour peut tre de nimporte quel type : }
int, float
void si la fonction ne retourne pas de valeur,
Une variable dfinie dans une fonction nexiste que dans celle-ci (variable locale). Dans la fonction main, la variable locale a vaut 5.

Exemple de fonction dont la liste des paramtres reus est vide et ne retournant pas de valeur : Dans la fonction Ma_fonction_somme, la variable locale a vaut 1 et la variable locale b vaut 2.

Aprs appel de la fonction Ma_fonction_somme, la variable a de la fonction main vaut toujours 5.


La fonction ne La liste des
retourne pas de paramtres reus Bien sr, z vaut 3.
valeur est vide

void Allumer_LED_PORTB(void) X. Les variables Globales (Permanentes) et Locales (Temporaires)


{
PORTB=0xFF; // RB0 RB7 mis 1
Une variable globale (ou permanente) est dclare en en-tte du programme. Elle est valide pendant
}
toute la dure d'excution du programme car elle fait l'objet d'une rservation mmoire permanente en
Exemple de fonction recevant 2 entiers et retournant la somme de ces derniers : RAM. Elle peut tre utilise et modifie par toutes les fonctions du programme.

Une variable locale (ou temporaire) est dclare lintrieur dune fonction. Son existence est
La fonction retourne La fonction reoit limite la dure dexcution de cette fonction. Elle est donc ignore par les autres fonctions. Elle peut
une valeur de type deux paramtres de (bien que cette faon de procder soit dconseille), porter le mme nom qu'une variable globale ou
entier type entier qu'une autre variable locale se trouvant dans une autre fonction.
Par dfaut, une variable locale est range en pile LIFO mais elle peut tre range en RAM une
int Ma_fonction_somme(int a, int b) adresse fixe (statique). Elle nen demeure pas moins visible qu lintrieur de la fonction o elle a t
{ dclare.
int resultat ; // dclaration dune variable locale appele
// resultat Attention : la pile et la mmoire RAM des PIC sont trs limites.
resultat = a+b ; // Les variables a et b ont t dclares et Exemple :
// initialises lors de lappel de la fonction

return resultat ; // linstruction return permet de retourner Void fonction_exemple()


{
// une valeur la fonction appelante.
int a=12 ; // variable locale a en pile.
}
static char b ; // variable locale b en RAM une adresse fixe.
}
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 5 / 7

XI. Algorithme C. Structures algorithmiques fondamentales


A. Dfinition Les oprations relatives la rsolution dun problme peuvent en fonction de leur enchanement, tre
organises selon trois familles de structures :
Un algorithme est un ensemble de rgles opratoires rigoureuses, ordonnant un processeur dexcuter Structures linaires,
dans un ordre dtermin une succession doprations lmentaires, pour rsoudre un problme donn. Structures alternatives,
Cest un outil mthodologique gnral qui ne doit pas tre confondu avec le programme proprement Structures rptitives.
dit.
Un algorithme peut tre : 1. La structure linaire ou squence
Reprsent graphiquement par un organigramme (ou ordinogramme).
crit sous forme littrale avec un langage algorithmique. La structure linaire se caractrise par une suite dactions excuter successivement dans lordre de
leur nonc.

B. Organigramme Organigramme Langage algorithmique Exemple en langage C


Lorganigramme est une reprsentation graphique normalise utilise pour analyser ou dcoder un
problme. Il utilise des symboles reprsentant des traitements, des liaisons, des donnes Dbut

Un organigramme bien reprsent doit tre flch et ferm, compris entre un dbut et une fin. Dbut algorithme : void main( )
Opration 1 {
FAIRE opration 1 fonction_1( ) ;
Opration 2
FAIRE opration 2 fonction_2( ) ;
SYMBOLE DSIGNATION FAIRE opration 3 fonction_3( ) ;
}
Opration 3
Fin algorithme.
Traitement
Opration ou groupe dopration sur des donnes, instructions, etc. Fin

Sous-programme 2. La structure alternative ou slection


Portion de programme considre comme une simple opration.
La structure alternative noffre que deux issues possibles sexcluant mutuellement. Les structures
Entre-Sortie alternatives dfinissent une fonction de choix ou de slection entre lexcution de lun ou de lautre
Mise disposition dune information traiter ou enregistrement dune des deux traitements. galement dsignes par structures conditionnelles, elles sont reprsentatives
information traite. de saut ou rupture de squence.

FAUX Embranchement a) La structure alternative complte


Test, exploitation de conditions variables impliquant le choix dune
VRAI parmi deux. Symbole utilis pour reprsenter une dcision. Organigramme Langage algorithmique Exemple en langage C

Dbut, fin ou interruption


Dbut, fin ou interruption dun organigramme FAUX VRAI SI condition VRAIE if( condition = = VRAI )
Condition
{
Sens conventionnel des liaisons. Le sens gnral de liaison doit tre : ALORS action 1 fonction_1( ) ;
De haut en bas, }
Action 2 Action 1
De gauche droite. SINON action 2 else
{
FIN SI fonction_2( ) ;
}
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 6 / 7

b) La structure alternative rduite b) Tant que Faire

Dans cette structure on commence par tester la condition, si elle est vraie alors le traitement est
Organigramme Langage algorithmique Exemple en langage C excut.

Organigramme Langage algorithmique Exemple en langage C

FAUX VRAI SI condition VRAIE if( condition = = VRAI )


Condition
{
ALORS action fonction( ) ;
} FAUX
Condition TANT QUE condition VRAIE while( condition = = VRAI )
Action
FIN SI {
VRAI FAIRE action fonction( ) ;
Action }
FIN TANT QUE

3. Les structures rptitives 4. La structure rptition contrle

Une structure rptitive ou itrative rpte lexcution dun traitement. Dans cette structure la sortie de la boucle ditration seffectue lorsque le nombre souhait de rptition
est atteint.
Do lemploi dune variable de boucle (indice I) caractrise par :
a) Faire Tant que Sa valeur initiale.
Sa valeur finale.
Dans cette structure, le traitement est excut une premire fois puis sa rptition se poursuit jusqu ce Son pas de variation.
que la condition soit vrifie.

Organigramme Langage algorithmique Exemple en langage C


Organigramme Langage algorithmique Exemple en langage C

for( I = Vi ; I > 0 ; I = I 1 )
I = Vi
{
fonction( ) ;
FAIRE do POUR I = Vi I = 0 et par pas de 1 }
Action FAUX
{ I>0?
action fonction( ) ; FAIRE action quivalent :
FAUX } VRAI
Condition TANT QUE condition VRAIE while(condition = = VRAI) ; Action FIN POUR I=Vi;
VRAI
while(I>0)
{
I=I-1 fonction( );
I=I-1;
}
Remarque : En C, la squence est excute tant que la condition est vraie.
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC (CORRECTION) dure 3 heures environ page 7 / 7

XII. Les masques C. Un masque pour faire basculer ltat dun bit

Les masques sont utiliss en informatique pour tester ltat dun ou plusieurs bits dun mot binaire. Ils Soit ltat du PORTB = 0b100X0111. On veut faire basculer ltat de RB4 sans modifier les autres
permettent galement de forcer un ou plusieurs bits un tat dsir (0 ou 1). On utilise, pour effectuer bits.
des masques, les proprits de la logique de Boole savoir : llment absorbant et llment neutre du
OU, du ET et du OU EXCLUSIF.
PORTB : 1 0 0 X0 1 1 1 quivalent en C :
A. Un masque pour forcer un bit 1
Masque : + 0 0 0 1 0 0 0 0
Soit ltat du PORTB = 0b10010111. On veut forcer le bit 3 1 sans modifier les autres bits. PORTB = PORTB ^ 0b00010000 ;
_
Proprit utilise : lment absorbant et lment neutre du OU logique. Rsultat :
1 0 0 X 0 1 1 1

PORTB : 1 0 0 1 0 1 1 1 quivalent en C : quivalent : RB4 = !RB4 ;


D. Un masque pour tester ltat dun bit
Masque : + 0 0 0 0 1 0 0 0
PORTB = PORTB | 0b00001000 ;
Rappel : En C, FAUX est la valeur 0, VRAI est tout ce qui est 0.
Rsultat : 0 0 0 0 1 0 0 0
On veut tester ltat du bit 5 du PORTB. Si RB5 = 1 alors on appelle la fonction action_1(), sinon, on
appelle la fonction action_2() ;

B. Un masque pour forcer un bit 0 Il y a deux solutions :

Soit ltat du PORTB = 0b10010111. On veut forcer le bit 1 0 sans modifier les autres bits. Masque en ET : Masque en OU :

Proprit utilise : lment absorbant et lment neutre du ET logique.


if(PORTB & 0b00100000) if(PORTB | 0b11011111 == 0xFF)
{ {
PORTB : 1 0 0 1 0 1 1 1 quivalent en C : action_1() ; // alors RB5 = 1 action_1() ; // alors RB5 = 1
} }
Masque : . 1 1 1 1 1 1 0 1 else else
PORTB = PORTB & 0b11111101 ; { {
action_2() ; // sinon RB5 = 0 action_2() ; // sinon RB5 = 0
Rsultat : 1 0 0 1 1 1 0 1 } }

Remarque : Le fichier pic16f6x.h contient la dfinition de chaque bit des registres et ports de notre Remarque : grce au contenu du fichier pic16f6x.h, on peut galement crire :
PIC. Ceci permet de les forcer directement sans passer par les masques :
if(RB5)
{
Pour forcer le bit 3 du PORTB 1 : RB3=1 ; action_1() ; // alors RB5 = 1
}
Pour forcer le bit 1 du PORTB 0 : RB1=0 ; else
{
Il faut prendre connaissance de la syntaxe et de la casse des registres, des ports et des bits en ditant le action_2() ; // sinon RB5 = 0
}
fichier pic16f6x.h. Les masques reste trs utile pour la manipulation des bits non dfinis dans ce fichier