You are on page 1of 149

Informatique Industrielle

Cours Master SIS

Micro-contrleurs Microchip

Intervenants :
Julien Marot - julien.marot@fresnel.fr
Marc Allain - marc.allain@fresnel.fr

Site : http://www.lsis.org/master/index.php?espace_etudiant=1&doc=103
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
Groupe signaux multidimensionnels,
Institut Fresnel

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

2
Organisation du cours

Contenu horaire :

20 h de cours [Marc Allain] (8 x 3h)


Prsentation de l'informatique industrielle, des systmes micro-
programms (architecture, principes gnraux, ...). tude d'un
micro-contrleur Microchip PIC 18F4520. Programmation en
langage Assembleur et langage C.

20 h de travaux pratiques [Julien Marot] (5 x 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 sans documents sur


les notions vues en cours (exercices inclus) et en TP.
4
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.)

5
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
6
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


7
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 : Ascom S.A.
(Source : Wikipdia)

8
L'informatique industrielle

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

9
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 : Inconvnients :
Trs rapide Faible modularit
Consommation moindre Possibilit d'volution
Optimis pour une application limit 11
Les diffrents systmes programmables
Les systmes en logique programme et/ou en logique programmable sont
connus sous la dsignation de PLD (programmable logic device, circuit logique
programmable)

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 assembler.
(Wikipdia)

Avantages : Inconvnients :
Forte modularit Mise en oeuvre plus complexe
Rapidit 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.)

Avantages : Inconvnients :
Mise en oeuvre simple Plus lent
Cots de dveloppement rduits 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, grav en 0,13 m
6500/10000 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, grav en 3m 16
0,33/0,75 MIPS 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.

17
Largeur du bus
8

Unidirectionnel

Bidirectionnel

Issu de la documentation
technique du PIC16F628
18
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 russit, etc.
Dfinition : Une adresse est un nombre binaire qui indique un
emplacement dans une zone mmoire

19
Structures des systmes micro-programms
Structure de Von Neumann

Extraits du cours intitul


Les systmes micro-
Structure de Harvard programms

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.
20
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


21
Savoir lire le schma
bloc dun micro-
contrleur

?
Issu de la documentation
technique du PIC16F628

22
Savoir lire le schma
bloc dun micro-
contrleur
Les mmoires :
RAM (Random Access Mem.)

mmoire rapide qui permet


de stocker temporairement
des donnes.

ROM (Read Only Memory)

mmoire lecture seule,


programmer vie.

EEPROM

(Elec. Erasable Programmable


Read Only Memory)

mmoire lente qui permet de


stocker des donnes mme
aprs coupure de lalim. 23
Savoir lire le schma
bloc dun micro-
contrleur
PC (Program Counter)

Registre(case mmoire)

ALU

Multiplexeur

Dcodeur dinstructions

horloge

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

24
Savoir lire le schma
bloc dun micro-
contrleur
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 25
technique du PIC16F628
Savoir lire le schma
bloc dun micro-
contrleur
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, ...
26
Les lments de choix
Caractristiques lectriques :
Architecture : Frquence dhorloge

ALU (8, 16, 32, 64 bits) Tensions dalimentation

Structure du processeur (Harvard, Von Consommation dnergie, modes faible

Neumann) consommation dnergie, ...


Type de processeur (RISC, CISC)

Taille des mmoires programme et donne


Caractristiques physiques :
Nombre de ports dentre/sortie Type de botier : DIL, PLCC, ...

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, ...

Mise en oeuvre, maintenance :


Cot de dveloppement : outils de

dveloppement, formation, ...


Suivie du micro-contrleur : production suivie,

disponibilit, composant obsolte, ...

27
Source : Microchip
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


