Vous êtes sur la page 1sur 9

11/06/2019

Ecole Nationale Polytechnique –Constantine.


Département EEA
Doctorat troisième cycle – 1ière. année.
Electrotechnique
Cours. Circuits Programmables

Chapitre III. (Partie 3)


Programmation des microcontrôleurs
Durée du Cours: 1h30
Présenté par: Dr. S. BENSEGUENI
(benskandix@gmail.com)

Année Universitaire. 2018-2019

4. Programmation en C
(Introduction)
Dans cette partie, nous verrons les bases du langage C
ordinaire, en nous limitant toutefois aux points
communs avec le langage C PIC, c'est-à-dire aux
commandes communes.
Il est cependant à spécifier, que pour des raisons de
commodité, nous verrons quelques points en plus,
afin d’expliquer clairement le langage C ; points
existant en C PIC, mais sous formes différentes.

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Introduction)
Un programme en langage C se compose de plusieurs
parties :
- Un appel de librairies,
- Une fonction main, correspondant au programme
principal,
- Eventuellement d'un sous-programmes.
Le code source peut contenir dans son en-tête des
commentaires incluant le nom, l'auteur, le hardware, le
software,... Ensuite, une initialisation de la configuration
de quelques registres est introduite en utilisant :
#pragma config.
Circuits Programmables Dr. S. Bensegueni

1
11/06/2019

4. Programmation en C
(Introduction)
Parmi ces registres le watchdog, le type de
l'oscillateur, la low-voltage protection, ...
Exemple :
#pragma config WDT = OFF
#pragma config OSC = HS
#pragma config LVP = OFF
#pragma config DEBUG = OFF

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Introduction)
Parmi ces registres le watchdog, le type de
l'oscillateur, la low-voltage protection, ...
Exemple :
#pragma config WDT = OFF
#pragma config OSC = HS
#pragma config LVP = OFF
#pragma config DEBUG = OFF

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Librairies)
Elles sont utilisées pour compléter et aider à écrire le
programme principal, en contenant toutes les
informations et les détails dont a besoin le
programme principal ou main. Il a accès à ces
directives par l’intermédiaire d’instructions
spécifiques pour chaque librairie. Alors pour utiliser
une librairie, il faut l'appeler par son nom par le
programme principal. On l'appelle par la commande :
#include <nom_de_la_librairie.h>

Circuits Programmables Dr. S. Bensegueni

2
11/06/2019

4. Programmation en C
(Fonction main)
Il s’agit du programme principal. Autrement dit, c'est
dans ce programme qu’on écrira notre code. Cette
fonction peut faire appel à des sous fonctions,
lesquelles peuvent être situées dans des librairies ou
écrit après le main. Il faut remarquer qu'une fonction
est composée de l’en-tête comprenant son nom et
éventuellement ses paramètres, et d’un bloc,
commençant par { et finissant par }, indiquant le code
correspondant à l’en-tête.

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Fonction main)
Il faut savoir que chaque port contient trois registres pour
effectuer ces opérations, ces registres sont le TRIS (data
direction register), PORT (reads the levels on the pins of
the device) et LAT (output latch). On déclarera ainsi, les
ports d'entrées/sortie et affectera à chaque numéro de
port un rôle comme entrée ou comme sortie. Cette
affectation est réalisée par l'utilisation de l'instruction
TRISX (tel que X est l'un des ports du PIC: X peut être A, B,
C,...), si TRISX=0x00, alors le port X est considéré comme
sortie, et si TRISX=0xFF, alors le port X est considéré
comme entrée.
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Fonction main)
Il faut noter, qu'on peut effectuer des affectations en
binaire (exemple: TRISX=0b00011001) ou en décimal
(exemple: 19), dans ce dernier exemple, le port X est
une combinaison entre des pines en entrées et
d'autres en sorties. On peut affecter à une des pines
du port X une valeur en mettant un point puis le
numéro de la pine (exemple: TRISX.numéro ou
PORTX.numéro).

