Vous êtes sur la page 1sur 150

Informatique Industrielle

Cours Master SIS

Micro-contrleurs Microchip

Intervenants :
Marc Allain

- marc.allain@fresnel.fr

Julien Marot

- julien.marot@fresnel.fr

Coordonnes

Marc Allain [Matre de confrence]


marc.allain@fresnel.fr
Equipe physique et traitement d'image,
Institut Fresnel, bureau 215

Julien Marot [Matre de confrence]


julien.marot@fresnel.fr
Equipe Groupe Signaux Multidimensionnels
Institut Fresnel, bureau 237

Note : les intervenants sont sur le domaine Universitaire de St-Jrme.


2

Organisation de l'enseignement
Contenu horaire :
20 h de cours + 10 h de TD [Julien Marot] (10x 3h)
Prsentation de l'informatique industrielle, des systmes microprogramms (architecture, principes gnraux, ...). tude d'un microcontrleur Microchip PIC 18F4520. Programmation en langage
Assembleur et langage C.

35 h de travaux pratiques [Allain & Marot] (12x 4h)


Mise en pratique des connaissances sur la carte de dmonstration
PICDEM2 plus. Utilisation du micro-contrleur Microchip PIC 18F4520.

Merci d'tre l'heure en cours / TP !


3

Contrle des connaissances

Vous tes principalement valus sur la base des TP (15 points/20)

(1) Avant toute chose, vous devez rdiger un algorigramme,


(2) les programmes crits doivent tre comments,
(3) vrification des programmes en simulation et sur carte d'essai,
(4) chaque tudiant sera not individuellement ; nous valuerons la participation de
chacun au sein d'un binme constitu.

Examen (5 points/20) : contrle des connaissances avec poly de cours, sans


calculatrice, sur les notions vues en cours (exercices inclus) et en TP.

Boite outils

Les diffrentes bases de numrotation


(binaire, octal, dcimal, hexadcimal)

Conversions et oprations sur les nombres binaires

Notions d'lectronique numrique


(fonctions logiques combinatoires et squentielles)

Notion de programmation
(algorigramme, concept de variable, fonction, etc.)

Objectifs du cours
L'objectif de ce cours est de vous rendre capable de choisir, de programmer,
d'utiliser un micro-contrleur et plus gnralement de vous transmettre une culture
des systmes micro-programms.
Non ddi un microcontrleur

Notions d'architecture [des systmes micro-programms]