28
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 dcimale (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 .

29
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 1 (units)


le chiffre 2 est affect du poids de 10 (dizaines)
le chiffre 1 est affect du poids de 100(centaines)

Le nombre peut donc s'crire


1 x 100 + 2 x 10 + 8 x 1 = (128)d

Chiffre Poids

30
Codes pondrs

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

le chiffre 0 est affect du poids de 1


le chiffre 1 est affect du poids de 10 (exprim en base 2)

Le nombre peut donc s'crire


1 x 10 + 0 x 1 = (10)b

Chiffre Poids

Remarque : le nombre 10 binaire ne s'exprime pas dix car ceci sous-entend


que le nombre est exprim en dcimal...

31
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 1 (units)


le chiffre F est affect du poids de 10 (dizaines)
le chiffre 1 est affect du poids de 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 1111 1000

1 F 8 = (1F8)h 32
Conversion
Conversion en dcimal : dveloppement en somme de puissances de
la base.

(1 0 0 1)b

3 2 1 0
12 02 02 12
Soit 3 2
12 02 02 12 =81=9b
1 0

(3 2 F)h

2 1 0
316 216 1516

2 1 0
316 216 1516 =7683215=815b
33
Conversion dcimal binaire : division par 2 successives...

(14) 2
(14)d = (1 1 1 0)b
d
0 7 2
1 3 2
Se
ns 1 1
de
le
ct
ur
e.
..

Conversion dcimal hexadcimal : division par 16 successives...

(282)d 16
(282)d = (11A)h
10= 17 16
A 1 1
Se
ns
de
le
ct
ur
e.
..
34
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

35
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) : 1 0 0 1 0 1 0 0 = -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)
36
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

37
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.

38
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


39
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 temporel). La frquence dhorloge est le nombre
de cycles effectus par une horloge en une seconde.

40
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.

41
Pipeline et flot dinstructions

3 tapes lors pour l'excution d'une instruction :


Lecture de linstruction (1)
Dcodage de linstruction (2)
Excution de linstruction (3)

Temps
1 2 3

1 2 3

1 2 3

Cration dun pipeline => permet uneexcution plus rapide des instructions

Temps
1 2 3

1 2 3

1 2 3 42
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 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 [micro-contrleur utilis en TP].

ATTENTION : Un nombre important d'information


utiles figures sur ces fiches...

43
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 : MOVLW5Ah;

Nombres de cycles ncessaires l'excution

Excution de l'instruction (pipeline 4 niveaux)

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

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

46
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


47
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.

48
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

49
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).

E E1 E2
E1 E2

NON OU ET

E1 E2
E1 E2 E1 E2
OU-EX ET-NON 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. 50
Algbre de BOOL

Les oprateurs logiques lmentaires permettent la construction d'une algbre dite


algbre de Bool. Ainsi, si on considre deux entres binaires A et B, on adopte
alors la convention suivante pour construire des quations logiques :
AB=AB
NON A
ET-NON, AB=AB

ET AB OU-NON, A B
OU, A B OU-EXCLUSIF A B

Les diffrentes oprations bnficient des proprits suivantes

Associativit : Commutativit :
ABC= ABC AB =BA AB=BA
A B C= A BC A B= B A A B= B A
A BC=A B C A B= B A

Distributivit : Lois de De Morgan :

A BC = A B AC AB= AB
A BC = AB AC A B= AB 51
Le chronogramme

Dans les microcontrleurs, les tats du systmes changent en fonction d'une base
de temps qui est l'horloge. Ceci conduit naturellement introduire les chronogramme
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.

52
Les bascules asynchrones

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

Le verrou D (Latch D)
Le verrou D (ou bascule D asynchrone) est trs rpandue : 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.

53
Exercice : tude de la bascule RS

crire la table de vrit et complterez le chronogramme pour le verrou RS ci-


dessous.

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

55
Les bascules synchrones

La Bascule JK (Jump-Knock out)

56
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...

57
Extrait de la documentation technique du PIC18F4520 de Microchip.
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


58
Les registres
Un registre 8 bits est synonyme
d'un ensemble de 8 case 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


59
le schma...
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 demander
l'addition de deux valeurs 8 bits).

60
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.

61
Organisation de la mmoire programme

Conteur 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. 62


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
excute. 63
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.
64
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 dtat pour les


priphriques (notamment...)

65
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.

66
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.
67
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.

68
69
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


70
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 require 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 mener des
tests spars lors des phases de dveloppement matriel et logiciel.

71
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 confronter un cycle de conception plutt qu' un enchanement parfaitement
squentiel !

Dveloppement matriel
Dveloppement logiciel

Tests du systme complet

72
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 crit 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.
73
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 :


Lutilisateur crit son programme en langage Assembleur. Ce fichier est assembl
pour traduire le programme en langage machine (avec ventuellement des
amliorations).
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. 74
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 !

Ils existent diffrents types dinstruction pr-processeur :

les instructions de contrle : org = dbut du programme, end = fin du programme, etc. ;
les instructions conditionnelles: if, else, endif, etc. ;
les instructions relatives aux donnes : res = rservation despace mmoire, etc. ;
les instructions pour les macros

75
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,
Sous-programme
Interruption

Initialisation
Test d'une condition Faux

Instruction Vrai 76
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 Broche 2 du PORTB


l'tat haut l'tat bas

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

