Professional Documents
Culture Documents
pour
microcontrleurs PIC
Langage C
Dveloppement d un projet
Projet
Ecriture algorithme
Ecriture
Ecriture du source
du
logiciel Compilation
oui
Erreurs ?
non
Debug du programme
Test
du logiciel
non
Fonctionnement
sur le
OK ?
matriel oui
Programmation
de la carte
Fin du projet
Les types de donnes
type nom;
unsigned char unit; // unit est un octet 0..255 plac en RAM
Une quivalence n est pas une instruction du programme mais une directive pour le compilateur afin de faciliter la programmation.
#define led_allume 1
#define led_eteinte 0
a = 3;
Addition + c = a + 2; // c = 5
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
Bases
symboles : 0 1 2 3 4 5 6 7 8 9 c = a + 857;
Base 2 binaire
a = 0b11010; // a = 26
symboles : 0 1
a = 0b00011010; // a = 26
la nombre est prcd de 0b ...
a = 0b11001100;
ET & c = a & 0b10101010; // c = 0b1001000
a = 0b11001100;
OU | c = a | 0b00111100; // c = 0b11111100
a = 0x03;
Complment ~ c = ~ a; // c = 0xFC
a = 0b11001100;
OU exclusif ^ b = 0b10100010;
c = a ^ b; // c = 0b01101110
a = 0b00110000;
Dcalage DROITE >> c = a >> 2; // c = 0b00001100;
a = 0b00110000;
Dcalage GAUCHE << c = a << 2; // c = 0b11000000;
Autres oprateurs
a = 55;
Incrment ++ a++; // a = 56
a = 20;
Dcrment -- a--; // a = 19
Sparateur ; a = 55; b = a + 1;
if( a > b ) c = c - a;
Action1 et action2 sont une seule instruction
else c = c- b;
Fausse
Condition
?
Action1 et action2 sont if( a > b )
un bloc d instructions
{ c = c - a;
Vrai
d = c - a;
Action 1 Action 2 }
else { c = c - b;
d = c - b;
}
Si la condition est vrai
faire l action 1
ELSE n existe pas if( a > b )
sinon faire action 2
{ c = c - a;
d = c - a;
}
if( condition ) action1;
else action2; if( (a > b) && ( b > 0) ) c = c - a;
Condition multiples
else c = c- b;
Oprateurs de comparaison
if( a = b ) ...
Suprieur ou gal >= if( a >= b )
else ...
Infrieur < if( a < b )
Ne pas confondre :
l affectation =
le test de comparaison ==
Infrieur ou gal <= if( a <= b )
Le compilateur ne dtectera pas d erreur mais
le rsultat ne sera pas celui escompt. . . .
Egal == if( a == b )
Diffrent != if( a != b )
Simplification
Oprateurs logique de test if( a )
else
if( (a > b) && ( b > 0) )
ET &&
OU || if( (a > b) || ( b > 0) ) ce test est :
vrai si a > 0
NON ! if( !( a == b) ) faux si a = 0
Instruction conditionnelle SWITCH CASE
Condition ;
? }
Sortie de
la boucle
Action
Version 1 Version 2
Modification
for( x = 0 ; x < 5 ; x++ ) for( x = 5 ; x > 0 ; x-- )
{ { Version 2 simplifie
action; action;
} } for( x = 5 ; x ; x-- )
{
Ces 2 boucles sont identiques.
action;
Action est excute 5 fois
}
while (condition)
Cette boucle est identique une boucle FOR
{
x = 0;
action; while ( x < 5 )
Condition ; {
? action;
Sortie de
}
x++;
la boucle
}
while ( 1 ) Soit un bouton poussoir qui donne 0 si il est appuy. while ( bouton == 0 )
{ Ici on fait l action tant que le poussoir est maintenu appuy. {
On sort de la boucle quant le bouton n est plus appuy.
action; action;
; }
}
while(1) est une boucle qui permet d excuter indfiniment un bloc d instructions.
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().
Boucle DO WHILE
Sortie de
la boucle