Академический Документы
Профессиональный Документы
Культура Документы
pour
microcontrleurs PIC
Langage C
T.Berenguer
Dveloppement dun 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
Flux de donnes dun projet
Assembleur
Programmation
Debug
du composant
Programme source en C
Commentaire /* bla bla
sur plusieurs lignes bla bla */
Dfinition quivalence
#define symbole valeur
Fonction principale
Son nom est main, cest un mot rserv.
type nom;
unsigned char unit; // unit est un octet 0..255 plac en RAM
rom unsigned char unit = 10; // unit est un octet initialis 10 en ROM
rom int maxi = 1024; // maxi mot 16 bit initialis 1024 en ROM
Une quivalence nest 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 cest dire le reste
Bases
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
Condition
??
Action1 et action2 sont if( a > b )
un bloc dinstructions
{ c = c - a;
Vrai
d = c - a;
Action
Action1 1 Action
Action22 }
else { c = c - b;
d = c - b;
}
Si la condition est vrai
faire laction 1
ELSE nexiste pas if( a > b )
sinon faire action 2
{ c = c - a;
d = c - a;
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 derreur mais
Egal == if( a == b )
le rsultat ne sera pas celui escompt. . . .
Diffrent != if( a != b )
Simplification
Oprateurs logique de test if( a )
else
ET && if( (a > b) && ( b > 0) )
Initialisation
Initialisation for ( initialisation ; condition ; modification )
{
action;
Condition ;
Condition
?? }
Sortie de
la boucle
Action
Action
Version 1 Version 2
Modification
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
Condition ; {
?? action;
Sortie de
}
x++;
la boucle
}
Action
Action Dans cette boucle action ne sera x = 10;
jamais excute car la condition est
while ( x < 5 )
dj fausse lors de la premire
entre. {
action;
x++;
}
while ( 1 ) Soit un bouton poussoir qui donne 0 si il est appuy. while ( bouton == 0 )
{ Ici on fait laction tant que le poussoir est maintenu appuy. {
On sort de la boucle quant le bouton nest plus appuy.
action; 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().
Boucle DO WHILE
Sortie de
la boucle
suivre...