Vous êtes sur la page 1sur 7

STAGE NOVEMBRE 2000

LANGAGE C POUR C

LE LANGAGE C ADAPT AU MICROCONTRLEURS


1. PRSENTATION.
Le langage C a fait son apparition en 1972 pour le dveloppement du systme dexploitation Unix. Il est devenu un standard de la norme ANSI en 1983. Lui, ainsi que son petit frre le C++, sont trs utiliss pour le dveloppement dapplications sous station Unix et PC. Depuis quelques annes il a fait son entre dans le monde des microcontrleurs. Il permet de bnficier dun langage universel et portable pratiquement indpendant du processeur utilis. Il vite les tches dcritures pnibles en langage assembleur et limine ainsi certaines sources derreurs.

2. ARCHITECTURE DUN PROGRAMME C POUR C.


La saisie dun programme en C rpond pratiquement toujours la mme architecture. On peut noter que le symbole # est suivi dune directive de compilation, le symbole // est suivi dun commentaire. #include <sdtio.h> #include <reg_uc.h> #define clear=0x00 ... char val1=0xA5; int val2; ... void tempo(char temps) { ... } // Fonctions et procdures appeles plusieurs fois dans le programme principal int bintobcd(char bin) { ... return ...; } void main(void) // Programme principal { DDRBA=0xFF // initialisation et configuration .... while (1) // Boucle principale { ... tempo(100); ... val2=bintobcd(val1); ... } } void nmi(void)interrupt 0 { ... PADIOLLEAU JEAN-LUC // Sous programme dinterruption // Directive de compilation indiquant dinclure la bibliothque E/S standard // Directive de compilation indiquant dinclure la bibliothque spcifique au C // Directive de compilation indiquant des quivalences

// 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.

3. LES TYPES DE DONNES DU LANGAGE C.


Il existe, dans le langage C, plusieurs types de donnes classs selon leurs tailles et leurs reprsentations. On ne dtaillera que ceux utiliss dans le cadre des microcontrleurs.

3.1 TYPES DE BASE.


On en rencontre gnralement trois types qui peuvent tre signs ou non signs. Dans ce dernier cas la dclaration sera prcde du mot cl unsigned T YPE char int float DFINITION Variable de type caractre ascii mais utilise pour les nombres entiers Variable de type nombre entier Variable de type nombre rel T AILLE 8 bits 16 bits 32 bits DOMAINE NON SIGN 0 255 0 65536 +/- 3,4.10-38 3,4.1038 DOMAINE SIGN -128 +127 -32768 32767 X

Remarques : Dans la dclaration de certaines fonctions, on emploie le type void qui signifie que la fonction ne renvoie ou nexige aucune valeur

3.2 TYPES STRUCTURS.


Les types structurs sont en fait une association de plusieurs variables de base de mme type. Il en existe deux types : Les types tableau dont la taille est dfinie - ex : int tableau[10] ; tableau de 10 entiers. Les types pointeurs dont la taille nest pas dfinie - ex : char *chaine ; pointeur de cacactres. Les chaines de caractres peuvent tre dfinies par les 2 types. On prfre cependant le pointeur pour sa taille indfinie. Remarque : w w w Le pointeur est comparable un registre dindex qui contient non pas une donne mais ladresse de cette donnes. Ladresse dune variable, affectant un pointeur, sobtient en prcdant son nom du symbole &. Une chane de caractre se termine toujours par le caractre nul \0.

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

STAGE NOVEMBRE 2000

LANGAGE C POUR C

4.2 LES OPRATEURS DAFFECTATION.


Loprateur indispensable au langage C est laffectation dfini principalement par le signe =. Il permet de charger une variable avec la valeur dfinie par une constante ou par une autre variable. Il en existe dautres qui, en plus de laffectation, effectue une opration arithmtique. OPRATEUR = += -= *= /= %= -++ FONCTION Affectation ordinaire Additionner de _ Soustraire de _ Multiplier par _ Diviser par _ Modulo Soustraire de 1 (Dcrmentation) Ajouter 1 (Incrmentation) EQUIVALENCE X=Y X+=Y quivalent X=X+Y X-=Y quivalent X=X-Y X*=Y quivalent X=X*Y X/=Y quivalent X=X/Y X%=Y quivalent X=X%Y X-- quivalent X=X-1 X++ quivalent X=X+1

