Académique Documents
Professionnel Documents
Culture Documents
Tunis
Programmateur Compilateur C
3
I/ Chaine de compilation C
#include Bibliothèques pré compilées
<stdio.h> (fichiers objet)
Bibliothèques Fichiers
en C (texte) header
main() *.c *.h
{ puts(" Bonjour
à tous ");
}
Éditeur de lien
Préprocesseur Compilateur C LINKER
remplace les Transforme le fichier C en un Lie (donne des adresses
#define et effectue fichier objet (code machine), aux fonctions) tous les
les #include les fonctions pré compilées fichiers objets et crée un
Fichier sont déclarées dans les fichiers fichier exécutable
source C *.h
contenant la
fonction
main
FLUX DE DONNEES D’UN
Fichier de Programme
COMPILATEUR C symboles exécutable
pour debug *.hex
4
I/ Chaine de compilation C
Code chargé
par un
équipement
programmateur
Code chargé
par le
Bootloader
6
II/ Syntaxe du langage C
/*exemple typique d’un programme C Commentaire
Cours Microprocesseur-API*/
# : Instructions de préprocesseurs
#include <PIC16f84.h>
#include "mylcd.h"
Insertion d’un fichier
#fuses XT,NOWDT,NOPROTECT,NOLVP #include < nom.ext > défini dans options
#use delay(clock=4000000) #include " nom.ext " dans dossier local
Remarque:
un nombre entier en hexadécimal est précédé de 0x ou 0X, (0x1FB9)
un nombre entier en décimal n’a pas besoin de préfixe
Constantes
• Elles sont rangées dans la ROM et ne sont donc pas modifiables.
• const int i=16569, char c=0x4c ;
• const float pi=3.14;
Le mot réservé « const » définit une constante
9
III/ Variables & Constantes
VARIABLES LOCALES ET GLOBALES
Les variables sont stockées en RAM afin d’être modifiables au cours du
programme. Elles peuvent être à une adresse fixe (static) ou dans une pile
(volatile).
10
III/ Variables & Constantes
Les types de données propres à PICC
Par défaut, les types entiers (int, char) de base sont non signés!
Ils peuvent être précédés de signed pour forcer le type signé.
11
III/ Variables & Constantes
Le type tableau
• Un tableau permet de regrouper des variables ou des constantes de même type.
• Ces variables ou constantes sont appelées éléments du tableau.
• Un tableau doit être déclaré avant son utilisation.
a = 3;
Soustraction - c = a - 2; // c = 1
a = 3;
Multiplication * b = 11;
c = a * b; // c = 33
a = 75;
Division / b = 3;
c = a / b; // c = 25
a = 75;
Modulo % diz = a / 10; // diz = 7
Reste de la division
unite = a % 10 // unite = 5 c ’est à dire le reste
13
IV/ Les opérateurs
Les opérateurs logiques
ET bit à bit a = 0b11001100;
| c = a | 0b00111100; // c = 0b11111100
a = 0x03;
Complément ~ c = ~ a; // c = 0xFC
a = 0b11001100;
OU exclusif ^ b = 0b10100010;
c = a ^ b; // c = 0b01101110
Autres opérateurs
a = 55;
Incrément ++ Décrément -- a = 20;
a++; // a = 56 a--; // a = 19 14
V/ Les Structures Conditionnelles
if…else
Action1 et action2 sont une if( a > b ) c = c - a;
seule instruction else c = c- b;
Fausse
Condition Action1 et action2 sont un bloc if( a > b )
? d’instructions
{ c = c - a;
d = c - a;
Vraie }
else { c = c - b;
Action 1 Action 2
d = c - b;
}
Différent != if( a != b )
NON ! if( !( a == b) )
ce test est :
• vrai si a > 0
17
• faux si a = 0
VI/ Les Structures Itératives
Boucle for
Initialisation for ( initialisation ; condition ; modification )
{
action;
Condition …;
?
}
Sortie de
la boucle
Version 1 Version 2
Action
for( x = 0 ; x < 5 ; x++ ) for( x = 5 ; x > 0 ; x-- )
{ {
Modification
action; action;
} }
18
VI/ Les Structures Itératives
Boucle while Cette boucle est identique à une boucle FOR
while (condition)
x = 0;
{ while ( x < 5 )
action; {
…; action;
x++;
Condition }
? }
Sortie de x = 10;
la boucle
Dans cette boucle action ne while ( x < 5 )
sera jamais exécutée car la {
Action condition est déjà fausse lors
action;
de la première entrée.
x++;
}
Tant que condition vraie faire...
while ( bouton == 0 )
Soit un bouton poussoir qui donne 0 si il est appuyé.
Ici on fait l’action tant que le poussoir est maintenu {
appuyé. action;
while ( 1 ) On sort de la boucle quand le bouton n’est plus appuyé.
}
{
action; while(1) est une boucle qui permet d’exécuter indéfiniment un bloc d’instructions.
Cette boucle est volontairement rendue infinie en testant une condition toujours vrai : 1
……; étant > 0 donc vrai . . .
} On trouve très souvent une boucle while(1) dans la fonction main().
19
VI/ Les Structures Itératives
Boucle do…while
do Action est toujours exécutée au moins une fois
Action que condition soit vraie ou fausse.
{
action;
…;
Condition
? }
while (condition);
20
VI/ Les Structures Itératives
Les contrôles de boucles
• break permet de sortir de la boucle en cours (for, while, do while, switch)
• continue permet de sauter directement à l’itération suivante d’une
boucle
for(i=0 ;i<100 ;i++)
{
if (i<50)
continue;
else a=a+i;
}
• exit permet de quitter directement le programme (inutile sur micro
contrôleur)
21
VII/ Les Sous Programmes : Fonctions
Appel de fonction void buzzer (void)
{
prog 3 ….
…..
}
Initialisation 7
des ports
void init_port (void)
{
Led1 éteinte ….
4 …..
buzzer();
…..
BP }
activé ?
1 2
void main (void)
{
Led1 éteinte Led1 allumée init_port();
5
led1 = 0;
Gestion du while(1)
buzzer {
if(bp == 0)
{
led1 = 1; 6
buzzer();
}
else led1 = 0;
}
}
22
VII/ Les Sous Programmes : Fonctions
Passage de paramètres
Fonction avec passage de Fonction avec passage de Fonction sans
paramètres par valeur paramètre par adresse paramètres
qui retourne une valeur
Int somme (int a, int b) Void somme (int a, int b, int *s) Int a,b,s;
{ { Void somme ()
int s; *s = a+b; {
s = a+b; } s = a+b;
return (s); }
}
23