Vous êtes sur la page 1sur 32

14/04/2020

Systèmes Microprogrammés

Bases de la programmation en langage C


Usage de mikroC PRO for PIC
Pr. A. AIT MADI

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 1

Plan

Programmation en langage machine


Programmation en langage Assembleur
Programmation en langage haut niveau
Premier programme en langage C
Types de données
Les variables
Les pointeurs
Les constantes

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 2

1
14/04/2020

Plan

Opérateurs, opérations et expressions


Structures conditionnelles
Les instructions de boucles
Les tableaux et les chaines de caractères
Les fonctions
Les spécificités du compilateur mikroC Pro
Compilateur mikroC PRO for PIC
Simulation sous PROTEUS ISIS
Exemples

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 3

Programmation en langage machine

 Le microcontrôleur exécute le programme chargé dans sa mémoire programme


 Le code se trouvant dans la mémoire programme est un code exécutable
composé des « 1 » et des « 0 », appelé code machine
 Chaque mot dans la mémoire peut avoir 12, 14 ou 16 bits selon l’architecture du
PIC
 Chaque mot est considéré par la CPU comme une commande à exécuter pendant
le fonctionnement du PIC
 Le code exécutable est souvent représenté comme une séquence de
nombres hexadécimaux appelé code hexadécimal.

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 4

2
14/04/2020

Programmation en langage machine

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 5

Programmation en langage Assembleur

 L’écriture du code exécutable est difficile et fatigante


 Le premier langage de programmation « haut niveau » des PIC est l’assembleur
 Le langage représente le langage machine sous une forme lisible par un humain
 Les combinaisons de bits du langage machine sont remplacés par des symboles
appelés mnémoniques
 Le code exécutable est obtenu, à partir du programme assembleur, par un
programme spécial appelé compilateur
 Chaque instruction du programme assembleur correspond à une location
mémoire du PIC

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 6

3
14/04/2020

Programmation en langage Assembleur

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 7

Programmation en langage haut niveau

 Les programmeurs ont toujours besoin d'un langage de programmation proche


de la langue utilisée dans la vie de tous les jours
 Un langage haut niveau est nécessaire : l’un d’eux est le langage C ( qui sera
étudié par la suite)
 Le principal avantage de ces langages est la simplicité de l'écriture du
programme
 Les instructions d’un langage haut niveau sont encapsulées dans des fonctions
• Une fonction privilégiée du langage C est la fonction main() qui est le point
d’entrée de tout programme C
 Comme dans le langage assembleur, un programme spécial appelé compilateur
s’occupe de la traduction en langage machine

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 8

4
14/04/2020

Programmation en langage haut niveau

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 9

Programmation en langage haut niveau

Exemple de programme écrit en langage C destiné a un PIC

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 10

5
14/04/2020

Programmation en langage haut niveau

Programme compilé

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 11

Programmation en langage haut niveau

Programmation du MCU

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 12

6
14/04/2020

Premier programme en langage C

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 13

Types de données

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 15

7
14/04/2020

Les variables
 Le nom de la variable peut contenir des caractères alphabétiques de A à Z (a -z),
les chiffres 0-9 et le caractère de soulignement '_'. Le compilateur est sensible à
la casse
 Les noms de variables ne doivent pas commencer par un chiffre
 Un nom d’une variable ne peut pas prendre le nom d’un nom réservé du langage
: exemple if , while …
 Chaque variable doit être déclarée en spécifiant son type au début du
programme avant son utilisation

 Le processus d'attribution d'une valeur initiale et le type déclarant peut être


effectuée en une seule étape

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 16

Les pointeurs
 La valeur contenue dans une variable de type pointeur est l’adresse d’une
donnée stockée en mémoire
 Une variable pointeur est déclaré comme suit :

 Exemples :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 17

8
14/04/2020

Les pointeurs
 L’opérateur & permet d’initialiser le pointeur qui obtient ainsi l’adresse de
n’importe quelle variable (on parle également de référence) et retourne ainsi un
pointeur sur la variable manipulée. Il convient de vérifier que la variable et le
pointeur sont de type compatible
 L’opérateur * permet à un pointeur sur une variable, de lire et de modifier la
valeur de celle-ci
 Il faut faire attention à ne jamais accéder à une donnée pointée avec un
pointeur qui n’a pas été correctement initialisé. Ceci est source de bug et
provoque en général l’arrêt involontaire du programme
 La représentation en mémoire d’un pointeur p sur un entier i est donnée comme
suit :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 18

Les pointeurs

 Exemple 1 :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 19

9
14/04/2020

Les pointeurs

 Exemple 2 :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 20

Les constantes

 Une constante est un nombre ou un caractère ayant une valeur fixe qui ne peut