Circuits Programmables Dr. S. Bensegueni

3
11/06/2019

4. Programmation en C
(Sous programme)
Ce sont les programmes secondaires ou des sous-
fonctions, utilisés par le programme principal. L’utilité de
créer des sous fonction apparaît surtout lorsqu’une tache
se répète plusieurs fois dans le même programme, on
définit une seule fois le code, dans un sous programme,
et on l’appelle le nombre de fois qu'on veut. On
économise ainsi l'espace mémoire par une optimisation
du code. La création possible de sous programme doit
être une des choses à avoir à l’esprit lorsqu’on cherche à
optimiser le code. Lorsque la possibilité se présente, il
faut alors juger s’il est plus judicieux de créer un sous
programme, ou alors de laisser le code tel quel, en se
référençant à la longueur du programme.
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Sous programme)
Exemple.
On écrit un code qui génère un clignotement des leds rouges si
un bouton poussoir est maintenu et s'il est relâché un
clignotement des leds vertes est aperçu. On utilise deux sous
programmes pour générer les clignotements des leds:
void LedRouge()
{
PORTC = 0x0f;
Delay_ms(1000); // Delay of 1s
PORTC = 0x00;
Delay_ms(1000);
return;
}
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Sous programme)
void LedVerte()
{
PORTC = 0xf0;
Delay_ms (1000);
PORTC = 0x00;
Delay_ms (1000);
return;
}
void main() {
while(1)
{
if(PORTB & 0b00000001)
LedRouge();
else
LedVerte();
}
}
Circuits Programmables Dr. S. Bensegueni

4
11/06/2019

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
Il faut respecter lors de l'utilisation du langage C pour les
PIC les règles suivantes :
- Une ligne se finit toujours par un point virgule : ;
- Lorsque l’on désire faire des commentaires, on suivra
l'une des manières suivantes :
1. Pour une ligne seule, on utilise un double slash : // (il
n’est pas nécessaire de mettre un point virgule à la fin du
commentaire).
2. Pour un paragraphe, ou plusieurs lignes consécutives,
on utilise /* pour indiquer le début du commentaire et */
pour en indiquer la fin.
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
- Dans un programme, on utilise souvent des variables
pour effectuer des opérations. Il faut savoir qu'il y a
une différence entre le majuscule et le minuscule et
que toutes les variables doivent être définit en
premier lieu dans un programme. Elles peuvent
principalement être de trois types : int (pour les
entiers), float (pour les chiffres à virgule), char (pour
les caractères). Si on veut définir la taille d'un vecteur,
on écrira la taille entre deux crochets après la variable
en question.
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
Exemple :
int x, y ;
float c[10] ;
Il est possible d’affecter une valeur à une variable lors
de sa définition,
Exemple : int a=2 ; //créer a comme entier, et lui
affecte la valeur 2.

Circuits Programmables Dr. S. Bensegueni

5
11/06/2019

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
On peut utiliser plusieurs opérateurs comme : + pour
l'addition, - pour la soustraction, * pour la
multiplication, / pour la division, % pour le modulo, =
pour l'égalilité, != pour la différence, > pour le
supérieur, < pour l'inférieur, le ET (&&) et pour un bit
(&), le OU inclusif (||) et pour un bit (|) et le NON (!),
on peut mettre aussi ++ (ou --) pour ajouter (ou
soustraire) 1 à la valeur de la variable. Quand on met
a==b, on va comparer a et b. Pour le décalage à
gauche on utilise (<<) et pour le décalage à droite
(>>).
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
- Les opérateurs conditionnels sont aussi très utilisés dans
un programme en C du PIC, dans ce cas, les accolades
sont obligatoires, donnant une indication que ce qu’il y a
à l’intérieur fait partie de l’instruction conditionnelle. Il
faut noter cependant, que dans le cas ou il n’y a qu’une
seule ligne, on peut les enlever.
Il y a plusieurs instructions conditionnelles : IF, SWITCH,
WHILE et DO...WHILE:
IF est utilisée dans le cas où on veut réaliser une
opération si une condition est vérifiée sinon (si elle n'est
pas vérifiée) on réalise l'opération qui vient après ELSE.

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
Exemple : Ecrire le programme qui réalise la condition si
x=y alors a=b, sinon a=c, on va l'écrire en C, comme suit :
if (x==y)
{
a=b ;
}
else
{
a=c ;
}
Circuits Programmables Dr. S. Bensegueni