;
; 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
Dbut
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) 78
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.)

; 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

Dbut 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
79
La dclaration du micro-contrleur permet au compilateur de gnrer un code
machine qui soit comprhensible pour le microcontrleur que vous souhaitez programmer.

;
; 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

Dbut 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
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.

; 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

Dbut 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
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'
. .
. .
. .

82
Une directive au pr-processeur supplmentaire peut tre spcifie de manire
modifier la configuration par dfaut tablit dans p18f4510.inc.
Note : pour savoir comment modifier ces configurations, il faut aller voir le fichier
p18f4510.inc.

; 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

Dbut 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
83
Exemple de ce que pourrait tre le fichier MA_CONFIG.inc

;----- Utilisation de l'oscillateur


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

84
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' ; initialisation du vecteur RESET


goto init

init clrf PORTB


movlw b'00000001'
movwf TRISB ; Configuration de la direction
; du PORTB. Broche 1 en entre.
; Broche 2 8 en sortie
clrf LATB
movlw 0Fh
movwf ADCON1 ; Configuration des broches 1 4 85
; du PORTB en E/S numrique
La seconde opration consiste 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' ; initialisation du vecteur RESET


goto init

init clrf PORTB


movlw b'00000001'
movwf TRISB ; Configuration de la direction
; du PORTB. Broche 1 en entre.
; Broche 2 8 en sortie
clrf LATB
movlw 0Fh
movwf ADCON1 ; Configuration des broches 1 4
; du PORTB en E/S numrique

86
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 Broche 2 du
PORTB PORTB
l'tat haut l'tat bas

boucle btfss PORTB,0 ; Broche 1 du PORTB l'tat haut ?


; saute l'instruction suivante si
; tat haut
goto eteindre
allumer bsf PORTB,1 ; Broche 2 du PORTB l'tat haut
goto boucle
eteindre bcf PORTB,1 ; Broche 2 du PORTB l'tat bas
goto boucle

END
87
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


88
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.

89
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 leurs priorit.
90
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.

91
Droulement d'une interruption

(1). Rception de linterruption : le micro-contrleur reoit une interruption.

(2). Sauvegarde des donnes : 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 rtablie les donnes stockes


dans la pile.

(6). Le micro-contrleur reprend son fonctionnement normal...


92
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


93
Premier programme avec interruption

Dbut Interruption

Broche 2 7 du PORTB en sortie Sauvegarde du contexte


Broche 1 du PORTB en entre Identification de l'interruption
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique
Interruption chaque front montant sur la
broche 1 du PORTB Suppression du flag d'interruption

NOP Change l'tat de la broche 2 du PORTB

Restauration du contexte
Fin Retour au programme principal
94
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.

; 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
Dbut ; 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 95
Du code du programme principal, on distingue les tapes classiques d'initialisation du
vecteur RESET et du PORT B. On note aussi les parties propre aux interruptions :
initialisation du vecteur et du registre d'INTERRUPTION.

org h'0000' ; Init. du vecteur RESET


goto init

org h'0008' ; Init. du vecteur INTERRUPTION


goto routine_interruption

init clrf PORTB


movlw b'00000001'
Broche 2 7 du PORTB en sortie
Broche 1 du PORTB en entre
movwf TRISB ; Config. de la dir. du PORTB
RAZ du PORTB
Broche 1 4 du PORTB en E/S numrique
Interruption chaque front montant sur la
clrf LATB
broche 1 du PORTB

movlw 0Fh
movwf ADCON1 ; Broche 14 du PORTB en E/S num.
NOP movlw b'10010000'; 0x90 -> w
movwf INTCON ; w -> INTCON (Init. du registre d'interrup.)
Fin

boucle nop
goto boucle

END
96
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).

97
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

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

Sauvegarde du contexte
; identification de l'origine de l'interruption
Identification de l'interruption
btfsc INTCON,1
goto interruption_INT0
bra restauration_contexte

98
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 bcf INTCON,1 ; Suppression du flag d'interruption

Change l'tat de la broche 2


du PORTB movlw 0x02 ; 0x02 -> w
xorwf PORTB ; w xor PORTB -> PORTB
goto restauration_contexte
Restauration du contexte
Retour au prog. principal
; Restauration du contexte
restauration_contexte
movff BSR_TEMP, BSR ; Restauration de BSR
movff W_TEMP, W ; Restauration de W
movff STATUS_TEMP, STATUS ; Restauration de STATUS

retfie

99
Structure gnrale dun programme

Reset Vector Interrupt Vector