être modifiée pendant l'exécution du programme
 Contrairement aux variables, les constantes sont stockées dans la mémoire flash
de programme du microcontrôleur dans le but d'économiser l'espace RAM
 Le compilateur les reconnaît par le préfixe const :

 Constantes entières

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 21

10
14/04/2020

Les constantes

 Constantes avec virgules flottante


• Elles se composent d'une partie entière, un point, une partie fractionnaire et
en option, un e ou E suivie d'un exposant entier signé

 Constantes caractère (ASCII)


• Une constante caractère est un caractère entre guillemets simples

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 22

Les constantes

 Constantes chaine de caractères

 Constantes énumérées
• C’est un type spécial de constantes entières qui permet de rendre un programme
plus complet et plus facile à suivre en assignant aux éléments des nombres
ordinaux
• Dans l'exemple suivant, on attribue automatiquement au premier élément
la valeur 0, au second la valeur 1, au troisième la valeur 2, etc :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 23

11
14/04/2020

Les constantes

• Sur chaque occurrence des mots «UP», «DOWN» ,«LEFT» et «RIGHT», dans le
programme, le compilateur va les remplacer par les numéros appropriés (0-3)
• Concrètement, si les broches 0, 1, 2 et 3 du port B sont reliés à des moteurs, la
commande pour démarrer le moteur 'RIGHT' relié à bit 3 du port B se présente
comme suit :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 24

Opérateurs, opérations et expressions

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 25

12
14/04/2020

Structures conditionnelles

 Instruction if-else

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 26

Structures conditionnelles
 Instruction switch

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 27

13
14/04/2020

Les instructions de boucles

 Instruction while

 Instruction for

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 28

Les instructions de boucles

 Instruction do-while

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 29

14
14/04/2020

Les instructions de boucles

 Instruction break utilisé dans une boucle


• Le mot-clé break, utilisé dans une boucle, permet d’interrompre une boucle et
d’en sortir même si l’expression conditionnelle d’arrêt de boucle n’a pas été
vérifiée. Ce mot-clé est à utiliser avec prudence
• Exemple:

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 30

Les tableaux et les chaines de caractères

 Les tableaux
• Un tableau est un regroupement consécutif de données de même type et de
taille fixe
• À chaque entrée du tableau correspond un indice pouvant prendre une valeur
dans l’intervalle [0, taille – 1]
• Il est possible de déclarer des tableaux avec de multiples indices (tableaux à
plusieurs dimensions) comme les matrices

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 31

15
14/04/2020

Les tableaux et les chaines de caractères


• Exemple

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 32

Les tableaux et les chaines de caractères

 Les chaines de caractère


• Une chaîne de caractères est un cas particulier de tableau contenant des
éléments de type char uniquement et contenant systématiquement 0 comme
dernière valeur que l’on nomme zéro terminal ou caractère nul noté '\0'
• En tenant compte du zéro terminal, la taille exacte d'une chaîne de caractère
est égale à nb de caractères + 1
• Un tableau peut être initialisé à l’aide d’une chaîne de caractères entre guillemets
: le zéro terminal est ajouté automatiquement par le compilateur
• Une chaîne caractère est affichable à l’aide de la fonction printf en utilisant la
chaîne de formatage %s
• Il existe des fonctions particulières pour manipuler les chaînes de caractères,
comme la concaténation

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 33

16
14/04/2020

Les tableaux et les chaines de caractères


• Exemple

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 34

Les fonctions
 Une fonction consiste en un sous-programme appliquant des commandes précises
sur des variables données
 En règle générale, il est recommandé d'avoir un programme composé d'un grand
nombre de fonctions simples que de quelques fonctions complexes
 Chaque fonction doit être correctement déclarée afin d'être correctement interprétés
lors du processus de compilation. La déclaration contient les éléments suivants :
• Nom de la fonction
• Corps de la fonction
• Liste des paramètres
• Déclaration des paramètres
• Type du résultat de la fonction

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 35

17
14/04/2020

Les fonctions
 Exemple

 Notez que la fonction peut ne pas avoir besoin des paramètres, mais les
parenthèses restent obligatoires pour que le compilateur interprète la fonction
 La fonction peut aussi ne pas retourner de résultats. Le compilateur reconnaît
ces fonctions par le type void de leur résultat :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 36

Les fonctions

 Les prototypes ,définitions et appels


• Exemple

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 37

18
14/04/2020

Les spécificités du compilateur mikroC Pro

 Accès individuel aux bits


• mikroC Pro permet d'accéder individuellement à chaque bit d'une variable 8 bits
en spécifiant son nom ou sa position :

 Type de données sbit