6
11/06/2019

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
L'instruction SWITCH est utilisée si on veut vérifier plusieurs
conditions à la fois. Elle est associée à CASE qui va définir les
différentes conditions et BREAK pour arrêter l'exécution de la
condition.
Exemple : Ecrire le programme qui réalise la condition de
surveillance de a ; si a=1, alors b=-1 ; si a=2, alors b=-2.
switch (a)
{
case ‘1’: b=-1;
break;
case ‘2’: b=-2;
break;
}
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
L'instruction WHILE est utilisée pour effectuer une
opération tant qu'une condition est vérifiée. Elle est peu
différente de DO ... WHILE qui réalise l'opération puis
vérifie la condition.
Exemple : Ecrire le programme qui réalise l'opération de
multiplication a=b*c, tant que a inférieur à 10.
do
{
a=b*c ;
}
while(a<10) ;
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
En C des PIC, on peut créer une boucle infinie en
définissant une condition qui sera toujours vraie, et
comme en C, le vrai est équivalent à 1 alors on utilisera
while(1).
Exemple :
while(1)
{
if(PORTB.1)
LedRouge();
else
LedVerte();
}
Circuits Programmables Dr. S. Bensegueni

7
11/06/2019

4. Programmation en C
(Autres recommandations sur l'utilisation du C pour PIC)
- Dans le cas où on veut avoir plusieurs itérations, on fait
appel à une boucle par l'instruction FOR. Elle utilise trois
paramètres : le premier pour donner une valeur initiale,
le deuxième représente la valeur finale de la boucle et le
dernier paramètre est la condition sur les itérations.
Exemple : Ecrire le programme qui réalise une boucle
FOR, pour une multiplication a=b*c.
for (i=0 ;i<10 ;i++)
{
a=b*c ;
}
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Exemple. feux de signalisation routière)

.
Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Exemple. feux de signalisation routière)
void main() {
TRISB=0x00;
PORTB=0;
for(;;)
{
PORTB=0b00001100;
delay_ms(5000);
PORTB=0b00011100;
delay_ms(500);
PORTB=0b00001100;
delay_ms(500);
PORTB=0b00011100;
delay_ms(500);
PORTB=0b00001100;
delay_ms(500);
Circuits Programmables Dr. S. Bensegueni

8
11/06/2019

4. Programmation en C
(Exemple. feux de signalisation routière)
PORTB=0b00100001;
delay_ms(5000);
PORTB=0b00100011;
delay_ms(500);
PORTB=0b00100001;
delay_ms(500);
PORTB=0b00100011;
delay_ms(500);
PORTB=0b00100001;
delay_ms(500);
PORTB=0b00001100;
delay_ms(5000);
}
}

Circuits Programmables Dr. S. Bensegueni

4. Programmation en C
(Interruptions)
Pour réaliser une interruption en C des PIC, on suit les étapes suivantes :
- Spécification du sous-programme d'interruption afin de le différencier des
autres sous-programmes par l'utilisation de : void interrupt()
- Initialisation du mécanisme d'interruption dans le programme principal.
Exemple.
void interrupt()
{
// traitement d'interruption
// positionnement du FLAG
}
void main() {
// programme principal
}

Circuits Programmables Dr. S. Bensegueni

Vous aimerez peut-être aussi