Dbut du programme Dbut de la routine dinterruption

Dclarations Sauvegarde des donnes

Identification de linterruption et
suppression du flag dinterruption
Configuration

Routine dinterruption

Programme principal
Rtablissement des donnes

Fin Retour au programme principal


100
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


101
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 ................................................................... Timer


Les modules Capture Compare PWM ............................. CCP
Les comparateurs .................................................................
Comparator
Les modules de conversion analogique/numrique ..............
CAN/CNA
Les chiens-de-garde ........................................................
Watchdog
Les diffrents modes de gestion de l'alimentation

! 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... 102
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.
103
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...

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

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

106
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.

107
Algorigramme
!
T ER
P L
O M
C Dbut
A

NOP

Fin

108
! Programme assembleur
TER
P L
O M
C
A
; 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

109
! Programme assembleur [suite]
TER
P L
O M
C
A

110
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.

111
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-ils


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.

112
Algorigramme
!
T ER
P L
O M
C Dbut
A

NOP

Fin

113
! Programme assembleur
TER
P L
O M
C
A
; 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

114
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 micro-contrleur 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).

115
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 utiliser pour raliser le cahier des charges.

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

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


116
Algorigramme
!
T ER
P L
O M
C
A

117
! Programme assembleur
TER
P L
O M
C ; Filename : comparator.asm
A
;
; 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

118
! Programme assembleur [suite]
TER
P L
O M
C
A

119
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 utilise 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.
120
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 tout les 0,01 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 ?
121
Illustration par un exemple simple...

Questions :

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

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

122
Algorigramme
!
T ER
P L
O M
C
A

123
! Programme assembleur
TER
P L
O M
C ; Filename : CAN.asm
A
;
; 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

124
! Programme assembleur [suite]
TER
P L
O M
C
A

125
Le chien de garde (Watchdog)

Une watchdog (WDT) est un dispositif de protection pour viter que le


micro-contrleur 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 micro-contrleur effectue un re-dmarrage.

Pour que le micro-contrleur ne redmarre pas, le programme doit


priodiquement r-initialis le registre (Watchdog counter).

126
Les diffrents modes de fonctionnement

En plus du mode de fonctionnement par dfaut (Primary Run Mode), les


micro-contrleurs 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.
127
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


128
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.
129
Documentation Microchip : MPLAB C18 C COMPILER USER'S GUIDE (DS51288J)
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.
Bibliothque
Bibliothques C Fichiers pr-compile
Source du main() header
#include <stdio.h>

main(){
fichier texte fichier texte fichier objet
int MAX, cpt; *.c *.h *.o
MAX = 0x45;
for(cpt=0; cpt< MAX; cpt++)
}

PRE- COMPILATEUR DITEUR DE LIENS


PROCESSEUR (C18)
Lie tous les fichiers
Remplace les Transforme le source objets et cre un
#define et effectue C en un fichier objet excutable
les #include (code machine)

Un code compil est systmatiquement plus lent


! et plus gourmand en mmoire qu'un code Excutable
130
assembl !
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)
Compilateur C
Assembleur (ici C18)

Fichiers pr
compils Construction de
librairies

Scriptes de
configuration
de l'diteur de lien
diteur de
liens

Sorties
(excutable, etc.)
131
Vous avez accs la majorit des fonctionnalits du C de la norme
ANSI C. Vous pouvez donc crire quelque chose comme
vitesse=0x27
pour faire l'affectation d'une variable code sur 8 bits, ou encore
if(vitesse==limite)
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 grants les entres et sorties (cran, clavier,
! disque, etc.) n'ont pas toujours de sens dans ce type de contexte ; cf. TP.
132
Un premier programme en C
//================================ Fichier des en-ttes de fonction pr-
// Filename: PremierProgramme.C compiles spcifiques au microcontrleur
//================================ considr. Contient notamment les
// Author: marc ALLAIN quivalences nom & adresses.
// Company: Universite Paul Cezanne
// Revision: 1.00
// Date: 2006/07 Dclaration d'un alias au prprocesseur (i.e.,
//================================ duree sera systmatiquement remplac par
10000).
#include <p18f4520.h>
#define duree 10000
#pragma config WDT = OFF Directive pour adresser des emplacement
spcifiques de la mmoire programme ou
// Dclaration des variables globales donnes (cf. plus loin).
char c;
float pht;

// Prototypes des fonctions Dclaration de variables globales


void tempo(unsigned int count);