• Le compilateur mickroC Pro possède un type de données nommé sbit
permettant l'accès aux registres GPR et SFR, aux
variables, etc. Pour déclarer le bit d'une variable, il suffit d'écrire :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 38

Les spécificités du compilateur mikroC Pro

 Type de données sbit


• Si on déclare une variable sbit qui pointe un bit d'un registre SFR, il faut ajouter
le mot clé sfr dans la déclaration :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 39

19
14/04/2020

Compilateur mikroC PRO for PIC


 Prise en main du mikroC par l’exemple :
• On veut réaliser un programme, sous mikroC, pour un PIC16F84A, qui permet
de faire clignoter une LED branchée sur la broche RB1. La période de
clignotement (allumage et extinction) est de 2 secondes. La fréquence de
l’oscillateur est de 4 MHz.
• La simulation doit se faire sous PROTEUS ISIS

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 40

Compilateur mikroC PRO for PIC

Interface

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 41

20
14/04/2020

Compilateur mikroC PRO for PIC

 Création d’un nouveau projet


• Cliquer sur New project

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 42

Compilateur mikroC PRO for PIC

• Cliquer sur Next

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 43

21
14/04/2020

Compilateur mikroC PRO for PIC

• Définir le nom du projet et son emplacement dans Project Name et Project


folder

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 44

Compilateur mikroC PRO for PIC

• Choisir le nom du PIC utilisé dans Device Name

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 45

22
14/04/2020

Compilateur mikroC PRO for PIC

• Choisir la fréquence de l’oscillateur du PIC dans Device Clock


• Cliquer par la suite sur Next

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 46

Compilateur mikroC PRO for PIC

• Cliquer par la suite sur Next

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 47

23
14/04/2020

Compilateur mikroC PRO for PIC

• Cliquer par la suite sur Next

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 48

Compilateur mikroC PRO for PIC

• Cliquer par la suite sur Finish

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 49

24
14/04/2020

Compilateur mikroC PRO for PIC

 Edition du programme
• Ecrire le programme de clignotement suivant :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 50

Compilateur mikroC PRO for PIC


 Compilation du programme
• Compiler le programme de clignotement précédent : création du fichier .hex

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 51

25
14/04/2020

Compilateur mikroC PRO for PIC

 Débogage du programme
• Cliquer sur Run/Start debugger :

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 52

Compilateur mikroC PRO for PIC

• Sélectionner les variables à observer (ici RB1_bit)

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 53

26
14/04/2020

Compilateur mikroC PRO for PIC

• Choisir Step Into /Over pour faire un débogage pas à pas et vérifier le
déroulement du programme et l’état du bit RB1

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 54

Compilateur mikroC PRO for PIC

• Description des boutons de débogage

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 55

27
14/04/2020

Simulation sous PROTEUS ISIS

 Dessiner le circuit de clignotement sous PROTEUS ISIS

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 56

Simulation sous PROTEUS ISIS


 Cliquer deux fois sur le circuit 16F84A
 Choisir le fichier .hex dans Program file en cliquant sur le bouton Browse
 Cliquer par la suite sur le bouton OK

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 57

28
14/04/2020

Simulation sous PROTEUS ISIS

 Simuler le fonctionnement du circuit en cliquant sur le bouton play

LED éteinte pendant 1 Seconde LED allumée pendant 1 Seconde

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 58

Exemples
 Exemple 1
• On se propose de faire clignoter 8 LEDs branchées sur le port B du
PIC16F84A de deux façons différentes:
 Dès que le PIC est activé, tous les LEDS clignotent avec une période d’une
seconde. Et ça doit se répéter 10 fois

 Après cela, les LEDs doivent clignoter chaque 1 Seconde infiniment

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 59

29
14/04/2020

Exemples
• Montage de l’application sous PROTEUS ISIS

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 60

Exemples
• Programme de l’application sous miKroC

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 61

30
14/04/2020

Exemples

 Exemple 2

• On se propose de fermer un relai en fonction d’un nombre d’impulsion sur un


bouton poussoir
 Toute pression sur le bouton poussoir permet au TMR0 de compter une
impulsion
 Lorsque le nombre d’impulsions (contenu du TMR0) correspond au nombre
stocké dans une variable TEST, le relai est excité et alimente un moteur à
courant continu
 Le TMR0 sera utilisé sans pré-division avec une horloge externe (ici c’est le
bouton poussoir branché sur la broche RA4)
 Le TMR0 est active sur front montant
 Un autre bouton poussoir permet de remettre à 0 l’application

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 62

Exemples
• Montage de l’application sous PROTEUS ISIS

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 63

31
14/04/2020

Exemples
• Programme de l’application sous miKroC

RST+GMA(S6)-ENSA
RST(S6)-ENSA -KENITRA
-KENITRA 64

32

Vous aimerez peut-être aussi