Professional Documents
Culture Documents
pour
microcontrleurs PIC
Langage C
Ecriture
du
logiciel
Ecriture du source
Compilation
Erreurs ?
oui
non
Test
Debug du programme
du logiciel
sur le
matriel
Fonctionnement
OK ?
oui
Programmation
de la carte
Fin du projet
non
Programme source en C
Commentaire
/* bla bla
bla bla */
// bla bla
Dfinition quivalence
#define
symbole
valeur
Type
longueur
domaine de valeur
8bits
-128
127
unsigned char
8bits
...
255
int ou short
16bits
-32768
32767
unsigned int
16bits
...
65535
long
32bits
-2.147.483.648
...
2.147.483.647
unsigned long
32bits
4.294.967.295
short long
24bits
-8.388.608
...
8.388.607
24bits
16.777.215
float ou double
32bits
-3,4 . 1038
...
3,4 . 1038
double
64bits
1,7 . 10308
nom;
int maxi;
char lettre;
type
nom = valeur_initiale;
char lettre = A;
rom
type
nom = valeur_initiale;
Equivalences
#define
nom
valeur
Espaces ou tabulations
Une quivalence nest pas une instruction du programme mais une directive pour le compilateur afin de faciliter la programmation.
#define
maxi
temperature = maxi;
150
// la variable temperature prend la valeur 150
#define
led_allume
#define
led_eteinte
led1 = led_allume;
led2 = led_eteinte;
Les fonctions
prog
Initialisation
des ports
Led1 teinte
BP
activ ?
Led1 teinte
Led1 allume
Gestion du
buzzer
Addition
a = 3;
c = a + 2;
// c = 5
Soustraction
Multiplication
a = 3;
c = a - 2;
a = 3;
b = 11;
c = a *b;
// c = 33
Division
a = 75;
b = 3;
c = a / b;
Modulo
Reste de la division
// c = 1
a = 75;
unite = a % 10
// unite = 5
// c = 25
Bases
Base 10
a = 26;
dcimal
symboles : 0 1 2 3 4 5 6 7 8 9
c = a + 857;
Base 16
symboles :
hexadcimal
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
Base 2
symboles :
binaire
0 1
a = 0x1a;
// a = 26
a = 0x1A;
// a = 26
a = 0x001a;
// a = 26
a = 0b11010;
// a = 26
a = 0b00011010;
// a = 26
a = 0x01101 >> 3;
b = ( c * 2 ) + ( a / 0b1010 );
ET
&
a = 0b11001100;
c = a & 0b10101010;
// c = 0b1001000
OU
Complment
a = 0b11001100;
c = a | 0b00111100;
// c = 0b11111100
a = 0x03;
c = ~ a;
// c = 0xFC
OU exclusif
a = 0b11001100;
b = 0b10100010;
c = a ^ b;
Dcalage DROITE
>>
// c = 0b01101110
a = 0b00110000;
c = a >> 2;
// c = 0b00001100;
Dcalage GAUCHE
<<
a = 0b00110000;
c = a << 2;
// c = 0b11000000;
Autres oprateurs
Incrment
a = 55;
++
a++;
// a = 56
Dcrment
Affectation
--
a = 55;
// a prend la valeur 55
a = a + b;
Sparateur
a = 20;
a--;
// a = 19
a = 55;
b = a + 1;
Bloc dinstruction
{ .. .. ..
SWITCH.. CASE
WHILE
DO..WHILE
Etc ...
Sparateur
// tableau de 5 valeurs
if( a > b )
Condition
Condition
??
c = c - a;
else
Fausse
c = c- b;
if( a > b )
{ c = c - a;
Vrai
d = c - a;
Action
Action1 1
Action
Action22
}
else
{ c = c - b;
d = c - b;
}
if( a > b )
{ c = c - a;
d = c - a;
if( condition )
else
action1;
action2;
Condition multiples
c = c - a;
c = c- b;
Oprateurs de comparaison
Suprieur
>
if( a > b )
Suprieur ou gal
>=
if( a >= b )
Infrieur
<
if( a < b )
Infrieur ou gal
<=
if( a <= b )
Egal
==
if( a == b )
Diffrent
!=
if( a != b )
if( a = b ) ...
else ...
Ne pas confondre :
l affectation =
le test de comparaison ==
Le compilateur ne dtectera pas derreur mais
le rsultat ne sera pas celui escompt. . . .
Simplification
Oprateurs logique de test
ET
&&
OU
||
NON
if( !( a == b) )
if( a )
else
ce test est :
vrai si a > 0
faux si a = 0
switch ( expression )
{
break;
break;
break;
led2 = 0;
led3 = 0;
break;
case 2 : led1 = 0;
led2 = 1;
led3 = 0;
break;
case 3 : led1 = 1;
led2 = 1;
break;
default : led1 = 0;
led2 = 0;
led3 = 0;
case 7 : led3 = 1;
Rpondre par
0
1
x si pas de modification
led1
led2
led3
Boucle FOR
Initialisation
Initialisation
Condition
Condition
??
}
Sortie de
la boucle
Action
Action
Modification
Modification
Version 1
Version 2
{
action;
Version 2 simplifie
action;
for( x = 5 ; x ; x-- )
action;
}
x est vrai si x > 0 donc la
boucle sera excute tant que
x>0
Boucle WHILE
while (condition)
{
x = 0;
while ( x < 5 )
;
Sortie de
la boucle
faire...
action;
Condition
Condition
??
Action
Action
{
action;
x++;
}
Dans cette boucle action ne sera
jamais excute car la condition est
dj fausse lors de la premire
entre.
x = 10;
while ( x < 5 )
{
action;
x++;
}
while ( 1 )
{
action;
;
}
while(1) est une boucle qui permet dexcuter indfiniment un bloc dinstructions.
Cette boucle est volontairement rendue infinie en testant une condition toujours vrai : 1 tant > 0 donc vrai . . .
On trouve trs souvent une boucle while(1) dans la fonction main().
while ( bouton == 0 )
{
action;
}
Boucle DO WHILE
Faire... tant que condition vraie
Action
Action
do
{
action;
Condition
Condition
??
;
}
while (condition);
Sortie de
la boucle
x = 0;
total = 0;
do
{
total = total + x;
x++;
}
while ( x < 5 );
5
10
LES TABLEAUX
Un tableau permet de regrouper des variables ou des constantes de mme type.
Ces variables ou constantes sont appeles lments du tableau.
Un tableau doit tre dclar avant son utilisation.
type
nom[taille] = { lments } ;
// x = 1
X = TABLEAU[3];
// x = 40
somme = 0;
for(i = 0 ; i < 5 ; i++ )
{
somme = somme + TABLEAU[i];
}
5
131
...C