// Programme Principal
void main()
{
PORTB = 0x00;
TRISB = 0x00; Dclaration d'une fonction
while(1){
PORTB++;
tempo(duree);
}
}
Affectation de registres du microcontrleur ;
tempo(unsigned int count){
while(count--);
PORTB et TRISB sont dclars dans p18f4520.h
}

133
Les oprateurs du langage C

Oprateurs arithmtiques et relationnels :

Oprateurs logiques et de manipulation de bits :

134
Oprateurs d'accs la mmoire, etc.

135
! 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
#pragmaidatatest=0x0200
longl=0xAABBCCDD;
conduit au stockage mmoire suivant

136
Structures & champs de bits

Les structures sont des types composites dans lesquels des variables de
types distincts peuvent cohabiter...
structprof{ intmain(){
charnom[30]; structprofDEP_SDM[10];
charprenom[30];
charlabo[30]; DEP_SDM[0].tel=2878;
inttel; strcpy(DEP_SDM[0].nom,''allain'');
intHETD; strcpy(DEP_SDM[0].prenom,''marc'');
}; ...
}
Les structures champs de bits permettent d'accder explicitement
des sous-ensembles 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{
unsignedRB0:1;
unsignedRB1:1;
unsignedRB2:1;
unsignedRB3:1;
unsignedGROUPE:3;
unsignedRA7:1;
}PORTBbits;

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


137
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.

externvolatilenearunion{
struct{
unsignedRE0:1;unsignedRE1:1;
unsignedRE2:1;unsignedRE3:1;
};
struct{
unsignedRD:1;unsignedWR:1;
unsignedCS:1;unsignedMCLR:1;
};
struct{
unsignedNOT_RD:1;unsignedNOT_WR:1;
unsignedNOT_CS:1;unsignedNOT_MCLR:1;
};
struct{
unsigned:3;unsignedVPP:1;
};
struct{
unsignedAN5:1;unsignedAN6:1;unsignedAN7:1;
};
}PORTEbits;

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


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

_asm /*Userassemblycode*/
MOVLW10 //Movedecimal10tocount
MOVWFcount,0
start: /*Loopuntilcountis0*/
DECFSZcount,1,0
GOTOdone
BRAstart
done:
_endasm

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.

139
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 :


floatecart,distance =11;
ecart=2.25 inttronque,nbp=5;

ecart =distance/(float)(nbp1);
tronque =(int)ecart;
ecart=2
140
Modificateurs de type
Associ chacun des types, le compilateur C18 supporte les
modificateurs de type classiques qui sont

const : une constante stocke en ROM qui ne pourra pas tre modifie.
ex. constintMAX=10000;

volatile : une variable stocke en RAM ou en pile qui peut tre modifie
(dfaut).
ex. unsignedcharPORTB=0xF0;

En plus de ces modificateurs, C18 en introduit deux autres pour contrler


les accs aux diffrentes formes de mmoire...

ram : une donne place dans la mmoire donne RAM (dfaut)


ex. unsignedcharPORTB=0xF0;

rom : une donne stocke dans la mmoire programme ROM


ex. romconstintMAX=10000;

141
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>
intMAX;
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 :

static : variable stocke en RAM une adresse fixe.


ex. voidfunction(){
staticintMAX;...}
142
auto : une variable stocke en pile (dfaut).
ex. voidfunction(){
intMAX;...}

register : 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 travaille.

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 :

overlay :l'adresse est statiquement alloue dans la mmoire donne


RAM mais elle peut tre affecte une autre variable dclare dans une
autre fonction.

ex. voidfunction1(){
overlayintx=5; returnx;}

voidfunction2(){
overlayinty=2; returny;}
143
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
#pragmaconfigWDT=OFF

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,
#pragmacodemon_prog=0x@ //aprs:placementimposdanslammoire
voidmon_prog(void){
instructions;
}
#pragmacode //aprs:placementlibredanslammoire

permet de placer instructions; l'adresse 0x@ de la mmoire programme. 144


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 :
#pragmacodevecteur_low=0x18
voidvecteur_low(){
_asmgotoroutine_int_low_endasm
};
#pragmacode

#pragmainterruptlowroutine_int_low
voidroutine_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

#pragmainterruptlowroutine_int_lowsave=ma_variable

o ma_variable est une variable globale sauver. 145


Gestion des interruptions (1)

Interruption

Dbut

Identification de l'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 Suppression du flag d'interruption
Interruption chaque front montant sur la
broche 1 du PORTB

Change l'tat de la broche 2 du PORTB


NOP

Retour au
programme principal
Fin
146
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){
}
}

147
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;
}
}

148
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).

149

You might also like