lments constitutifs [d'un systme micro-programm]

Fonctionnement [d'un systme micro-programm]

lments de choix [d'un systme micro-programm]

Ddi un microcontrleur

Connaissances des diffrents types d'instruction

Notion d'interruption

Programmation en Assembleur

Programmation en langage C

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres au microcontrleur (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

L'informatique industrielle

L'informatique industrielle est une branche de


l'informatique applique qui couvre l'ensemble des
techniques de conception et de programmation, de
systmes informatiss vocation industrielle, qui ne
sont pas des ordinateurs.
(Source : Wikipdia)
Source : Ascom S.A.

L'informatique industrielle
Domaines d'applications :
Alarme, automobile, aviation, instrumentation, mdicale, tlphonie mobile,
terminaux de paiement pour carte bancaire ...

Image fournie par Microchip

L'informatique industrielle

Applications :

Automates, robotique,

Mesures de grandeurs physiques,

Systmes temps-rel,

Systmes embarqus.
Source : Ascom S.A.

10

Les diffrents systmes programmables

Les circuits spcialiss ou ASIC (Application Specific Integrated Circuit) :


Les circuits spcialiss sont des circuits spcialiss ds leur conception pour une application
donne.
Exemples : DSP (Digital Signal Processing), co-processeur arithmtique, processeur 3-D,
contrleur de bus, ...

Source : Texas Instruments


Source : NVidia

Avantages :

Trs rapide
Consommation moindre
Optimis pour une application

Inconvnients :

Faible modularit
Possibilit d'volution limit
Cot

11

Les diffrents systmes programmables


Les systmes en logique programme et/ou en logique programmable
dsignation de PLD (programmable logic device, circuit logique programmable)

sont connus sous la

FPGA (field-programmable gate array, rseau de portes programmables in-situ),


PAL (programmable array logic, rseau logique programmable),
...

Source : Altera

Source : Altera

Un circuit logique programmable, ou rseau logique programmable, est un circuit intgr logique qui
peut tre reprogramm aprs sa fabrication. Il est compos de nombreuses cellules logiques
lmentaires pouvant tre librement assembl. (Wikipdia)

Inconvnients :

Avantages :

Forte modularit
Rapidit

Mise en oeuvre plus complexe


Cots de dveloppement lev

12

Les diffrents systmes programmables

Les systmes micro-programms :


Les micro-contrleurs sont typiquement des systmes micro-programms.

Micro-contrleur Microchip
PIC16F690 en botier DIL20

Un micro-contrleur est un :
Circuit intgr comprenant essentiellement un microprocesseur, ses mmoires, et
des lments personnaliss selon l'application. (Arrt franais du 14 septembre
1990 relatif la terminologie des composants lectroniques.)
Un micro-contrleur contient un microprocesseur.

Avantages :

Mise en oeuvre simple


Cots de dveloppement rduits

Inconvnients :

Plus lent
Utilisation sous optimale

13

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

14

Deux types de processeurs

CISC : Complex Instruction Set Computer


Grand nombre d'instructions,
Type de processeur le plus rpandu

RISC : Reduced Instruction Set Computer


Nombre d'instructions rduit
(slection des instructions pour une excution plus rapide)
Dcodage des instructions plus rapide

15

volution et Loi de Moore


Intel Pentium 4 Northwood C (2002)
architecture interne 32 bits

frquence dhorloge 2,4/3,4 Ghz


(bus processeur : 200Mhz)
plus de 42 millions de transistors, gravs en 0,13 m
450 MIPS
Source : Intel

Source : Intel

Intel 8086 (1978)


architecture interne 16 bits
bus 16 bits
frquence d'horloge 4,77/10 Mhz
39 000 transistors, gravs en 3m
0,33/0,75 MIPS

16

Source : Wikipdia

volution et Loi de Moore

Intel Core i7 Gulftown (2011)


architecture interne 64 bits
4/6 coeurs
frquence d'horloge 3,46 Ghz
Frquence de bus: 3,2 GHz
Frquence de transfert des donnes 25.6 Gb/sec.
1,17 Milliards de transistors, gravs en 32nm
6000 MIPS
The wall :
limite industrielle et physique,

Intel Pentium 4 Northwood C (2002)


architecture interne 32 bits

frquence dhorloge 2,4/3,4 Ghz


Frquence de bus: 0,2 GHz
plus de 42 millions de transistors, gravs en 0,13 m
450 MIPS

20 nm

performance / Watt consomm

17

Source : Wikipdia

Les structures des systmes micro-programms

Les diffrents bus d'un systme micro-programms

Un bus est un jeu de lignes partages pour lchange de mots numriques.


(Trait de llectronique, Paul Horowitz & Winfield Hill)

Dfinition : Un bus permet de faire transiter (liaison srie/parallle) des


informations codes en binaire entre deux points. Typiquement les informations
sont regroups en mots : octet (8 bits), word (16 bits) ou double word (32 bits).

Caractristiques d'un bus:

nombres de lignes,

frquence de transfert.
18

Largeur du bus
8

Unidirectionnel

Bidirectionnel

Issu de la documentation technique


du PIC16F628
19

Structures des systmes micro-programms


Il existe 3 Types de bus :

Bus de donnes : permet de transfrer entre composants des donnes,


ex. : rsultat d'une opration, valeur d'une variable, etc.

Bus d'adresses : permet de transfrer entre composants des adresses,


ex. : adresse d'une case mmoire, etc.

Bus de contrle : permet l'change entre les composants d'informations de


contrle [bus rarement reprsent sur les schmas].
ex. : priphrique prt/occup, erreur/excution russie, etc.

Dfinition : Une adresse est un nombre binaire qui indique un emplacement dans
une zone mmoire
20

Structures des systmes micro-programms

Structure de Von Neumann

Extraits du cours intitul Les


systmes micro-programms

Structure de Harvard

La diffrence se situe au niveau de la sparation ou non des mmoires programmes et donnes.


La structure de Harvard permet de transfrer donnes et instruction simultanment, ce qui
permet un gain de performances.
21

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

22

Savoir lire le schma


bloc dun microcontrleur

?
Issu de la documentation technique du
PIC16F628
23

Savoir lire le schma


bloc dun microcontrleur
Les mmoires :
RAM (Random Access Mem.)
mmoire rapide qui permet
de stocker temporairement
des donnes.

ROM (Read Only Memory)


mmoire lecture seule,
programme vie.

EEPROM
(Elec. Erasable Programmable
Read Only Memory)
mmoire lente qui permet de 24
stocker des donnes mme
aprs coupure de lalim.

Savoir lire le schma


bloc dun microcontrleur

PC (Program Counter)

Registre(case mmoire)

ALU

Multiplexeur

Dcodeur dinstructions

horloge

Stack (pile)
LIFO (Last In First Out)
FIFO (First In First Out)

25

Savoir lire le schma


bloc dun microcontrleur

Registre (case mmoire)

ALU

PC (Program Counter)

Multiplexeur

Dcodeur dinstructions

horloge

Stack (pile)
LIFO (Last In First Out)
FIFO (First In First Out)

Issu de la documentation
technique du PIC16F628

26

Savoir lire le schma


bloc dun microcontrleur

Ports dentres/sorties

USART
(Universal Synchronous Asynch.
ReceiverTransmitter)

interface de communication srie,

CCP (Capture/Compare/PWM)

Modulation en largeur d'impulsions

Timer

Comparateur

CAN/CNA

Rfrence de tension

Module HF

Liaison USB, ...

27

Les lments de choix


Architecture :

ALU (8, 16, 32, 64 bits)

Structure du processeur (Harvard, Von Neumann)

Type de processeur (RISC, CISC)

Taille des mmoires programme et donne

Nombre de ports dentre/sortie


Fonctionnalits :

Fonctions analogiques : CAN, CNA, Comparateur, ...

Fonctions de timing : Timer, Watchdog, ...

Fonctions de communication : UART (Communication


srie), USB, I2C, ...

Facilit de programmation : In-Circuit Serial


Programming, Self Programming, ...

Caractristiques lectriques :

Frquence dhorloge

Tensions dalimentation

Consommation dnergie, modes faible


consommation dnergie, ...
Caractristiques physiques :

Type de botier : DIL, PLCC, ...

Mise en oeuvre, maintenance :

Cot de dveloppement : outils de dveloppement,


formation, ...

Suivi du micro-contrleur : production suivie,


disponibilit, composant obsolte, ...

Source : Microchip

28

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

29

Binaire, octal, dcimal et hexadcimal


On rappelle tout d'abord les diffrentes bases qui nous seront utiles :
le binaire (base 2) est constitu de 2 chiffres :
0, 1
l'octal (base 8), est constitu de 8 chiffres :
0, 1, 2, 3, 4, 5, 6, 7
le dcimal (base 10), est constitu de 10 chiffres :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
l'hexadcimal (base 16), est constitu de 16 chiffres :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Remarque : pour connatre la base associe un nombre, on le note entre parenthse avec en
indice une lettre b,o,d ou h selon qu'il s'agit d'un codage binaire, octal, dcimal ou
hexadcimal. Par exemple, (1001)b, (3F1)h ou (128)d .
30

Codes pondrs

Dans une base donne, le nombre s'exprime comme une somme pondre. Par exemple, le
nombre 128 dcimale (base 10) est constitu de 3 chiffres :

le chiffre 8 est affect du poids de


le chiffre 2 est affect du poids de
le chiffre 1 est affect du poids de

1 (units)
10 (dizaines) Un Zro
100 (centaines) Un ZroZro

Le nombre peut donc s'crire


1 x 100

Chiffre

2 x 10

8 x 1

(128)d

Poids
31

Codes pondrs

Le nombre 10 binaire (base 2) est constitu de 2 chiffres :

le chiffre 0 est affect du poids de


le chiffre 1 est affect du poids de

1
10 (exprim en base 2)

Le nombre peut donc s'crire


1 x 10

Chiffre

0 x 1

(10)b
Poids

Remarque : le nombre 10 binaire ne s'exprime pas dix car ceci sous-entend que le nombre
est exprim en dcimal...
32

Codes pondrs
Dans une base donne, le nombre s'exprime comme une somme pondre. Par exemple, le nombre
1F8 hexadcimal (base 16) est constitu de 3 chiffres :

le chiffre 8 est affect du poids de


le chiffre F est affect du poids de
le chiffre 1 est affect du poids de

1 (units)
10 (dizaines)
100 (centaines)

Le nombre peut donc s'crire


1 x 100

F x 10

8 x 1

(1F8)h

Conversion binaire-hexadcimal : le codage hexadecimal a t cr afin d'allger l'exploitation des


nombres binaires. Il permet en particulier une conversion simple par regroupement des bits par 4 en
partant de la droite, chaque paquet tant alors simple convertir :

0001
1

1111
F

1000
8

(1F8)h

33

Conversion
Conversion en dcimal : dveloppement en somme de puissances de la base.

(1

12
Soit

02
3

1)b

02

12

12 02 02 12 =81=9 b

(3

316
2

F)h

216
1

15 16

316 216 15 16 =768 32 15 =815 b

34

Conversion dcimal binaire : division par 2 successives...


(14)d

Se

(14)d = (1 1 1 0)b

1
ns
d

el

ec

tu
re.

..

Conversion dcimal hexadcimal : division par 16 successives...


(282)d

16

10=A

17

16

(282)d = (11A)h
Se

ns

de

l ec

tu

re
..

.
35

Binaire, octal, dcimal et hexadcimal

Exercices 1 : convertir en dcimal les chiffres binaires suivants :


(111)b, (1010)b, (1001 1110)b
Exercices 2 : convertir en binaire les chiffres dcimaux suivants :
8, 12, 256, 1023
Exercices 3 : convertir en hexadcimal les chiffres binaires suivants :
(111)b, (1010)b, (1001 1110)b
Exercices 4 : convertir en hexadcimal les chiffres dcimaux suivants :
8, 12, 67, 256, 1023, 12341

36

Binaire, octal, dcimal et hexadcimal


Pour indiquer le signe dun nombre binaire, on ajoute un bit en tte du nombre.
On peut ainsi coder les entier relatifs et les nombres rels.
Bit de signe

Un octet (8bits) :

= -108 (decimal)

LSB : Low Significant Bit


MSB : Most Significant Bit
Un octet (8 bits)
Un mot ou word (16 bits)
Un double mot ou double word (32 bits)

37

Oprations arithmtiques binaires


Les techniques de calcul des oprations arithmtiques peuvent tre transposes du dcimal
au binaire.

Addition

: V = A + B,

Exemple : (0110)b + (0101)b = (1011)b

Multiplication

: V = A x B,

Exemple : (0110)b . (0101)b = (011110)b

Soustraction
: V = A B,
Pour calculer V, on calcule la somme entre A et le complment deux de B
Exemple : (0110)b (0101)b = (0001)b

NOTEZ BIEN QUE...


Une multiplication (division) par 2 correspond un dcalage gauche ( droite).
Complment deux : remplacer les un par des zros (et vice-versa), puis ajouter 1.
Exemple : (1011) donne (0100)b + (1)b = (0101)b
38

Exercices 1 : effectuez les additions binaires suivantes

Exercices 2 :

Exercices 3 :

Exercices 4 : divisez (multipliez) par deux (0100)b, (1000101)b, (3F)h, (FF)h.


39

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

40

Instructions
Un jeu dinstruction est un ensemble doprations directement ralisables sur un
systme micro-programm donn.
Par exemple : le PIC18F4520 (RISC) possde un jeu dinstructions compos de 75
instructions. Lexcution dune instruction peut ncessiter un ou plusieurs cycles
dhorloges suivant la complexit de l'instruction.

NOTE : Un cycle dhorloge correspond une priode de lhorloge (signal de


rfrence temporelle). La frquence dhorloge est le nombre de cycles effectus
par une horloge en une seconde.

41

Instructions
Une instruction est compose au minimum de deux parties:
Instruction = OPCODE + oprande(s)
OPCODE (Operation CODE) : partie dune instruction qui prcise quelle
opration doit tre ralise

Extrait du datasheet (documentation technique) du PIC18F4520.

42

Pipeline et flot dinstructions


3 tapes pour l'excution d'une instruction :

Lecture de linstruction (1)


Dcodage de linstruction (2)
Excution de linstruction (3)
Temps

3
1

3
1

Cration dun pipeline => permet uneexcution plus rapide des instructions
1

Temps

43

Les diffrents modes d'adressage


La nature et le nombre doprandes qui constituent une instruction dterminent le mode
dadressage de linstruction. On distingue 4 modes dadressage principaux.

Ladressage inhrent : il ny a pas doprande !


ex : NOP, RESET, CLRWDT ;
Description de l'instruction RESET extraite de la notice
technique (le datasheet) du PIC 18F4520 [microcontrleur utilis en TP].

ATTENTION : Un nombre important d'information


utiles figure sur ces fiches...

44

Les diffrents modes d'adressage


La nature et le nombre doprandes qui constituent une instruction dtermine le mode
dadressage de linstruction. On distingue 4 modes dadressage principaux.

Ladressage immdiat : loprande est une valeur


ex : MOVLW 5Ah ;
Nombres de cycles ncessaires l'excution

Excution de l'instruction (pipeline 4 niveaux)

45

Les diffrents modes d'adressage


La nature et le nombre doprandes qui constituent une instruction dtermine le mode
dadressage de linstruction. On distingue 4 modes dadressage principaux.

Ladressage direct (tendu) : loprande est ladresse (bits de


poids faibles de l'adresse complte) de la donne dans la
page mmoire active.
ex : ADDWF 000Fh,
En mode direct tendu : on transmet l'adresse complte

46

Les diffrents modes d'adressage


La nature et le nombre doprandes qui constituent une instruction dtermine le mode
dadressage de linstruction. On distingue 4 modes dadressage principaux.

ladressage indirect (index) : loprande est ladresse dun registre qui contient ladresse de la
donne.

En mode indirect index, on ajoute un dcalage par rapport ladresse.

NOTE : Il existe de nombreux autres modes dadressage (ex. implicite, inhrent, relatif) : leur nombre
varie en fonction du constructeur et du micro-contrleur !

47

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

48

Logique combinatoire et squentielle


La comprhension du fonctionnement d'un microcontrleur s'appuie sur des connaissances
lmentaires de logique combinatoire et squentielle.

un systme est dit combinatoire si l'tat (logique) des sorties ne dpend que de l'tat
(logique) prsent appliqu ses entres.

un systme est dit squentiel si l'tat (logique) de la sortie du systme l'instant t dpend
de l'tat (logique) prsent appliqu aux entres et des tats de la sortie dans le pass.

49

Table de vrit
Considrons tout d'abord le cas de la logique combinatoire 1 sortie (le cas plusieurs sorties
n'est pas trs diffrent). Pour connatre l'tat du systme aux divers combinaisons logiques des
entres on construit la table de vrit qui exprime la valeur de la sortie s en fonction de toutes
les configurations possible des entres binaires (Ei), cf. ci-dessous.

E1

E2

E1

E2

E3

On notera que pour une fonction logique une seule variable d'entre, il existe 22=4 combinaisons de
sorties.
E1

De mme, pour deux variables d'entres, il existe 24=16 combinaisons de sorties.


E1

E2

50

Oprateurs lmentaires
Dans ces configurations, on extrait typiquement 6 fonctions logiques d'intrt que sont les oprateurs
NON (une entre), ET, OU, ET-NON, OU-NON, et OU-EXCLUSIF (deux entres).

E1

NON

E1

E2

OU-EX

E2

OU

E1

E2

ET-NON

E1

E2

E1

E2

ET

OU-NON

Les oprateurs ET-NON et OU-NON forment un groupe complet, c..d. que toute fonction logique
complexe peut tre construite sur la base de l'une de ces fonctions lmentaires.
51

Algbre de BOOLE
Les oprateurs logiques lmentaires permettent la construction d'une algbre dite algbre de
Boole. Ainsi, si on considre deux entres binaires A et B, on adopte alors la convention suivante
pour construire des quations logiques :
NON
ET
OU,

A
AB
A B

AB=AB
AB=AB

ET-NON,

A B
A B

OU-NON,
OU-EXCLUSIF

Les diffrentes oprations bnficient des proprits suivantes

Commutativit :

Associativit :

ABC= ABC
A B C= A BC
A B C = A B C

AB =BA
A B= B A
A B= B A

AB=BA
A B= B A

Lois de De Morgan :

Distributivit :

A BC = A B AC
A BC = AB AC

AB= AB
A B= AB

52

Le chronogramme
Dans les microcontrleurs, les tats du systme changent en fonction d'une base de temps qui est
l'horloge. Ceci conduit naturellement introduire les chronogrammes comme outil d'analyse des
tats logiques d'un systme.

Le chronogramme a pour objet de tracer l'tat binaire de la (des) sortie(s) en fonction de l'volution
au cours du temps de l'tat des entres. Ceci est illustr ci-dessous.

53

Les bascules asynchrones


Pour l'essentiel, une bascule asynchrone est une fonction mmoire qui est commande. Ce
type de fonction est notamment utilis pour crer des registres du microcontrleur.

Le verrou D (Latch D)

Le verrou D (ou bascule D asynchrone) est trs rpandu : elle copie en sortie l'tat de l'entre D
uniquement si sa commande C est active ; dans le cas contraire, l'tat en sortie Q est celui
prcdent, cf. chronogramme.
D
C

54

Exercice : tude de la bascule RS


crire la table de vrit et complter le chronogramme pour le verrou RS ci-dessous.

R
S
Q
Q

55

Les bascules synchrones


Une bascule synchrone est une bascule qui ne change d'tat que sur front montant ou descendant
appliqu sur son entre de commande. Ce type de bascule est la base du fonctionnement du
microcontrleur.

La Bascule D (Flip-Flop D)
C'est la version synchrone du verrou D !
D
C

56

Les bascules synchrones


La Bascule JK (Jump-Knock out)

J
K

57

Structures des ports dentres/sorties


Un port dentres/sorties est par dfinition un port bidirectionnel.
De fait, il est donc ncessaire de configurer la direction du port (in ou out). Dans le
microcontrleur, des registres spcifiques sont ddis la gestion de ces ports...

Extrait de la documentation technique du PIC18F4520 de Microchip.

58

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

59

Les registres
Un registre 8 bits est synonyme d'un
ensemble de 8 cases mmoire. De
nombreux registres sont utiliss pour
grer le microcontrleur.
Le registre W (accumulateur)
Le compteur programme (PC)
Le registre dtat (Flags)
Les registres de configuration :
les registres de directions pour les ports
dentres/sorties (TRIS, SFR), les registres de
gestion des interruptions, de gestion de la
mmoire (BSR, GPR, etc.)
ATTENTION : tous les registres du microcontrleur ne sont pas reprsents sur le schma...

60

Par exemple : le registre d'tat


Le registre d'tat (Status Register) contient des bits d'informations sur les oprations arithmtiques
menes par l'ALU (ex., le dpassement de format aprs avoir demand l'addition de deux valeurs 8
bits).

61

Phase de dmarrage du micro-contrleur


Suite une opration de remise zro (RESET), le micro-contrleur effectue une phase de
dmarrage :
1/ RESET : il peut tre dclench par la mise sous tension du micro-contrleur, la rception dun
signal sur la broche RESET du micro-contrleur, une instruction de RESET, ...

2/ Initialisation du micro-contrleur : le micro-contrleur effectue une temporisation afin de


garantir la stabilit des signaux dhorloge.

3/ Effacement des registres : le micro-contrleur efface le contenu des registres (variable en


fonction du mode de RESET que vous effectuez).

4/ Lecture du vecteur RESET


Le micro-contrleur lit ladresse du programme principal dans la mmoire programme.

5/ Dbut de lexcution du programme principal.


62

Organisation de la mmoire programme


Compteur de programme (PC)
le compteur de programme

Pile (Stack)
une pile pour grer les appels
programmes et les interruptions

Vecteur Reset
pointeur vers ladresse mmoire du
dbut du programme principal

Vecteurs d'interruption
pointeur vers ladresse mmoire du
programme excuter en cas
dinterruptions

Mmoire programme
zone mmoire rserve au stockage des
programmes crits par lutilisateur

Remarque : Un pointeur est une variable contenant une adresse mmoire.

63

Excution dune
instruction
Adressage inhrent
Linstruction ne comporte pas doprande et
agit implicitement sur un registre.
Exemples : SLEEP, RESET, NOP

Adressage immdiat
Linstruction comporte une oprande et agit
explicitement sur un registre
Exemples : ADDLW, MOVLW

Droulement:
(1) Le compteur programme indique ladresse
de linstruction suivante dans la mmoire
programme. (2) Linstruction est lue et stocke
dans le registre dinstruction. (3) Puis elle est
dcode par le module de dcodage et de
contrle des instructions. (4) Finalement elle est
64
excute.

Excution dune
instruction
Adressage direct (tendu)
Linstruction comporte une oprande qui
indique ladresse mmoire sur laquelle
seffectue lopration.
Exemples : CLRF (direct), MOVFF (tendu)

Droulement:
(1) Lecture de linstruction dans la mmoire
programme l'adresse pointe par le compteur
programme. (2) Lecture de linstruction et
dcodage. (3) Pour ladressage direct, loprande
constitue la partie basse de ladresse mmoire sur
laquelle seffectue lopration, la partie haute est
complte avec le registre BSR. (3') Pour
ladressage tendu, loprande est ladresse
complte de la case mmoire sur laquelle
seffectue lopration. (4) Finalement linstruction
est excute sur la case mmoire pointe.

65

Organisation de la mmoire donnes

BSR (Bank Select Register)


Permet de pr-slectionner la page pour un accs
mmoire plus rapide.
=> notion de pagination de la mmoire

GPR (General Purpose Registers)


Espaces mmoires qui permet le stockage de
donnes temporaires (variable, ...)

Access Bank
pointeurs vers des zones mmoires

SFR (Special Function Registers)


Registres de contrle et
priphriques (notamment...)

dtat

pour

les
66

Pagination de la mmoire
La pagination de la mmoire consiste diviser la mmoire en blocs (pages) de longueur
fixe. (Source : Comment a Marche)
Une adresse mmoire est alors divise en deux parties :
Partie haute

Partie Basse

Dans le cas dune instruction avec adressage direct, on transmet seulement la partie basse
de ladresse. Le micro-contrleur utilise le registre BSR pour complter ladresse.

Attention !! En adressage
direct, on doit sassurer que
lon travaille dans la bonne
page mmoire.
67

Excution dune
instruction
Adressage direct (tendu)
Linstruction comporte une oprande qui
indique ladresse mmoire sur laquelle
seffectue lopration.
Exemples : CLRF (direct), MOVFF (tendu)

Droulement:
(1) Lecture de linstruction dans la mmoire
programme l'adresse pointe par le compteur
programme. (2) Lecture de linstruction et
dcodage. (3) Pour ladressage direct, loprande
constitue la partie basse de ladresse mmoire
sur laquelle seffectue lopration, la partie haute
est complte avec le registre BSR. (3') Pour
ladressage tendu, loprande est ladresse
complte de la case mmoire sur laquelle
seffectue
lopration.
(4)
Finalement
linstruction est excute sur la case mmoire
pointe.
68

Excution dune
instruction
Adressage indirect (index)
Linstruction
comporte
une
oprande
indiquant un pointeur, c..d. une adresse de la
case
mmoire
sur
laquelle
seffectue
lopration.
Exemples : ADDWF, INDF1, 1

Droulement:
(1) Lecture de linstruction dans la mmoire
programme l'adresse pointe par le compteur
programme. (2) Lecture de linstruction et
dcodage. (3) La valeur de loprande indique
le pointeur utiliser. (4) La valeur pointe est
lue (avec un ventuel dcalage en mmoire). (5)
Finalement linstruction est excute sur la
valeur pointe.
69

70

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

71

Conception d'un systme embarqu

Formellement, la conception d'un systme embarqubas sur un microcontrleur peut tre


dcompose en 3 tapes distinctes.
(1) Le dveloppement matriel s'appuie sur un cahier des charges, c..d. la dfinition des
fonctionnalits et des performances du systme. Cette tape doit permettre de spcifier les
caractristiques du microcontrleur, de ses priphriques et de l'lectronique associe.
(2) Le dveloppement logiciel s'appuie sur l'tape prcdente pour construire un algorigramme,
puis le code qui va tre test. Cette tape requiert que vous choisissiez le langage (assembleur
et/ou volu) que vous utiliserez sur des bases objectives, par exemple de manire optimiser
le temps de dveloppement, la facilit de maintenance, le nombre d'oprations, etc.
(3) La phase de test doit tre mene pour vrifier que le cahier des charges initial est bien rempli.
Cette phase de test finale n'empche pas d'avoir men des tests spars lors des phases de
dveloppement matriel et logiciel.

72

Chacune de ces trois tapes prcdente peut tre relativement complexe et mobiliser des moyens
financiers et humains consquents. Par ailleurs, le test une tape peut remettre en cause les choix fait
une tape prcdente : en pratique, on est donc plutt confront un cycle de conception plutt qu'
un enchanement parfaitement squentiel !

Dveloppement matriel

Dveloppement logiciel

Tests du systme complet

73

Le dveloppement du logiciel
La construction d'un code machine excutable s'appuie sur un certain nombre de composantes
(fichiers sources, librairies) qui suivent le diagramme organisationnel ci-dessous.
(1) Les fichiers sources crits dans un langage
assembleur et/ou volu doivent permettent au
systme embarqu d'effectuer les tches requises.
(2) Le compilateur et/ou l'assembleur a pour rle de
convertir les instructions des sources en langage
machine.

(3) L'diteur de lien permet de construire un


excutable partir des objets issus soit des sources
soit de librairies pr-existantes.
74

La programmation en Assembleur
Le langage Assembleur (abrg ASM) est un langage de programmation de bas-niveau, qui fait la
correspondance entre des instructions en langage machine (mots binaires) et des symboles appels
mnmoniques plus simples utiliser.

Source : Microchip

Le langage Assembleur est un langage compil, c'est dire :


1. Lutilisateur crit son programme en langage Assembleur. Ce fichier est assembl pour traduire le
programme en langage machine (avec ventuellement des amliorations).
2. Le programme en langage machine est alors utilis pour programmer le micro-contrleur, c..d.
qu'il est transfr dans la mmoire (programme) pour tre excut.
75

Les types dinstructions en Assembleur


A. Les instructions propres au micro-contrleur :

Les instructions de transfert

movlw, movf, ...

Les instructions arithmtiques

decf, addwf, ...

Les instructions logiques

xorlw, andlw, ...

Les instructions de branchement

bz (branch if zero), bra (branch always), ...

B. Les instructions pr-processeur permettent au programmeur de donner des indications au


compilateur, elles sont destines au PC et non pas au micro-contrleur !
Il existe diffrents types dinstruction pr-processeur :

les instructions de contrle : org = dbut du programme, end = fin du programme, etc. ;

les instructions conditionnelles

les instructions relatives aux donnes

les instructions pour les macros

: if, else, endif, etc. ;


: res = rservation despace mmoire, etc. ;
76

Algorigrammes
La description du programme par un algorigramme permet de :

gagner en efficacit lors de la phase de codage du programme,


doptimiser la structure du programme,
de clarifier le fonctionnement du programme,
le rendre comprhensible une personne extrieure.

Dbut, Fin,
Interruption

Sous-programme

Initialisation
Test d'une condition

Instruction

Vrai

Faux

77

Premier programme
en assembleur

Dbut

Broche 2 7 du PORTB en sortie


Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique

Broche 1
du PORTB
l'tat haut ?

Broche 2 du PORTB
l'tat haut

Broche 2 du PORTB
l'tat bas
78

Structure dun programme en assembleur


Dans un programme en assembleur, on peut distinguer une partie prliminaire qui est systmatique
c..d. qui ne change pas d'un programme l'autre.

;
;
;
;
;
;
;
;
;
;

Dbut

Filename : premier_programme.asm
Description :Recopie de l'tat de la broche 1 du PORTB
sur la broche 2 du PORTB
Author:
Eric Magraner
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; La configuration du micro-contrleur est dfinie avec MPLAB
; (Logiciel de dveloppement Microchip)

79

La premire partie concerne l'en-tte qui dfinit, le plus clairement possible, la fonction du
programme ainsi que divers informations permettant de grer l'historique du code (auteur, date
d'critures et de modifications, numro de version, etc.)

;
;
;
;
;
;
;
;
;

Dbut

Filename : premier_programme.asm
Description : Recopie de l'tat de la broche 1 du PORTB
sur la broche 2 du PORTB
Author:
Eric Magraner
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; et configurations matrielles par dfaut
#include <MA_CONFIG.inc>
; Modification des configurations matrielles par dfaut
80

La dclaration du micro-contrleur permet au compilateur de gnrer un code machine qui soit


comprhensible pour le microcontrleur que vous souhaitez programmer.

;
;
;
;
;
;
;
;
;
;

Dbut

Filename : premier_programme.asm
Description : Recopie de l'tat de la broche 1 du PORTB
sur la broche 2 du PORTB
Author:
Eric Magraner
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; et configurations matrielles par dfaut
#include <MA_CONFIG.inc>
; Modification des configurations matrielles par dfaut

81

Une directive au pr-processeur demande l'inclusion d'un fichier de dfinition spcifique au


microcontrleur qui dfinit certaines configurations matrielles par dfaut et permet de simplifier
l'criture des programmes, cf. transparent suivant.

;
;
;
;
;
;
;
;
;

Dbut

Filename : premier_programme.asm
Description : Recopie de l'tat de la broche 1 du PORTB
sur la broche 2 du PORTB
Author:
Eric Magraner
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; et configurations matrielles par dfaut
#include <MA_CONFIG.inc>
; Modification des configurations matrielles par dfaut

82

Extrait du fichier p18f4510.inc de dfinitions propre au micro-contrleur

;----- Register Files


PORTA
EQU H'0F80'
PORTB
EQU H'0F81'
PORTC
EQU H'0F82'
PORTD
EQU H'0F83'
PORTE
EQU H'0F84'
LATA
EQU H'0F89'
LATB
EQU H'0F8A'
LATC
EQU H'0F8B'
LATD
EQU H'0F8C'
LATE
EQU H'0F8D'
.
.
.
.
.
.

83

Une directive au pr-processeur supplmentaire peut tre spcifie de manire modifier la


configuration par dfaut tablie dans p18f4510.inc.
Note : pour savoir comment modifier ces configurations, il faut aller voir le fichier p18f4510.inc.

;
;
;
;
;
;
;
;
;

Dbut

Filename : premier_programme.asm
Description :Recopie de l'tat de la broche 1 du PORTB
sur la broche 2 du PORTB
Author:
Eric Magraner
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; et configurations matrielles par dfaut
; #include <MA_CONFIG.inc>
; Modification des configurations matrielles par dfaut

84

Exemple de ce que pourrait tre le fichier MA_CONFIG.inc

;----- Utilisation de l'oscillateur


;----- en mode haute vitesse
CONFIG OSC = HS

85

On peut distinguer ensuite une seconde partie qui correspond la configuration des lments du
microcontrleur qui entrent directement en jeu dans la fonction ralise...
La premire opration consiste systmatiquement initialiser le vecteur RESET. Notez que cette
tape n'a pas t note dans l'algorigramme (ce qui pourrait tre considr comme une lacune...).

Broche 2 7 du PORTB en sortie


Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique

org
h'0000'
goto init
init

clrf
movlw
movwf

PORTB
b'00000001'
TRISB

clrf
movlw
movwf

LATB
0Fh
ADCON1

; initialisation du vecteur RESET

; Configuration de la direction
; du PORTB. Broche 1 en entre.
; Broche 2 8 en sortie
; Configuration des broches 1 4
; du PORTB en E/S numrique

86

La seconde opration correspond la configuration du PORT B telle que dcrite par


l'algorigramme... Cette configuration est directement fourni par le Datasheet du PIC 18F4520...

Broche 2 7 du PORTB en sortie


Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique

org
h'0000'
goto init
init

clrf
movlw
movwf

PORTB
b'00000001'
TRISB

clrf
movlw
movwf

LATB
0Fh
ADCON1

; initialisation du vecteur RESET

; Configuration de la direction
; du PORTB. Broche 1 en entre.
; Broche 2 8 en sortie
; Configuration des broches 1 4
; du PORTB en E/S numrique
87

La troisime partie du programme est ddie la ralisation de la fonction principale, c..d.


la boucle et le test.

Broche 1
du PORTB

l'tat haut ?

Broche 2 du
PORTB
l'tat haut

boucle

allumer
eteindre

btfss

PORTB,0

goto
bsf
goto
bcf
goto

eteindre
PORTB,1
boucle
PORTB,1
boucle

Broche 2 du
PORTB
l'tat bas

; Broche 1 du PORTB l'tat haut ?


; saute l'instruction suivante si
; tat haut
; Broche 2 du PORTB l'tat haut
; Broche 2 du PORTB l'tat bas

END
88

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

89

Les interruptions
Une interruption est un arrt temporaire de l'excution normale d'un programme
informatique par le microprocesseur afin d'excuter un autre programme (appel routine
d'interruption).
Les interruptions matrielles sont utilises lorsqu'il est ncessaire de pouvoir ragir en
temps rel un vnement asynchrone, ou bien, de manire plus gnrale, afin
d'conomiser le temps d'excution li une boucle de consultation (polling loop). (Source
: Wikipdia)

Une interruption peut avoir diffrentes sources : priphrique dentre/sortie, timer,


watchdog (cf. explications plus loin), ...
Les interruptions sont utilises pour avertir le micro-contrleur quand une condition
est remplie. En utilisant les interruptions, on vite que le micro-contrleur reste en
attente inutilement (pooling-loop), elles permettent de grer les vnements
asynchrones.
90

Les interruptions
Les interruptions sont, en gnral, contrles par 3 bits :

Un bit de flag

indique quune interruption a t dclenche et indique la source.

Un bit de validation

permet lutilisateur dactiver ou non une interruption.

Un bit de priorit

permet de slectionner la priorit (haute/basse) de linterruption.


Gestion des priorits :
Il existe des interruptions de priorit hautes et basses. chaque type de priorit
correspond un vecteur dinterruption et donc potentiellement une gestion diffrente des
interruptions suivant leur priorit.
91

Schma de la logique dinterruption


Ce schma permet de comprendre
- le fonctionnement de la logique
dinterruption,
- la priorit accorde une interruption,
- la configuration de la logique mettre en
place pour lapplication souhaite
On notera notamment que si une
interruption de haute priorit est en
concurrence avec une interruption de basse
priorit, linterruption de haute priorit
prend la main.

92

Droulement d'une interruption


(1). Rception de linterruption : le micro-contrleur reoit une interruption.
(2). Sauvegarde des donnes (sauvergarde du contexte) : le micro-contrleur sauve une partie

variable (en fonction du type dinterruption) de son tat interne dans la pile, notamment
ladresse dans la mmoire programme o le micro-contrleur sest arrt.

(3). Lecture de ladresse du vecteur dinterruption et chargement dans le PC.


(4). Excution de la routine dinterruption,
Attention !! Lutilisateur doit penser effectuer une sauvegarde de donnes du
programme principal pour ne pas les effacer pendant la routine dinterruption et
galement supprimer le flag dinterruption qui a dclench linterruption.

(5). Rtablissement des donnes : le micro-contrleur rtablit les donnes stockes dans la pile.
(6). Le micro-contrleur reprend son fonctionnement normal...

93

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

94

Premier programme avec interruption


Dbut

Interruption

Broche 2 7 du PORTB en sortie


Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique
Interruption chaque front montant sur la
broche 1 du PORTB

Sauvegarde du contexte
Identification de l'interruption

Suppression du flag d'interruption

NOP

Change l'tat de la broche 2 du PORTB

Fin

Restauration du contexte
Retour au programme principal
95

Le dbut d'un programme en assembleur, avec interruption, reste trs proche de celui d'une version
sans interruption. On peut tout de mme remarquer des directives de rservation d'emplacements
mmoire en prvision de la sauvegarde du contexte lors de l'interruption.
;
;
;
;
;
;
;

Dbut

Filename : premier_programme_interruption.asm
Change l'tat de la broche 2 du PORTB chaque front
montant sur la broche 1 du PORTB (gestion par interruption
Author:
Eric Magraner
Company:
Universit Paul Czanne
Revision:
1.00
Date:
2006/07

list p=18f4520
; Dfinition du micro-contrleur utilis
#include <p18f4510.inc>
; Dfinitions des emplacements mmoires des registres
; et configurations matrielles par dfaut
#include <MA_CONFIG.inc>
; Modification des configurations matrielles par dfaut
W_TEMP
RES 1
; Rservation d'un octet en mmoire
STATUS_TEMPRES 1
; Rservation d'un octet en mmoire
BSR_TEMP
RES 1
; Rservation d'un octet en mmoire
96

Du code du programme principal, on distingue les tapes classiques d'initialisation du vecteur RESET
et du PORT B. On note aussi les parties propres aux interruptions : initialisation du vecteur et du
registre d'INTERRUPTION.

org

init

Broche 2 7 du PORTB en sortie


Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique
Interruption chaque front montant sur la
broche 1 du PORTB

NOP

h'0000'
goto
init

; Init. du vecteur RESET

org
goto

h'0008'
; Init. du vecteur INTERRUPTION
routine_interruption

clrf
movlw
movwf
clrf
movlw
movwf
movlw
movwf

PORTB
b'00000001'
TRISB
; Config. de la dir. du PORTB
LATB
0Fh
ADCON1
; Broche 14 du PORTB en E/S num.
b'10010000'; 0x90 -> w
INTCON
; w -> INTCON (Init. du registre d'interrup.)

boucle nop
goto

Fin

boucle

END
97

Le registre d'interruption INTCON permet, d'une part d'activer les interruptions (bit 7), et d'autre
part d'activer le mode interruption externes INT0 (bit 4). Dans ce cas, l'interruption sera dtecte
sur la broche 0 du port B (cf. datasheet).

98

Le dclenchement d'une interruption conduit le microcontrleur sauver l'adresse de l'instruction


courante dans la pile, puis charger le vecteur d'interruption dans le PC.
Ds lors, il est systmatiquement ncessaire de (1) sauvegarder le contexte et (2) identifier l'origine
de l'interruption.

routine_interruption

Interruption

Sauvegarde du contexte
Identification de l'interruption

; Sauvegarde du contexte
movwf W_TEMP
movff STATUS, STATUS_TEMP
movff BSR, BSR_TEMP

; Sauvegarde de W
; Sauvegarde de STATUS
; Sauvegarde de BSR

; identification de l'origine de l'interruption


btfsc INTCON,1
goto
interruption_INT0
bra
restauration_contexte

99

Il faut ensuite systmatiquement (3) mettre zro le bit d'interruption puis, (4) excuter la fonction
pour laquelle l'interruption a t prvue, et enfin (4) faire la restauration du contexte (5) et retourner
au programme principal.
interruption_INT0
Suppression du flag
d'interruption
Change l'tat de la broche 2
du PORTB

Restauration du contexte
Retour au prog. principal

bcf

INTCON,1

; Suppression du flag d'interruption

movlw
xorwf
goto

0x02
; 0x02 -> w
PORTB
; w xor PORTB -> PORTB
restauration_contexte

;
Restauration du contexte
restauration_contexte
movff BSR_TEMP, BSR
movff W_TEMP, W
movff STATUS_TEMP, STATUS

; Restauration de BSR
; Restauration de W
; Restauration de STATUS

retfie

100

Structure gnrale dun programme


Reset Vector

Interrupt Vector

Dbut du programme

Dbut de la routine dinterruption

Dclarations

Sauvegarde des donnes

Configuration

Identification de linterruption et
suppression du flag dinterruption
Routine dinterruption

Programme principal

Fin

Rtablissement des donnes


Retour au programme principal
101

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le microcontrleur / spcificit pour le PIC 18F4520

102

Fonctions intgres du PIC 18F4520


Les microcontrleurs intgrent des fonctionnalits qu'il est souvent utile de connatre
pour gagner du temps de dveloppement. Par exemple, le PIC18F4520 intgre les
modules suivants :

Les compteurs ...................................................................

Les modules Capture Compare PWM .............................

Les comparateurs .................................................................

Les modules de conversion analogique/numrique ..............

Les chiens-de-garde

Les diffrents modes de gestion de l'alimentation

........................................................

Timer
CCP

Comparator
CAN/CNA

Watchdog

Une prsentation complte des diffrentes fonctions sort du cadre de ce cours.


Nous nous limiterons ici la prsentation du module TIMER que nous
utiliserons en TP...

103

La fonctionnalit Timer
Les timers sont des registres incrments chaque ralisation dun vnement, la
valeur de ces registres pouvant tre pr-positionne une valeur initiale.

Les vnements qui commandent l'incrmentation sont

un cycle dhorloge, c'est la fonction timer ;


un front montant sur une broche en entre, c'est la fonction counter.

Il en dcoule que le module timer peut remplir les fonctions suivantes,

Utilisation timer : permet de fournir une rfrence temporelle partir de lhorloge du


micro-contrleur, notamment dans le cadre dapplications temps rel.
Utilisation counter : sert compter un nombre dvnements asynchrones sur une
broche dentre du micro-contrleur.
104

Illustration par un exemple simple...


Cahier des charges :
On cherche utiliser le module timer du microcontrleur pour faire clignoter
une LED connecte sur le port RB1. La priode est fixe une frquence de 1 Hz.

Une mthode gnrale...


(1) Lire dans la documentation (data-sheet) la section traitant du module.
(2) Dduisez-en les registres configurer lors de la phase d'initialisation.
(3) Construisez l'algorigramme pralable l'criture du programme.
(4) crivez le programme assembleur, testez-le et dbuggez-le...

105

Extrait du data-sheet du PIC18F4520, p. 123-125

106

Extrait du data-sheet du PIC18F4520, p. 123-125

107

Questions :
(1) Expliquez comment fonctionne le module TIMER0 ? Comment peut-on l'utiliser
pour faire basculer la sortie RB1 toute les 0.5 seconde ?
(2) Donnez les valeurs d'initialisation des diffrentes registres pour rentrer dans le
cahier des charges.
(3) Construisez l'algorigramme pralable l'criture du microcode.
(4) Finalement, crivez le programme en assembleur.
(5) valuez l'erreur sur la priode associe au temps d'excution du code et
modifiez les registres en consquence.

108

Algorigramme

!
R
E

PL

M
O
C

Dbut

NOP

Fin
109

T
L

P
M
O

AC

Programme assembleur

R!

;
;
;
;
;
;
;
;
;

Filename : timer0.asm
Description : Gnration d'un signal carr sur la
broche 1 du PORTB par utilisation du module TIMER0
Author:
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2007/09

Dbut

110

T
L

P
M
O

R!

Programme assembleur [suite]

AC

111

Capture, Compare, PWM


Les modules CCPM possde trois modes de fonctionnement :

capture
Le mode capture dclenche une action si un vnement pr-dtermin apparat (ex :
changement dtat sur une broche). Utilis avec les timers, ce module peut compter
les temps d'arrives.

compare
Le mode compare effectue une comparaison permanente entre le contenu dun timer
et une valeur donne pour dclencher une action si ces contenus sont gaux.

Pulse width modulation (PWM)


Le mode PWM gnre un signal rectangulaire de frquence et de rapport cyclique
choisis par lutilisateur.
112

Illustration par un exemple simple...


Cahier des charges :
On cherche utiliser le module CCP du microcontrleur pour gnrer un signal
rectangulaire sur la broche RC2. La priode du PWM est fixe une frquence de
600 Hz et le rapport cyclique 0,5.

Questions :
(1) Expliquez comment les modules CCP1 et TIMER2 fonctionnent ensemble pour
produire un signal rectangulaire de priode et de rapport cyclique donn.
(2) Identifiez les registres initialiser et les valeurs associes.
(3) Construisez l'algorigramme et crivez le programme assembleur.

113

Algorigramme

!
R
E

PL

M
O
C

Dbut

NOP

Fin
114

T
L

P
M
O

AC

Programme assembleur

R!

;
;
;
;
;
;
;
;
;

Filename : pwm0.asm
Description : Gnration d'un signal carr sur la
broche 2 du PORTC par utilisation du module PWM
Author:
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2007/09

Dbut

115

Les comparateurs
Les comparateurs permettent de comparer le signal analogique prsent sur un
broche du micro-contrleur une valeur de rfrence.

Cette valeur de rfrence peut tre

soit un signal analogique dont on fait l'acquisition sur une


autre broche du micro-contrleur (convertisseur analogique numrique),
soit une tension de rfrence gnre en interne par le microcontrleur laide du module de gnration de tension de
rfrence.

Ce principe de fonctionnement dcrit ci-contre permet typiquement d'effectuer une


commande de type tout-ou-rien (TOR).
116

Illustration par un exemple simple...


Cahier des charges :
On reprend le cahier des charges pos pour faire clignoter un LED branch sur RB0
(cf., illustration du module TIMER p.XX) mais on cherche maintenant ajuster la
frquence de clignotement en fonction d'une tension prsente sur la broche RA3 du
microcontrleur. La frquence sera de 300Hz si la tension est de infrieure VDD/2 et
de 600 Hz si elle est suprieure VDD/2.

Questions :
(1) On utilise une rfrence interne de tension pour gnrer la valeur de VDD/2.

Expliquez comment le module de tension de rfrence peut tre configur pour cela.
Expliquez ensuite comment le module de comparaison peut tre utilis pour
raliser le cahier des charges.

(2) Identifiez les registres initialiser et les valeurs associes.


(3) Construisez l'algorigramme et crivez le programme assembleur.

117

!
R
E

Algorigramme

PL

M
O
C

118

T
L

P
M
O

AC

Programme assembleur

R!
;
;
;
;
;
;
;
;
;
;

Filename : comparator.asm
Description : Gnration d'un signal carr sur la
broche RB0 par TIMER0 et ajustement de la frquence en
fonction d'une comparaison une tension de rfrence.
Author:
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2007/09

Dbut

119

T
L

P
M
O

R!

Programme assembleur [suite]

AC

120

Module de conversion
analogique/numrique
Le module de conversion analogique/numrique permet de convertir le signal
analogique prsent sur une broche du micro-contrleur en un signal numrique.
Les paramtres prendre en compte pour la numrisation dun signal sont

la pleine chelle du module de conversion A/N


Indique la plage de tension admissible en entre du module.
la dynamique
Indique le nombre de bits utiliss pour coder une valeur
analogique en numrique.
la frquence dchantillonnage

Notes : (1) la pleine chelle et la dynamique permettent de calculer la rsolution en tension du module
de conversion A/N ; (2) la frquence d'chantillonnage doit respecter le (fameux) thorme de
Shannon ; cf cours de traitement du signal.

121

Illustration par un exemple simple...


Cahier des charges :
On reprend le cahier des charges pos pour gnrer un signal rectangulaire avec le
module PWM mais on cherche maintenant ajuster en continu la frquence de
manire ce qu'elle soit proportionnelle la tension prsente sur la broche RA0.
Pour permettre l'ajustement en continu de la tension, on dclenchera la conversion
par interruption du TIMER0 automatiquement tous les 1/100 secondes.

Questions :
(1) Lisez la documentation et expliquez le fonctionnement du CAN sur la base de la
figure 19-1. Reprenez la relation entre la valeur du registre PR2 qui gre la
frquence et calculez les valeurs extrmes de frquence atteignables. Dduisez
de ce qui prcde la valeur du prescaler pour obtenir des frquences prises entre
244 Hz et 60 Khz. La relation entre la conversion et la frquence est-elle
linaire ? Sachant que le CAN est un convertisseur 10 bits et que PR2 est un
registre 8 bits, quels sont les bits du CAN que vous allez utiliser ? Quel sera
l'inconvnient ventuel ?

122

Illustration par un exemple simple...


Questions :
(1) Identifiez les registres initialiser et les valeurs associes.
(2) Construisez l'algorigramme et crivez le programme assembleur.

123

!
R
E

Algorigramme

PL

M
O
C

124

T
L

P
M
O

AC

Programme assembleur

R!
;
;
;
;
;
;
;
;
;
;

Filename : CAN.asm
Description : Gnration d'un signal carr sur la
par le module PWM avec ajustement de la frquence en
continu par conversion AN sur broche AN0.
Author:
Company: Universite Paul Cezanne
Revision: 1.00
Date:
2007/09

Dbut

125

T
L

P
M
O

R!

Programme assembleur [suite]

AC

126

Le chien de garde (Watchdog)

Une watchdog (WDT) est un dispositif de protection pour viter que le microcontrleur ne se bloque. Une watchdog effectue un redmarrage du systme (RESET) si
une action dfinie nest pas effectue dans un dlai donn.

Concrtement, lutilisateur affecte une valeur un registre (Watchdog Postscaler), qui


dfinit une dure temporelle (timeout). Priodiquement le micro-contrleur va
incrmenter un registre (Watchdog counter). Si ce registre est plein (overflow), le microcontrleur effectue un re-dmarrage.

Pour que le micro-contrleur ne redmarre pas, le programme doit priodiquement rinitialiser le registre (Watchdog counter).
127

Les diffrents modes de fonctionnement


En plus du mode de fonctionnement par dfaut (Primary Run Mode), les microcontrleurs possdent de nombreux autres modes de fonctionnement. L'existence de ces
modes vise principalement rduire la consommation d'nergie qui est une contrainte
forte pour les systmes embarqus.
On notera principalement trois modes de fonctionnement :

run mode --- mode de fonctionnement par dfaut du micro-contrleur, toutes les
fonctions sont actives, la consommation d'nergie est maximale.
sleep mode --- le micro-contrleur est plac en mode sommeil, la consommation
d'nergie est minimale, le micro-contrleur peut-tre rveill par une interruption,
IDLE mode --- le processeur du micro-contrleur est arrt, plus aucune instruction
n'est excute, l'utilisateur peut choisir de dsactiver des fonctions du micro-contrleur
afin de diminuer la consommation d'nergie. Les fonctions actives restantes fonctionnent
normalement et peuvent rveiller le micro-contrleur par une interruption.
128

Plan
Prsentation de l'informatique industrielle et des systmes micro-programms
Architecture des micro-contrleurs
Prsentation des diffrents lments d'un micro-contrleur, lments de choix
Rappels sur les nombres binaires et les diffrents codages

Les instructions
Rappels sur la logique combinatoire et squentielle
tude du fonctionnement d'un micro-contrleur : le PIC 18F4520

Programmation en Assembleur -- Rappel sur les algorigrammes


Prsentation des interruptions
tude d'un programme en Assembleur avec gestion des interruptions

Prsentation de fonctions intgres (timer, PWM, etc.)


Presentation du langage C pour le -contrleur / spcificit PIC 18F4520

129

Langage C & microcontrleur


De plus en plus, les programmes pour micro-contrleur sont crits en langage C. Ce
langage permet de dvelopper rapidement des programmes, des bibliothques qui
pourront tre ensuite utilises sur diffrentes machines.

Pourquoi un langage tel que le C ?

Universel : il nest pas ddi une application !

Moderne : structur, dclaratif, rcursif, avec structures de contrle et de dclaration.

Proche de la machine : manipulations de bits, pointeurs, possibilit d'incorporer de


l'assembleur, etc.
Portable : le mme code peut tre utilis sur plusieurs machines [il faut toutefois faire
attention ne pas crer des fonctions spcifiques une machine].
Extensible : il est possible de crer des bibliothques ou d'en incorporer.

Documentation Microchip : MPLAB C18 C COMPILER USER'S GUIDE (DS51288J)

130

Construction d'un excutable (1)


Alors que l'assembleur fait une conversion directe de mnmoniques en langage
machine, le compilateur C doit construire le code machine partir d'une syntaxe de plus
haut niveau. Le recours des librairies pr-compiles est permis par l'diteur de lien qui
construit un excutable partir des diffrents fichiers objets.
Source du main()

Bibliothques C

Fichiers header

Bibliothque prcompile

fichier texte
*.c

fichier texte
*.h

fichier objet
*.o

#include <stdio.h>
main(){
int MAX, cpt;
MAX = 0x45;
for(cpt=0; cpt< MAX; cpt++)
}

PRE-PROCESSEUR
Remplace les #define et
effectue les #include

COMPILATEUR
(C18)
Transforme le source C
en un fichier objet (code
machine)

Un code compil est systmatiquement plus lent et plus


gourmand en mmoire qu'un code assembl !

DITEUR DE LIENS
Lie tous les fichiers objets
et cre un excutable

Excutable

131

Construction d'un excutable (2)


Assembleur et compilateur peuvent nanmoins tre utiliss pour construire un seul
excutable, cf. ci-dessous. L encore, l'diteur de lien s'occupe de construire le code
machine excutable partir des diffrents fichiers objets.

Entres (sources)

Assembleur

Compilateur C (ici
C18)

Fichiers pr compils

Construction de
librairies
Scriptes de
configuration
de l'diteur de lien

diteur de liens

Sorties (excutable,
etc.)
132

Vous avez accs la majorit des fonctionnalits du C de la norme ANSI C. Vous


pouvez donc crire quelque chose comme
vites s e = 0x 27
pour faire l'affectation d'une variable code sur 8 bits, ou encore
if(vites s e == lim ite)
pour effectuer un test d'galit entre deux variables entires codes sur un nombre de bits
appropris.
Plus prcisment, vous avez accs (cf. cours de C++)

aux dclaration de variables, constantes, tableaux, pointeurs, structures, etc.


aux oprateurs arithmtiques et logiques,
aux oprateurs d'affectation, incrmentation et dcrmentation,
aux oprateurs de contrle de flux (test et boucles),
la conversion de type,
l'intgration de routines en assembleur.
Par contre, les instructions grant les entres et sorties (cran, clavier, disque, etc.)
133
n'ont pas toujours de sens dans ce type de contexte ; cf. TP.

Un premier programme en C
//================================
// Filename: PremierProgramme.C
//================================
// Author:
marc ALLAIN
// Company: Universite Paul Cezanne
// Revision: 1.00
// Date:
2006/07
//================================
#include <p18f4520.h>
#define duree 10000
#pragma config WDT = OFF
// Dclaration des variables globales
char c;
float pht;
// Prototypes des fonctions
void tempo(unsigned int count);
// Programme Principal
void main()
{
PORTB = 0x00;
TRISB = 0x00;
while(1){
PORTB++;
tempo(duree);
}
}
tempo(unsigned int count){
while(count--);
}

Fichier des en-ttes de fonction pr-compiles


spcifiques
au
microcontrleur
considr.
Contient notamment les quivalences nom &
adresses.
Dclaration d'un alias au prprocesseur (i.e., duree
sera systmatiquement remplac par 10000).
Directive pour adresser des emplacement spcifiques
de la mmoire programme ou donnes (cf. plus loin).

Dclaration de variables globales

Dclaration d'une fonction

Affectation de registres du microcontrleur ; PORTB


et TRISB sont dclars dans p18f4520.h
134

Les oprateurs du langage C


Oprateurs arithmtiques et relationnels :

Oprateurs logiques et de manipulation de bits :

135

Oprateurs d'accs la mmoire, etc.

136

Types de donnes

Le tableau ci-dessous prsente les types de variables supports par le compilateur C18
ainsi que leur format de codage.

Le format est celui du bus de donne pour les types char et unsigned char. L'utilisation
de variables plus grandes est nanmoins permise. Par exemple, une dclaration de la
forme
#pragma idata test=0x0200
long l=0xAABBCCDD;
conduit au stockage mmoire suivant
137

Structures & champs de bits


Les structures sont des types composites dans lesquels des variables de types distincts
peuvent cohabiter...
struct prof {
char nom[30];
char prenom[30];
char labo[30];
int tel;
int HETD;
};

int main(){
struct prof DEP_SDM[10];
DEP_SDM[0].tel = 2878;
strcpy(DEP_SDM[0].nom,''allain'');
strcpy(DEP_SDM[0].prenom,''marc'');
...
}

Les structures champs de bits permettent d'accder explicitement des sousensembles d'une variable : le premier champ correspond au bit 0 et le nom de l'lment est
suivi par le nombre de bits associ.struct {
unsigned RB0:1;
unsigned RB1:1;
unsigned RB2:1;
unsigned RB3:1;
unsigned GROUPE:3;
unsigned RA7:1;
}PORTBbits;

Exemple : on accde la patte RB0 par une instruction PORTAbits.RA0 = 1;

138

Unions
Dans une union, les champs partagent la mme adresse. Cette construction permet
d'utiliser des dnominations diffrentes pour adresser les mme bits. cf. le fichier de
header.
ex tern vo la tile nea r union {
s truc t {
unsigned RE0:1; unsigned RE1:1;
unsigned RE2:1; unsigned RE3:1;
};
s truc t {
unsigned RD:1; unsigned WR:1;
unsigned CS:1; unsigned MCLR:1;
};
s truc t {
unsigned NOT_RD:1; unsigned NOT_WR:1;
unsigned NOT_CS:1; unsigned NOT_MCLR:1;
};
s truc t {
unsigned :3; unsigned VPP:1;
};
s truc t {
unsigned AN5:1; unsigned AN6:1; unsigned AN7:1;
};
} P O R T E bits ;

Exemple : PORTEbits.RE0 et PORTE.NOT_RD partage la mme adresse.

139

De l'assembleur dans du C ?

C18 permet l'utilisation d'instructions en assembleur presque comme si vous utilisiez MPASM.
Ces instructions doivent tre dans un bloc dlimit par _asm et _endasm.

_a s m
MOVLW 10
MOVWF count, 0
start:
DECFSZ count, 1, 0
GOTO done
BRA start
done:
_enda s m

/* User assembly code */


// Move decimal 10 to count
/* Loop until count is 0 */

Cet assembleur diffre nanmoins de MPASM sur les poinst suivant :

pas les directives,


commentaires rdigs dans la syntaxe du C,
pas de valeur par dfaut, i.e., les arguments d'une instruction doivent tre spcifis,
la convention de notation en hexadecimal est 0xNN,
les tiquettes doivent comporter un :,
pas d'adressage index.

140

La conversion de type (cast)

Une conversion de type intervient lorsqu'un oprateur doit agir sur des oprandes de
types diffrents. En gnral, les oprandes sont alors converties selon la rgle suivante :

L'oprande la plus petite est convertit dans le type de l'oprande la plus grande.
char < int < long < float < double

Il est aussi possible de forcer une conversion de type :

ecart=2.25

float ecart, distance = 11;


int tronque, nbp = 5;
ecart
= distance / (float) (nbp 1);
tronque = (int) ecart;

ecart=2
141

Modificateurs de type
Associ chacun des types, le compilateur C18 supporte les modificateurs de type
classiques qui sont

c o ns t

une constante stocke en ROM qui ne pourra pas tre modifie.


ex. const int MAX = 10000;

vo la tile

une variable stocke en RAM ou en pile qui peut tre modifie

(dfaut).

ex. unsigned char PORTB = 0xF0;

En plus de ces modificateurs, C18 en introduit deux autres pour contrler les accs aux
diffrentes formes de mmoire...

ra m

ro m

une donne place dans la mmoire donne RAM (dfaut)


ex. unsigned char PORTB = 0xF0;
une donne stocke dans la mmoire programme ROM
ex. rom const int MAX = 10000;

142

Variables globales, locales...


La programmation en langage C se base entirement sur des fonctions dont la
principale est main(). La dclaration de variable peut tre faite l'intrieur ou l'extrieur
d'une fonction avec des effets distincts (notion de classes des stockage).

A l'extrieur d'une fonction, une dclaration est globale : la variable est visible pour
toutes les fonctions et l'adresse alloue est fixe.
ex. #include <pic18f4520.h>
int MAX;
main(){...}
A l'intrieur d'une fonction, la variable n'est pas visible de l'extrieur et les mots cls
suivant dtermine la manire dont la variable est stocke :
s ta tic

variable stocke en RAM une adresse fixe.


ex. void function(){
static int MAX;...}

143

a uto

une variable stocke en pile (dfaut).


ex. void function(){
int MAX;...}

reg is ter

la variable est alloue dans un registre de travail.


Note : (i) correspondance obligatoire entre format de la variable et format du
registre; (ii) inutile pour le PIC qui ne possde qu'un registre de travail.

En plus de ces classes de stockage standard, C18 en introduit la classe suivante pour
rduire l'occupation mmoire des variables alloues lors de l'criture de fonction :
o verla y
: l'adresse est statiquement alloue dans la mmoire donne RAM mais elle
peut tre affecte une autre variable dclare dans une autre fonction.
ex. void function1(){
overlay int x = 5; return x;}
void function2(){
overlay int y = 2; return y;}
144

Les directives pragma

En dpit d'une grande souplesse et d'une bonne proximit avec la couche matrielle, la
norme ANSI C ne permet pas de contrler les adresses mmoires o sont places des
variables ou des instructions. Pour pallier ce problme, C18 introduit les directives
#pragma qui permettent d'accder spcifiquement des adresses de la mmoire donne
et programme ainsi que de configurer le microcontrleur. Ainsi la directive
#pra g m a c onfig W D T = O FF

permet de dsactiver la fonctionnalit watch-dog du microcontrleur ; la liste des


fonctionnalits et de leur valeurs est disponible dans la documentation DS51537.
Cette directive permet de placer un morceau de code une adresse quelconque de la
mmoire programme. Par exemple,
#pra g m a c o de mon_prog = 0x @ // aprs : placement impos dans la mmoire
void mon_prog(void){
ins truc tions ;
}
#pra g m a c o de

// aprs : placement libre dans la mmoire

permet de placer ins truc tions ; l'adresse 0x @ de la mmoire programme.

145

Les directives pragma (2)

Ceci permet en particulier de configurer les d'interruptions : une premire directive


permet d'initialiser le vecteur d'interruption (haute ou basse) et alors qu'une seconde
directive identifie l'adresse mmoire de cette fonction :
#pra g m a c ode vecteur_low = 0x18
void vecteur_low(){
_asm goto routine_int_low _endasm
};
#pra g m a c ode
#pra g m a interruptlow routine_int_low
void routine_int_low(){
...};

Quelques remarques : (1) une fonction d'interruption ne possde ni entre ni sortie ; (2) une
sauvegarde minimale du contexte est assure automatiquement et peut tre complte en
modifiant la seconde directive comme suit
#pra g m a interruptlow routine_int_low s a ve = ma_variable

o ma_variable est une variable globale sauver.

146

Gestion des interruptions (1)


Interruption
Dbut
Broche 2 7 du PORTB en sortie
Broche 1 du PORTB en entre
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique
Interruption chaque front montant sur la
broche 1 du PORTB

NOP

Fin

Identification de l'interruption

Suppression du flag d'interruption

Change l'tat de la broche 2 du PORTB

Retour au
programme principal
147

Gestion des interruptions (2)


//=======================================
// Filename: premier_programme_C.C
//=======================================
// Author:
Marc Allain
// Company: Universite Paul Cezanne
// Revision: 1.00
// Date:
2007/10
//========================================
#include <p18f4520.h>
#pragma config WDT = OFF
// Prototypes des fonctions
void Vecteur_interruption(void);
void Routine_gestion_interruption(void);
// Programme Principal
void main()
{
PORTB = 0;
TRISB = 0x01;
LATB = 0;
ADCON1 = 0x0F;
INTCON = 0x90;
while(1){
}
}

148

Gestion des interruptions (3)


// Indique l'adresse mmoire ou dbute la fonction
#pragma code Vecteur_interruption = 0x08
void Vecteur_interruption (void)
{
_asm
goto Routine_gestion_interruption
_endasm
}
#pragma code // Placement libre du programme dans la mmoire
// Routine de gestion des interruptions
#pragma interrupt Routine_gestion_interruption
void Routine_gestion_interruption()
{
// Vrification que l'interruption est dclenche par RB0
if (INTCONbits.INT0IF)
{
// Suppression du flag d'interruption
INTCONbits.INT0IF = 0;
// Change l'tat de RB1
PORTB ^= 0x02;
}
}

149

Quelques astuces/piges en langage C

Utiliser le passage des arguments par adresse


La fonction ne travaille pas sur une copie de la valeur de largument effectif mais
directement sur celui-ci (gain de place en mmoire).

Les fonctions rcursives


Elles sont viter pour la programmation des systmes embarqus cause d'un
dbordement de pile matriel. En effet, on rappelle que sur un micro-contrleur, le
nombre dappels de fonctions imbriqus est limit (8 pour PIC).

150

Vous aimerez peut-être aussi