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>

// Directive de compilation indiquant dinclure la bibliothque E/S standard


// Directive de compilation indiquant dinclure la bibliothque spcifique au C

#define clear=0x00
...

// Directive de compilation indiquant des quivalences

char val1=0xA5;
int val2;
...

// Dclaration dune variable caractre avec valeur initiale


// Dclaration dune variable nombre entier

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

PAGE M-1

STAGE NOVEMBRE 2000

LANGAGE C POUR C

}
Chaque ligne dinstruction se termine par un ;.
Le dbut dune squence est prcd du symbole {.
La fin dun squence est suivie du symbole }.
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

int

DFINITION
Variable de type caractre ascii mais
utilise pour les nombres entiers
Variable de type nombre entier

float

Variable de type nombre rel

char

T AILLE

DOMAINE NON SIGN

DOMAINE SIGN

8 bits

0 255

-128 +127

16 bits

0 65536

-32768 32767

32 bits

+/- 3,4.10-38 3,4.1038

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

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
+
*
/
%

PADIOLLEAU JEAN-LUC

FONCTION
Addition
Soustraction
Multiplication
Division entire
Reste de la division entire

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
==
!=
>
<
>=
<=

PADIOLLEAU JEAN-LUC

FONCTION
Egale
Diffrent de
Suprieur
Infrieur
Suprieur ou gal
Infrieur ou gal

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;

PADIOLLEAU JEAN-LUC

// variable m = 1 dcal de n fois gauche

PAGE M-5

STAGE NOVEMBRE 2000

LANGAGE C POUR C

return (reg & m);

// renvoi opration bit bit ET entre reg et

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.

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

PADIOLLEAU JEAN-LUC

dcal de n fois gauche

PAGE M-6

STAGE NOVEMBRE 2000


*reg=*reg | m;
}

LANGAGE C POUR C
// opration bit bit OU entre reg et m

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