4.3 LES OPRATEURS LOGIQUES.


Ces oprateurs sadresse uniquement aux opratione de test conditionnel. Le rsultat de ces opratione est binaire : 0 ou 1. OPRATEUR FONCTION && ET logique || OU logique ! NON logique

4.4 LES OPRATEURS LOGIQUES BIT BIT.


Ces oprateurs agissent sur des mots binaires. Ils effectuent, entre deux mots, une opration logique sur les bits de mme rang. OPRATEUR & | ^ ~ >> << FONCTION ET OU OU exclusif NON Dcalage droite des bits Dcalage gauche des bits

4.5 OPRATEURS DE COMPARAISON.


Ces oprateurs renvoient la valeur 0 si la condition vrifie est fausse, sinon ils renvoient 1. OPRATEUR == != > < >= <= FONCTION Egale Diffrent de Suprieur Infrieur Suprieur ou gal Infrieur ou gal

PADIOLLEAU JEAN-LUC

PAGE M-3

STAGE NOVEMBRE 2000

LANGAGE C POUR C

5. LES STRUCTURES RPTITIVES.


Le langage C possde des instructions permettant de rpter plusieurs fois une mme squence en fonction de certaines conditions.

5.1 STRUCTURE WHILE : TANT QUE ... FAIRE ...


Avec ce type dinstruction le nombre de rptitions nest pas dfini et dpend du rsultat du test effectu sur la condition. Si cette dernire nest jamais vrifie, la squence nest pas excute. while (int x!=0) { ... } La structure prcdente rpte la suite dinstruction comprises entre crochets tant que la variable entire x est diffrente de 0.

5.2 STRUCTURE DO ... WHILE : FAIRE ... TANT QUE...


Cette structure ressemble fortement la prcdente la seule diffrence que la squence rpter est au moins excuter une fois mme si la condition nest jamais vrifie. do { ... }while (int x!=0);

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.

1. LES STRUCTURES ALTERNATIVES.


Ces structures permettent dexcuter des squences diffrentes en fonction de certaines conditions.

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.

6.2 STRUCTURE SWITCH ... CASE.


PADIOLLEAU JEAN-LUC PAGE M-4

STAGE NOVEMBRE 2000

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

: : : :

b=16; b=8; b=4; b=2;

Dans la structure prcdente b=16 si a=1, b=8 si a=4 etc.

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); ... }

// variable m = 1 dcal de n fois gauche // opration bit bit OU entre *reg et m

// Programme principal

// boucle principale

// mise 1 du bit 5 de DRB

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;

// variable m = 1 dcal de n fois gauche

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 ... }

LANGAGE C POUR C // renvoi opration bit bit ET entre reg et

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.

4. DCLARATION DE VARIABLES ET DE CONSTANTES SPCIFIQUES AU MICROCONTRLEUR.


La dclaration de variables correspond au fait de rserver un bloc, plus ou moins grand, dans la mmoire de donne. Comme la taille de cette espace est limite en ce qui concerne les microcontrleurs, il est important de pouvoir contrler parfaitement certains paramtres comme par exemple ladresse. Pour cela le cross - compilateur dispose de mots cls supplmentaires permettant de dfinir le type ainsi que ladresse du bloc de mmoire utilis. MOT CL at code data register SIGNIFICATION Permet de dfinir ladresse de la variable Permet de rserv un bloc dans la mmoire programme Permet de rserv un bloc dans la mmoire de donnes Permet de rserv un bloc dans les registres de la CPU si cela est possible

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

dcal de n fois gauche

PADIOLLEAU JEAN-LUC

PAGE M-6

STAGE NOVEMBRE 2000


*reg=*reg | m; } // opration bit bit OU entre reg et m

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

Vous aimerez peut-être aussi