Académique Documents
Professionnel Documents
Culture Documents
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.
#define clear=0x00
...
char val1=0xA5;
int val2;
...
PAGE M-1
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.
int
DFINITION
Variable de type caractre ascii mais
utilise pour les nombres entiers
Variable de type nombre entier
float
char
T AILLE
DOMAINE SIGN
8 bits
0 255
-128 +127
16 bits
0 65536
-32768 32767
32 bits
Remarques : Dans la dclaration de certaines fonctions, on emploie le type void qui signifie que la fonction
ne renvoie ou nexige aucune valeur
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 &.
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
LANGAGE C POUR C
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
FONCTION
ET
OU
OU exclusif
NON
Dcalage droite des bits
Dcalage gauche des bits
PADIOLLEAU JEAN-LUC
FONCTION
Egale
Diffrent de
Suprieur
Infrieur
Suprieur ou gal
Infrieur ou gal
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.
PAGE M-4
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;
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
LANGAGE C POUR C
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.
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
PAGE M-6
LANGAGE C POUR C
// opration bit bit OU entre reg et m
// 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