Académique Documents
Professionnel Documents
Culture Documents
C Micro C
C Micro C
LANGAGE C POUR C
// Dclaration dune variable caractre avec valeur initiale // Dclaration dune variable nombre entier
PAGE M-1
STAGE NOVEMBRE 2000 } Chaque ligne dinstruction se termine par un ;. Le dbut dune squence est prcd du symbole {. La fin dun squence est suivie du symbole }.
LANGAGE C POUR C
La notation des nombres peut se faire en dcimal de faon normale ou en hexadcimal avec le prfixe 0x.
Remarques : Dans la dclaration de certaines fonctions, on emploie le type void qui signifie que la fonction ne renvoie ou nexige aucune valeur
4. LES OPRATEURS.
4.1 LES OPRATEURS ARITHMTIQUES.
Ces oprateurs permettent deffectuer les oprations arithmtiques traditionnellee : Addition, soustraction, multiplication et division entire. OPRATEUR + * / % FONCTION Addition Soustraction Multiplication Division entire Reste de la division entire
PADIOLLEAU JEAN-LUC
PAGE M-2
LANGAGE C POUR C
PADIOLLEAU JEAN-LUC
PAGE M-3
LANGAGE C POUR C
5.3 STRUCTURE FOR : POUR <VARIABLE> ALLANT DE <VALEUR INITIALE> <VALEUR FINALE> FAIRE...
Cette instruction permet de rpter, un nombre de fois dtermin, une mme squence. for (i=0;i<5;i++) { ... } La structure prcdente rpte 5 fois la suite dinstruction comprise entre crochets. La variable i prendra les valeurs successives de : 0, 1, 2, 3 et 4.
6.1 STRUCTURE IF ... ELSE : SI <CONDITION> FAIRE ... SINON FAIRE ...
Avec cette structure on peut raliser deux squences diffrentes en fonction du rsultat du test sur une condition. if (a<b) c=b-a; else c=a-b; La structure prcdente affecte la valeur b-a c si a est infrieur b sinon c est affect par la valeur a-b.
LANGAGE C POUR C
Cette structure remplace une suite de if ... else if ...else et permet une de raliser diffrentes squences appropries la valeur de la variable teste. switch (a) { case case case case }
1 2 3 4
: : : :
2. LES FONCTIONS.
Afin de rduire la taille du programme il est souvent prfrable de dfinir sous forme de fonction une mme suite dinstructions appele plus dune fois dans le programme. La fonction principal dun programme C est dfinie grce au mot cl main. Les fonctions du langage C peuvent renvoyes des valeurs de mme quelles peuvent prendre en compte des arguments provenant de la procdure dappel. Si il ny pas de renvoi ou aucun argument, on saisit le mot cl void en remplacement. La valeur renvoye est dfinie aprs le mot cl return. Lorsque lon veut, dans une fonction, modifier une variable passe en argument il est obligatoire dutiliser un pointeur. Une fonction doit toujours tre dfinie avant sa procdure dappel. Dans le cas contraire une simple dclaration doit tre faite dans len tte du programme. Exemples : 1) Fonction permettant de positionner 1 le bit de rang n dun registre 8 bits reg. void setbit(char *reg,char n) { char m=1<<n; *reg=*reg | m; } void main(void); { ... While(1) { ... setbit(&DRB,5); ... }
// Programme principal
// boucle principale
Afin quun rsultat soit renvoy, nous sommes obligs de passer par un pointeur en ce qui concerne reg. 2) Fonction permettant de tester le bit de rang n dun registre reg en renvoyant la valeur 1 si le bit est ltat haut ou 0 dans le cas contraire. char testbit(char reg,char n) { char m=1<<n;
PADIOLLEAU JEAN-LUC
PAGE M-5
STAGE NOVEMBRE 2000 return (reg & m); m } void main(void); // Programme principal { ... While(1) // boucle principale { ... if (testbit(DRA,0)) setbit(DRB,5); //mise 1 DRA0=1 ... }
du
bit
de
DRB
si
3. FONCTION PRDFINIE.
Il existe dans tous les compilateurs C des bibliothques de fonctions prdfinies. La plus utilise parmi elles est <stdio.h> qui est propre au organes dentres / sorties standards. Dans le cas des ordinateurs ces organes sont le clavier et lcran. Dans le cas dun microcontrleur ces organes sont gnralement les interfaces sries du composant. Dans cette bibliothque on trouve les fonctions suivantes : Printf() : criture formate de donnes. scanf() : lecture formate de donnes. Putchar() : criture d'un caractre. getchar() : lecture d'un caractre.
5. EXEMPLE.
Le programme suivant ralise une bascule bistable. Il permet de mettre 1 le bit 5 du port B si le bit 1du port A est 1 . La remise 0 seffectue en positionnant 1 le bit 1 du port A.
#include <st6265b.h> char testbit(const char reg,const char n) { char m=1<<n; // variable m = 1 dcal de n fois gauche return (reg & m); // renvoi opration bit bit ET entre reg et m } void setbit(char *reg,const char n) { char m=1<<n; // variable m = 1
PADIOLLEAU JEAN-LUC
PAGE M-6
LANGAGE C POUR C
void resetbit(char *reg,const char n) { char m=1<<n; // variable m = 1 dcal de n fois gauche *reg=*reg & ~m; // opration bit bit OU entre reg et le complment de m } void main(void) { DDRA=0x00; ORA=0x00; DRA=0x00; DDRB=0xFF; ORB=0xFF; // Programme principal // Port A en entre // Sans pull up // Ni interruption // Port B en sortie // Symtrique
while (1) // boucle principale { if (testbit(DRA,0)) setbit(&DRB,5); // mise 1 du bit 5 de DRB si DRA0=1 if (testbit(DRA,1)) resetbit(&DRB,5); // mise 0 du bit 5 de DRB si DRA1=1 } }
PADIOLLEAU JEAN-LUC
PAGE M-7