Vous êtes sur la page 1sur 106

Informatique industrielle (microcontrleurs)

EL MORNAN

Page 1

Informatique industrielle
(microcontrleurs)

EL
MORNAN

1-Architecture interne dun systme microprocesseur


L'architecture interne d'un ordinateur se compose essentiellement de trois blocs: le
microprocesseur, la mmoire et les entres/sorties relies entre elles par trois bus de
communication; le bus de donnes, le bus dadresses et le bus de commande.
Bus de donnes (8 lignes)

Unit centrale de
traitement microprocesseur

Mmoire

Entres/Sorties

Bus d'adresses

Bus de contrle

Figure 0-1 Architecture interne dun ordinateur


1.1.1 Le microprocesseur
Un microprocesseur est l'implantation en un seul botier, en technologie LSI ou VLSI, d'une
unit centrale de traitement de donnes CPU et dune unit arithmtique et logique ALU.
Son principal travail est de fournir aux autres lments, qui lui sont raccords, la
synchronisation ncessaire et fonctionnelle du traitement des informations qui lui sont
achemines.
1.1.2 La mmoire
C'est la partie o l'on retrouve les programmes excutables et les donnes traiter. Cette
section est subdivise en deux; d'une part, il y a la mmoire latente et d'autre part, la
mmoire vive.
Mmoire morte
C'est la mmoire de lecture; elle contient le programme du systme. L'avantage de la ROM
(Read Only Memory), cest d'tre permanente; son contenu ne disparat pas quand le
systme n'est plus aliment. La ROM contient toujours un programme de chargement
initial ou un moniteur pour permettre le fonctionnement du systme ds la mise sous
tension. Dans un contexte de contrle de processus, presque tous les programmes
rsideront en ROM car ils seront rarement changs et devront tre protgs des
pannes d'alimentation.
Mmoire vive
C'est la mmoire de lecture et dcriture du systme ou RAM (Random Access Memory). Le
contenu de ce type de mmoire est perdu lorsque l'on coupe l'alimentation. La
mmoire vive (RAM) doit tre charge, avant utilisation, partir du clavier ou partir
dune mmoire de masse comme, par exemple, une unit ruban magntique ou une
unit disque.
Page
2

1.2 Les entres/sorties


Les entres/sorties sont ncessaires pour que le microprocesseur communique avec le
monde extrieur et, videmment, avec l'utilisateur. Il serait tout fait inutile de raliser
un ordinateur sans qu'il y ait quelques entres et quelques sorties afin de communiquer
avec l'extrieur.
1.3 Les bus de communication
videmment, pour que le systme fonctionne, il doit y avoir une communication entre le
microprocesseur, la mmoire et les entres/sorties. Cette communication est ralise
l'aide de trois bus qui regroupent les signaux, selon leur fonction.
1.3.1 Le bus de donnes
C'est un bus bidirectionnel sur lequel transitent les donnes changes par les lments du
systme.
1.3.2 Le bus dadresses
Il s'agit d'un bus unidirectionnel, manant du microprocesseur et se propageant vers les
dispositifs qu'il peut adresser. L'adresse qu'il porte permet d'atteindre une case mmoire
ou un registre spcifique avec laquelle une opration est dsire.
1.3.3 Le bus de contrle
C'est un groupe de lignes issues de ou allant vers le microprocesseur et reliant ce dernier
d'autres dispositifs. Son rle est de vhiculer les signaux destins assurer la
synchronisation et la commande de l'ensemble du systme. Par exemple, la ligne Reset
et R/W (lecture/criture), les lignes d'interruptions et l'horloge appartiennent ce bus

Introduction
Un PIC est un microcontrleur, cest une unit de traitement de linformation de
type microprocesseur laquelle on a ajout des priphriques internes permettant de
raliser des montages sans ncessiter lajout de composants externes.
Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou
encore composant jeu dinstructions rduit. L'avantage est que plus on rduit le nombre
dinstructions, plus facile et plus rapide en est le dcodage, et plus vite le composant
fonctionne.
La famille des PICs est subdivise en 3 grandes familles : La famille Base-Line, qui
utilise des mots dinstructions (nous verrons ce que cest) de 12 bits, la famille MidRange, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la
famille High-End, qui utilise des mots de 16 bits
Nous nous limiterons dans ce document la famille Mid-Range et particulirement au
PIC 16F84, sachant que si on a tout assimil, on pourra facilement passer une autre
famille, et mme un autre microcontrleur.
Pour identifier un PIC, on utilise simplement son numro :
Les 2 premiers chiffres indiquent la catgorie du PIC, 16 indique un PIC Mid-Range.
Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner avec
une plage de tension beaucoup plus tolrante.
Vient en suite une ou deux lettres pour indiquer le type de mmoire programme :

C indique que la mmoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mmoire de type ROM
F pour indiquer une mmoire de type FLASH.

On trouve ensuite un nombre qui constitue la rfrence du PIC.


On trouve ensuite un tiret suivi de deux chiffres indiquant la frquence
dhorloge maximale que le PIC peut recevoir.

Donc, un 16F84-04 est un PIC Mid-Range donc la mmoire programme est de type
FLASH de rfrence 84 et capable daccepter une frquence dhorloge de 4MHz.
Notez que les PICs sont des composants STATIQUES, cest dire que la frquence
dhorloge peut tre abaisse jusque larrt complet sans perte de donnes et sans
dysfonctionnement. Une version 10 peut donc toujours tre employe sans problme en
lieu et place dune 04. Pas linverse, naturellement.

Pourquoi choisir un PIC ?

Les performances sont identiques voir suprieurs ses concurrents


Les prix sont les plus bas du march
Les outils de dveloppement sont gratuits et tlchargeables sur le WEB
Le jeu d'instruction rduit est souple, puissant et facile matriser
Les versions avec mmoire flash prsentent une souplesse d'utilisation et des
avantages pratiques indniables
La communaut des utilisateurs des PICs est trs prsente sur le WEB. On trouve
sur le net quasiment tout ce dont on a besoin, tutoriaux pour dmarrer,
documents plus approfondis, schmas de programmeurs avec les logiciels qui
vont avec, librairies de routines, forums de discussion . . .

Le PIC 16F84
Les caractristiques principales du 16F84 sont :
Une mmoire programme de type flash de 1K (1024) mots de 14 bits
Une mmoire RAM constitue des registres du microcontrleur ainsi qu'une
mmoire de donnes libre de 68 octets.
Une mmoire EEPROM de 64 octets
Deux ports d'entre sortie, un de 8 bits et un de 5 bits
Un timer/Compteur
Un chien de garde / compteur
4 sources d'interruption
4 types d'oscillateurs slectionnables
Protection de code
Fonctionnement en mode sleep pour rduction de la consommation
Programmation par mode ICSP (In Circuit Serial Programming)

Aspect externe du 16F84


RA2
RA3
RA4/T0CKI
MCLR
VSS
RB0/INT
RB1
RB2
RB3

1
18
2
17
3
16
4 PIC 15
5 16F8X 14
6
13
7
12
8
11
9
10

Fig. 0-1 : brochage du 16 F84

RA1
RA0
OSC1
OSC2
Vdd
RB7
RB6
RB5
RB4

Les lments essentiels du 16F84

EEPROM de configuration, 14 bits

PORTB

PORTA

Mmoire EEPROM
RA4
Horloge
systme /4

RAM
16 registres systmeMmoire
(SFR) programme

TOSE

de type Flash
68 octets de RAM utilisateur

TOCS
0

Prescaler

TMR0

0
1

WDT

1024
mots de 14 bits

Horloge
WDT

PSA

Fig. 0-2 : les lments essentiels du 16F84

La mmoire programme (flash)


Cette mmoire de 1024 mots stocke le programme. L'emplacement de celui-ci peut
se trouver n'importe quel endroit de la mmoire. Cependant il faut savoir que suite un
RESET ou lors de la mise sous tension, le PIC commence l'excution l'adresse 0000H. De
plus, lorsqu'il y a une interruption, le PIC va l'adresse 0004H. Il est donc conseill de
placer le dbut du programme aprs l'adresse 0004H et de mettre un branchement au
dbut du programme l'adresse 0000H et un branchement au dbut de la routine
d'interruption s'il y en a une l'adresse 0004H.

La mmoire RAM - Rrgistres


La mmoire RAM est constitue de deux parties :

Les registres SFR (Special Function Register), ce sont les registres de


fonctionnement du PIC. L'ensemble de ces registres est souvent appel fichier des
registres. Nous reviendrons sur ces registre un peu plus loin dans ce document.

Les registres GPR (General Propose Register) sont des positions mmoire que
l'utilisateur peut utiliser pour stocker ses variables et ces donnes. On remarquera
donc que, indpendamment de leur nature, les position de la RAM sont toujours
appel registres
La mmoire RAM est organise en deux banks, pour accder un registre, il faut
d'abord se placer dans le bank o il se trouve. Ceci est ralis en positionnant le bit 0
appels RP0 du registre STATUS.

bank 0

bank 1

00

INDF

INDF

80

01

TMR0

OPTION

81

02

PCL

PCL

82

03

STATUS

STATUS

83

04

FSR

FSR

84

05

PORTA

TRISA

85

06

PORTB

TRISB

86

07

87

08

EEDATA

EECON1

88

09

EEADR

EECON2

89

0A

PCLATH

PCLATH

8A

0B

INTCON

INTCON

8B

0C

8C

Mmoire

utilisateur

Maped in bank0

.
.

2F

AF
Tableau 0.1 : les registres et la RAM du 16F84

Pour la mmoire utilisateur, l'utilisation des pages (Bank ) n'est pas ncessaire puisque
le Bank 1 est "mapped" avec le Bank0. Cela signifie qu'crire une donne l'adresse 0CH
ou l'adresse 8CH revient au mme.

LES PORTS D' E/S PORTA ET PORTB


Le PORTA est un port de 5 bits (RA0 RA4). Chaque E/S est compatible TTL. La
configuration de direction pour chaque BIT du port est dtermine avec le registre TRISA.
La broche RA4 est une sortie drain ouvert. En entre, elle est multiplexe avec
l'entre d'horloge du timer TMR0, elle est donc soit une entre du port A, soit l'entre
horloge du Timer TMR0, le choix se fait l'aide du bit T0CS du registre OPTION. Le choix
du front d'incrmentation du timer se fait par le bit T0SE de ce mme registre.
Le PORTB est un port bidirectionnel de 8 bits. Toutes les broches sont compatibles
TTL. La configuration de direction se fait l'aide du registre TRISB.

Toutes les entres du port B peuvent tre pourvues de rsistances de tirage


(weak pull up) valides par le bit RBPU du registre OPTION. Le pull up est dsactiv la
mise sous tension et quand le E/S sont programmes en sorties
En entre, la ligne RB0 appele aussi INT peut dclencher linterruption
externe INT. En entre, une quelconque des lignes RB4 RB7 peut
dclencher l'interruption RBI.

Le Timer TMR0
Cest un compteur libre de 8 bits incrment en permanence par lhorloge interne
Fosc/4/Prescaler ou par la broche RA4 du port A, dans ce cas, le bit TOSE du registre
OPTION slectionne le front actif. Le Prescaler est gr par les bits PSA, PS0, PS1 et PS2 du
registre OPTION.
Toute criture dans le registre TMR0 inhibe lincrmentation du compteur TMR0 pendant
deux cycles dhorloge.
Le dbordement de TMR0 (FF 00) peut dclencher l'interruption T0IE.

Le Timer Watchdog WDT (Chien de garde)


Cest un compteur incrment en permanence (mme si le C est en mode sleep) par
une horloge RC intgre indpendante de l'horloge principale. Lorsquil ce compteur,
arrive dborde, (WDT TimeOut), deux situations sont possibles :

Si le C est en fonctionnement normal, le WDT time-out provoque un RESET.


Ceci permet dviter de rester plant en cas de blocage du microcontrleur par
un processus indsirable non contrl. Pour viter un WDT time-out lors de
l'excution d'un programme, on a deux possibilits :
- Inhiber le WDT d'une faon permanente en mettant 0 le bit WDTE du mot de
configuration
- Remettre le WDT 0 priodiquement dans le programme l'aide de l'instruction
CLRWDT pour viter qu'il ne dborde

Si le C est en mode SLEEP, il est alors "rveill" par WDT time-out et


l'excution du programme continue normalement. Cette situation est souvent
exploite pour raliser des temporisations

Dure du time-out
Le Time Out vaut en principe 18 ms. Il est cependant rglable au moyen dun
pr diviseur (Prescaler) programmable entre 1 et 128 l'aide des bits PSA, PS0, PS1 et
PS2 du registre OPTION..

L'Horloge

L'horloge peut tre soit interne soit externe.


L'horloge interne est constitue d'un oscillateur
quartz ou d'un oscillateur RC.

Avec l'oscillateur Quartz, on peut avoir des frquences allant jusqu' 4, 10 ou 20 MHz selon le
type de C.
Le filtre passe bas RS, C2 limite les harmoniques dus
lcrtage et Rduit lamplitude de loscillation. (il n'est
pas obligatoire)

Avec un relaxateur RC, Lorsque la tension aux bornes


de Cext atteint le seuil haut du trigger de Schmitt, la sortie
de celui-ci passe au niveau haut, le transistor MOS devient
fortement conducteur et dcharge Cext. Quand la tension
au point OSC1 atteint le seuil bas, le transistor MOS se
bloque et Cext se (re)charge de nouveau avec la constante
de temps RC.
Dans certains cas, une horloge externe
au microcontrleur peut tre utilise pour
synchroniser
le PIC sur un processus
particulier.
La broche OSC2 est alors inutilise.

Organisation de la mmoire
Le PIC contient de la mmoire de programme et de la mmoire de donnes. La structure
Harvard des PICs fournit un accs spar chacune. Ainsi, un accs aux deux est possible
pendant le mme cycle machine.
Mmoire de programme
C'est elle qui contient le programme excuter. Ce dernier est tlcharg par liaison srie

La Figure montre l'organisation de cette mmoire. Elle contient 1k "mots" de 14 bits dans le
cas du PIC 16F84, mme si le compteur de programme (PC) de 13 bits peut en adresser 8k.

L'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur d'interruption
du PIC.
Registre fonction spciale (Special Function Register : SFR) :
Les registres fonction spciales sont utiliss par le microprocesseur et les priphriques
internes. Ils sont stocks dans la RAM statique , ce qui limite 8 bits (et non 14 bits) ces
registres. Les SFRs sont toujours stocks dans
les 32 premiers octets de chaque page (bank).
Registre W :
Le registre W est le registre de travail sur 8 bits pour raliser des oprations arithmtiques ou
logiques.
Pointeur de pile S :
Le pointeur de pile S est un ensemble de registre sur 13 bits. Sur les PICs, il y a 8 mots de 13
bits, ce qui limite le nombre maximal dinterruption ou dappel des sous-programmes. Le
pointeur de pile S mmorise une adresse, cest dire le contenu du compteur programme.
Attention, elle nest pas manipulable, exclusivement rserve au microprocesseur.
Compteur programme ou PC :
Le compteur programme, PC, indique ladresse du prochain code binaire 14 bits traiter.
Le registre PC est constitu de deux registres , un registre PCL constitu de 8 bits et un
registre PCLATH constitu de
5 bits. Le registre PC fait donc 13 bits qui correspondent 8192 mots de 14 bits mais dans
notre cas limit 4096 mots de 14 bits (voir doc du pic16F648A).
Registre dtat (Status Register) :
Le registre dtat est un registre sur 8 bits. Chaque bit une signification particulire :

Le bit C (Carry) : C est mis 1 lorsquune opration arithmtique gnre une retenue. Il
est galement utilis comme indicateur derreur lors dune multiplication ou dune
division, et sert lors de certaines oprations de dcalage ou rotation qui peuvent passer
par son intermdiaire ou non.
Le bit Z (Zro) : Z est mis 1 lorsque le rsultat de linstruction excut est nul.
Les bits RP1 et RP0 : Bits indiquant sur quelle page (bank), le microprocesseur travail en
adressage direct (seul 7 bits dadresses sont ncessaires).
Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage
indirect (8 bits
dadresses sont ncessaires).

Les directives les plus utilises

LIST : permet de dfinir le type de PIC utilis, le format du fichier hex produire
ainsi que d'autres paramtres. Exemple :
LIST
p=16f84
INCLUDE : permet d'insrer un fichier source
INCLUDE
"p16f84.inc"
INCLUDE
<mesdeclarations.h>
Page
10

CONFIG : permet de dfinir les fusibles de configuration (protection de


code, type d'oscillateur, chien de garde et temporisation du dpart)

Page
11

CONFIG

H'3FF9'

CONFIG
B'11111111111001'
si le fichier p16f84.inc a t insr, on peut utiliser les constantes prdfinies :
CONFIG
_CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF

Bits (ou "fusibles") de configuration


On se place dans le cadre de l'outil de dveloppement MPLAB de
Microchip. La synthaxe utilise est alors :
Nom

Valeurs
possible
s

Signification
Rend impossible la lecture de la mmoire de
programme Flash

CP

ON

programmateur) C'est une protection

Code Protection
bit)

PWRTE

et de l'EEPROM ( travers un

OFF

contre le piratage industriel.


Lecture possible

ON

A la mise sous tension du C, lance une


temporisation d'environ 72 ms durant laquelle
est effectu un RESET interne.

(Power-up
Timer Enable
bit)

OFF

Temporisation dsactive

WDT

ON

Active le watchdog (chien de garde)

(Watchdog
Timer Enable
bit)

OFF

Il est conseill d'utiliser cette configuration.

Oscillateur de type Rsistance / Condensateur


RC

OSC
(Oscillator
Selection bits)

Dsactive le watchdog

Remarques : conomique, rserv aux


applications o

HS
XT
LP

Oscillateur quartz haute frquence (4 MHz, 20


MHz ...).
Oscillateur quartz ou rsonateur cramique
Oscillateur quartz de faible puissance (32,768
kHz ...)

Exemple de configuration
Dans le code source (fichier avec extension .asm), les fusibles de configuration sont indiqus
au compilateur avec la directive suivante :
config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
Remarque
Les bits de configuration ne sont pas modifiables.
Dans l'exemple ci-dessus, pour activer le watchdog et utiliser un oscillateur de type RC, il
faut modifier le code source, recompiler et reprogrammer le C ...
config _CP_OFF & _WDT_ON & _PWRTE_ON &
_RC_OSC

EQU : permet de dfinir une constante ou une variable


: XX EQU 0x20
XX peut tre soit une constante soit une variable, l'assembleur fait la correspondance
correcte selon le contexte. Chaque fois que le compilateur rencontrera XX, il la remplacera
soit par la constante 0x20 s'il s'agit d'un adressage immdiat, soit par le contenu de la
mmoire 0x20 s'il s'agit d'un adressage directe
#DEFINE : dfinit un texte de substitution
#DEFINE pos(x,y,z)
(y-2z+x)
chaque fois que le compilateur rencontrera le texte pos(x,y,z), il le remplacera par (y2z+x)

ORG : dfinit la position dans la mmoire programme partir de laquelle seront


inscrites les instructions suivantes.

CBLOCK/ENDC : dfinit un bloc de constantes

CBLOCK 0X0C
var1,var
2 k
ENDC

; var1=0x0C, var2=0x0D, k=0x0D

DE : pour dclarer des donns qui seront stocke dans l'EEPROM de


donne
ORG
DE

proc

0x2100
"Programmer un PIC, rien de plus simple", .70, 'Z'

DT : pour dclarer un tableau RETLW


addwf

PCL,f

; saut la position : (position suivante + W)

DT "Programmer un PIC",23,0x47 ; L'assembleur remplacera cette ligne par la suite d'instructions :

RTLW
'P'
RTLW 'r'

RTLW 'o'
. . .
RTLW 'C'
RTLW 23
RTLW
0x47

END : indique la fin du programme

Format des nombres


L'assembleur reconnat les nombres en dcimal, hexadcimal, binaire ou octal. Pour
prciser la base il faut utiliser les prfixes prciss dans le tableau ci-dessous :
On peut l'aide de la directive LIST ou RADIX dfinir un Base
format par dfaut. Si par exemple on place une des
instructions suivantes au dbut du programme, tous les Dcimal
nombres sans prfix seront interprts en dcimal :
LIST r = dec
RADIX dec

Prfixe Exemple
(36)
D'nnn' D'36'
.nnn

.36

H'nn

H'2

'

4'

0xn

0x2

Binaire

n
B'.'

4
B'00100100'

Octal

O'nnn' O'44'

Hexadcim
al

(les radix valables sont dec, hex ou oct)

Structure d'un programme crit en assembleur


Un programme crit en assembleur doit respecter une certaine syntaxe et un certain
nombre de rgles afin qu'il soit facile lire et dbuguer :

Tout ce qui commence la premire colonne est considr comme une tiquette (label)
permettant de faire des renvois et aussi des assignations de constantes et de variables.

tout ce qui suit un point virgule est considr comme un commentaire non
interprt par le compilateur

Un programme apparat donc comme un texte crit sur 3 colonnes :


- la colonne de gauche contient les tiquettes
- la colonne du milieu contient les instructions
- la colonne de droite contient des commentaires

Il existe diffrentes faons indiquant comment doit tre organis un programme. Voici
un exemple d'organisation :

1) Quelques lignes de commentaire prcisant la fonction du programme,


2) Configuration, exemple :
LIST

p=16f84;f=inhx16m

INCLUDE

"p16f84.inc"

CONFIG H'3FF9'
3) Dfinition des constantes et des variables,
exemple : led
equ 0
x
equ
0x0C
cblock
0x0D y,z
u,v,w
endc
4) mettre l'adresse 0000 (adresse du RESET) une instruction de branchement au
dbut du programme principal :
org 0
goto debut
5) mettre l'adresse 0004 (adresse d'interruption) une instruction de branchement au
dbut de la routine d'interruption :
org
call

4
interruption

Si le programme est configur pour interdire les interruptions, on peut se passer de


cette tape et mme de la prcdente et commencer le programme principal
l'adresse 0000 sans mme l'utilisation de la directive ORG.
6) Ecrire les sous programmes et les sous programmes d'interruption
7) Ecrire le programme principal
8) terminer avec la directive END

LES INSTRUCTIONS DU 16F84


Tous les PICs Mid-Range ont un jeu de 35 instructions. Chaque instruction est
code sur un mot de 14 bits qui contient le code opration (OC) ainsi que l'oprande.
A part les instructions de saut, toutes les instructions sont excutes en un cycle
d'horloge. Sachant que lhorloge fournie au PIC est pr divise par 4 au niveau de
celle-ci, si on utilise par exemple un quartz de 4MHz, on obtient donc 1000000
cycles/seconde, cela nous donne une puissance de lordre de 1MIPS (1 Million d
Instructions Par Seconde). Avec une horloge de 20MHz, on obtient une vitesse de
traitement plus quhonorable.

1.3.4 Classement des instructions par nature

ADDWF

INSTRUCTIONS OPERANT SUR REGISTRE


(direct)
F,d W+F {W,F ? d}

Status

ANDWF

F,d

W and F {W,F ? d}

CLRF

Clear F

CLRW

Clear W

CLRWDT

Clear Watchdog timer

C,DC,Z

TO', PD'

Cycles
1

COMF

F,d

Complmente F {W,F ? d}

DECF

F,d

dcrmente F {W,F ? d}

DECFSZ

F,d

dcrmente F {W,F ? d} skip if 0

INCF

F,d

incrmente F {W,F ? d}

INCFSZ

F,d

incrmente F {W,F ? d} skip if 0

IORWF

F,d

W or F {W,F ? d}

MOVF

F,d

F {W,F ? d}

MOVWF

W F

RLF

F,d

rotation gauche de F a travers C {W,F ? d}

RRF

F,d

rotation droite de F a travers C {W,F ? d}

SUBWF

F,d

F W {W,F ? d}

SWAPF

F,d

permute les 2 quartets de F {W,F ? d}

XORWF

F,d

W xor F {W,F ? d}

1(2)
Z

1
1(2)

1
C

1
1

C,DC,Z

1
1

INSTRUCTIONS OPERANT SUR BIT


BCF

F,b

RAZ du bit b du registre F

BSF

F,b

RAU du bit b du registre F

BTFSC

F,b

teste le bit b de F, si 0 saute une instruction

1(2)

BTFSS

F,b

teste le bit b de F, si 1 saute une instruction

1(2)

INSTRUCTIONS OPERANT SUR DONNEE (Immediat)


ADDLW

W + K W

ANDLW

W and K W

IORLW

W or K W

MOVLW

K W

SUBLW

K W W

XORLW

W xor K W

C,DC,Z

1
C,DC,Z
Z

1
1

INSTRUCTIONS GENERALES
CALL

Branchement un sous programme de label L

GOTO

branchement la ligne de label L

NOP

No operation

RETURN

retourne d'un sous programme

RETFIE

Retour d'interruption

retourne d'un sous programme avec K dans W

RETLW
SLEEP

se met en mode standby

TO', PD'

Informatique industrielle
(microcontrleurs)

EL
MORNAN

L'adressage relatif
L'instruction addwf PCL , f permet de faire ce que l'on appelle un adressage relatif.
Cette technique est largement utilise pour la gestion des tableaux de donnes.
Exemple
bcd7seg
addwf
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw
retlw

PCL,1
0x40
0x79
0x24
0x30
0x19
0x12
0x02
0x78
0x00
0x10

;
;
;
;
;
;
;
;
;
;

0
1
2
3
4
5
6
7
8
9

LA PILE
La pile est une zone mmoire particulire.
Pour le PIC 16F84A, elle est constitue de 8 emplacements de
13 bits. La pile intervient dans le mcanisme interne des
instructions :

CALL
RETURN
RETLW
RETFIE

En effet, c'est dans la pile qu'est mmorise l'adresse de retour d'une routine.
Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction
suivante (qui se trouve dans le compteur de programme PC) est sauvegarde dans
la pile.
Quand une instruction RETURN, RETLW ou RETFIE apparat, le C lit la dernire
valeur sauvegarde dans la pile, libre l'emplacement et se branche l'adresse
indique.
Avec le mcanisme de la pile, un sous-programme peut appeler un sous-programme
(ou plutt un sous-sous-programme) : la pile rserve un autre emplacement..
La taille de la pile est limite 8 niveaux (pour le PIC 16F84A).

Informatique industrielle
(microcontrleurs)

EL
MORNAN

S'il y a plus de 8 routines actives en mme temps, le contenu de la pile est cras et le
programme ne fonctionne plus correctement.
Cela se traduit par un plantage (le C ne fait plus rien) ou bien par un comportement
plus ou moins incohrent (le C fait des choses bizarres) ... problmes que l'on
retrouve exactement sur des programmes plus complexes (Windows de Microsoft ...).

LES OUTILS DE DVELOPPEMENT


Les tapes ncessaires permettant de voir un programme s'excuter sur un PIC sont
:

Ecrire un programme en langage assembleur dans un fichier texte et le


sauvegarder avec l'extension .asm
Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le
rsultat est un fichier avec l'extension .hex contenant une suite d'instruction
comprhensible par le pic.
Copier le fichier .hex dans la mmoire programme du PIC (mmoire flash)
l'aide d'un programmateur adquat. On peut utiliser les programmateurs
de Microchip ou tout autre programmateur achet ou ralis par soit mme.
Mettre le PIC dans son montage final, mettre sous tension et admirer le travail.

Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe


l'diteur de texte, le compilateur MPASM, un outil de simulation et le logiciel de
programmation. Le programmateur lui-mme, n'est malheureusement pas gratuit.
Pour ce qui nous concerne, nous utiliseront MPLAB pour crire, compiler et
ventuellement simuler nos programmes, ensuite nous utiliserons un programmateur
pour copier les programme dans la mmoire flash du PIC.

Les interruptions
Une interruption provoque larrt du programme en cours pour aller excuter une
procdure d'interruption. A la fin de cette procdure, le microcontrleur reprend le
programme lendroit o il stait arrt. Comme une interruption est un vnement
asynchrone, il faut alors sauvegarder (empiler) le contexte dans lequel se trouvait
le microcontrleur avant linterruption, afin quil puisse reprendre correctement la
continuit du programme.
Le PIC16F84 possde 4 sources d'interruption. A chaque interruption sont associs
deux bits. Un bit de validation et un drapeau. Le premier permet d'autoriser ou non
l'interruption, le second permet au programmeur de savoir de quelle interruption il
s'agit. Tous ces bits sont dans le registre INTCON part le drapeau EEIF de
l'interruption EEI qui se trouve dans le registre EECON1.

Page 18

Informatique industrielle
(microcontrleurs)

EL
MORNAN

Droulement d'une interruption


Lorsque l'vnement dclencheur d'une interruption intervient, alors son
drapeau est positionn un. Comme au dbut de chaque instruction le processeur
vrifie les drapeaux, il verra le drapeau lev et vrifie alors si l'interruption en
question a t valide. Si c'est le cas, l'interruption est dclenche : le
programme arrte ce qu'il est en train de faire et va excuter la procdure
d'interruption qui se trouve l'adresse 4 :
l'adresse contenue dans le PC (Program Counter) est sauvegarde dans la
pile, puis remplace par la valeur 0004 (adresse de la routine d'interruption).
Le bit GIE est plac "0" pour inhiber toutes les interruptions (afin qu'on ne
soit pas drangs pendant l'excution de la procdure d'interruption).
A la fin de la routine d'interruption (instruction RETFIE), le bit GIE est
replac l'tat haut (autorisant ainsi un autre vnement)
le contenu du PC est recharg partir de la pile et le programme est repris l
o on l'a laiss.
Deux remarques importantes sont faire :

Le drapeau reste ltat haut mme aprs le traitement de linterruption. Par consquen

Seul le PC est empil. Si cela est ncessaire, les registres W et STATUS doivent
alors tre sauvegards en RAM puis restaurs la fin de la routine pour que le
microcontrleur puisse reprendre normalement le cours du programme.

L'interruption INT (Entre RBO DU PORTB)


Cette interruption est provoque par un changement d'tat sur l'entre RB0 du
port B quand elle est programme en entre. Elle est gre par les bits :
- INTE : bit de validation (1=oui,
0=non)
- INTF : drapeau
- INTEDG : front de dclenchement 1=montant, 0=descendant (registre OPTION)

L'interruption RBI (RB4 A RB7 DU PORTB)


Cette interruption est provoque par un changement d'tat sur l'une des entres
RB4 RB7 du port B, Le front n'a pas d'importance. Les bits associs sont RBIE
(bit de validation) et RBIF (drapeau)

L'interruption TOI : Dbordement du Timer TMR0


Cette interruption est provoque par le dbordement du timer TMR0. Les bits
associs sont TOIE (bit de validation) et TOIF (drapeau)

L'interruption EEI : Fin d'criture dans l'EEPROM


Cette interruption est dclenche la fin d'une criture russie dans
l'EEPROM. Les bits associs sont EEIE (validation) et EEIF (drapeau).
Page
19

Sauvegarde et restauration du contexte de travail


Il est important que le contexte de travail du programme principal soit le mme avant
et aprs l'excution de la routine d'interruption.
Cela concerne le registre STATUS et l'accumulateur W qui doivent retrouver le mme
contenu (en effet, ces deux registres sont souvent utiliss et donc modifis pendant la
routine d'interruption).
Voici la procdure prconise par Microchip :
La routine d'interruption commence par la sauvegarde du registre W puis du registre
STATUS :
org H'0004' ; vecteur d'interruption (directive du compilateur MPLAB)
movwf W_TEMP
swapf STATUS, W
movwf
STATUS_TEMP
La routine d'interruption finit par la restauration du registre STATUS puis du registre W :
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, f
swapf W_TEMP, W
retfie ; retour d'interruption

Page
20

Page
21

L'Initialisation : RESET
Le RESET peut avoir plusieurs causes :
- Mise sous tension
- Etat 0 sur broche MCLR
- Dbordement du timer du chien de garde.
Lorsque le RESET intervient, le C peut tre :
- En fonctionnement normal
- En mode SLEEP.
L'tat des registres la mise sous tension est donn par le tableau ci-dessous :
Registre

- MCLR

Power-on
RESET

- WDT on normal
operation

Rveil d'un
SLEEP

Pour le registre STATUS, voir tableau ci-dessous,


Cause du RESET
Mise sous tension

Etat avant
Normal
Sleep
Normal
Sleep

0 sur MCLR
Chien de garde

TO
1
NA
NA
0
0

PD
1
NA
0
1
0

Les registres de contrle du 16F84


Le registre OPTION ou OPTION_REG (81H)
Le registre d'OPTION contient les bits de contrles du PRESCALER, de
l'interruption externe INT, de l'horloge du timer TMR0 et du "tirage au plus" du PORT
B.
bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

r/w

r/w

r/w

r/w

r/w

r/w

r/w

r/w

RBPU

INTEDG

T0CS

T0SE

PSA

PS2

PS1

PS0

BIT 0,1 et 2: Slectionnent le ratio du PRESCALER.


Ces trois bits dterminent le ratio du prescaler. Les timers TMR0 et WDT
s'incrmente au rythme de l'horloge divise par le prescaler

PS2

PS1

PS0

rati

rati

TMR
2

WD
1

16

32

16

64

32

128

64

256

128

Tableau : ratios du prescaler

BIT 3: PSA ( PreScaler Assignment).


Si PSA=1 alors le prescaler est associ avec le
WDT. Si PSA=0 alors le prescaler est associ
avec le TIMER.
BIT 4: T0SE ( TMR0 Source Edge).
Ce bit dtermine sur quel front l'entre RA4 incrmentera le registre
TMR0 T0SE=1 Front descendant.
T0SE=0 Front montant.
BIT 5: T0CS ( TMR0 Clock Source)
Ce bit permet de slectionner l'horloge de
TMR0. T0CS=1 slection de l'horloge externe
RA4 (PORTA). T0CS=0 slection de l'horloge
interne.
BIT 6: INTEDG ( INTerrupt EDGe)
Si INTEDG=1 alors la broche RBO/INT gnre une interruption sur un front montant.
Si INTEDG=0 alors la broche RBO/INT gnre une interruption sur un front
descendant.
BIT 7: RBPU ( PORT B Pull-Up).
RBPU=1 Le "tirage au plus" interne du PORT B est
dsactiv. RBPU=0 Le "tirage au plus" interne du
PORT B est activ.

Le pull-up est dsactiv la mise sous tension et quand le port est configur en
sortie

Le registre INTCON (0B,8BH)


Le registre INTCON contient tous les bits de validation et les drapeaux des
diffrentes interruptions.
bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

r/w

r/w

r/w

r/w

r/w

r/w

r/w

r/w

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

GIE

Figure : registre INTCON

BIT 0:
RBIF
Drapeau de l'interruption RBI qui provient d'un changement d'tat d'un des bits
RB4 RB7. RBIF= 1 : drapeau lev.
RBIF= 0 : drapeau baiss.

BIT 1: INTF (INT interrupt Flag).


Drapeau d'interruption INT qui provient d'un changement d'tat de
l'entre RB0. RBIF=1 drapeau lev.
RBIF=0 drapeau baiss.

BIT 2: TOIF ( TMRO Overflow Interrupt Flag).


Drapeau de l'interruption TOI qui intervient au dbordement du timer
TMR0 TOIF=1 drapeau lev.
TOIF=0 drapeau baiss.

BIT 3: RBIE (RB Interrupt Enable).


Bit de validation de l'interruption RBI qui provient d'un changement d'tat sur l'une
des entre RB4 RB7 du port B.
RBIE=1 : Autorise
l'interruption. RBIE=0 : interdit
l'interruption

BIT 4: INTE ( INT interrupt Enable).


Bit de validation de l'interruption INT qui provient d'un changement d'tat sur
l'entre RB0 du port B.
INTE=1 : Valide l'interruption
INT. INTE=0 : Interdit
l'interruption INT.

BIT 5: TOIE (TMRO Overflow Interrupt Enable).


Bit de validation de l'interruption TOI qui intervient au dbordement du timer
TMR0 TOIE = 1 : Valide l'interruption.
TOIE= 0 : Interdit l'interruption.

BIT 6 : EEIE (EE write Interrupt Enable).


Bit de validation de l'interruption EEI qui intervient la fin d'une criture
dans l'EEPROM EEIE=1 : Valide l'interruption.

EEIE=0 : Interdit l'interruption


Remarque : le drapeau de cette interruption se trouve dans le registre EECON1

BIT 7: GIE (Global Interrupt Enable).


Bit de validation globale de toutes les interruptions.
GIE=1 : chaque interruption dpendent de son propre bit de
validation. GIE=0 : Toutes les interruption sont interdite.

Le registre STATUS (03,83H)


Divis en plusieurs blocks, il contient:

Les indicateur sur le rsultat d'un calcul reprsent par les bits d'tat C, DC, et
Z.
Le status d'un RESET par l'intermdiaire des bits PD et TO.
L'accs aux diffrents bancs de la mmoire par les bits IRP, RP1 et RP0

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

r/w

r/w

r/w

r/w

r/w

r/w

IRP

RP1

RP0

TO

PD

DC

BIT0: C (Carry).
Il passe "1" lorsque le rsultat d'une opration dpasse la valeur FF ou d'un
rsultat ngatif.

BIT1: DC (Digital Carry).


il se positionne "1" lorsque une retenue s'est produite entre les bit 3 et 4.

BIT2: Z (Zero).
Quand il est "1", il indique que le rsultat de l'opration est nul.

BIT3: PD (Power-Down).
PD=1 aprs un Power-up ou suite l'instruction
CLRWDT. PD=0 lorsque l'instruction SLEEP est
excute.

BIT4: TO (Time-Out).
Il passe "1" aprs les instructions SLEEP et CLRWDT. Lorsque le WDT (chien
de garde) dborde, ce bit passe "0".

BIT5 et 6: RP0 et RP1 (bits de slection de bancs).


Avec ces 2 bits, on accde aux diffrents bancs de la mmoire.

RP1

RP0

BANC

ADRESSE

00 7F

80 FF

100 17F

180 1FF

BIT7: IRP.
Ce bit n'est pas utilis avec le PIC16F84 et doit rester "0".

Le registre TMR0 (01H)


Cest le registre d'accs au TIMER/COMPTEUR TMT0.

Les registres FSR et INDF (04,84H et 00,80H).


Les registres FSR et INDF permettent l'adressage INDIRECTE. Dans le registre FSR,
on inscrit l'adresse de la case mmoire laquelle on veut accder. Le registre INDF
devient alors une image de cette case mmoire.
En rsum, toute lecture/criture dans le registre INDF se fait dans la
case mmoire pointe FSR (INDF = [FSR]).

Les registre EEADR(09H) et EEDATA (08H).


Ces registres permettent d'accder la mmoire EEPROM avec un adressage
indirect (exactement de la mme faon que FSR et INDF). Une lecture/criture dans
de registre EEDATA se fait dans la position mmoire pointe par EEADR

Le registre EECON1 (88H)


C'est un registre de contrle de la mmoire EEPROM. Seuls les 5 bits de poids
faible sont utiliss.
bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

r/w

r/w

r/w

EEIF

WRERR

WREN

WR

RD

Bit 0: RD (ReaD EEPROM).


Lorsque ce bit est mis "1", il indique au microcontrleur que l'on souhaite une
lecture de l'EEPROM. Apres le cycle de lecture, il est mis automatiquement 0.

BIT 1: WR (WRite EEPROM).


Lorsque ce bit est mis "1", il indique au microcontrleur que l'on souhaite une
criture dans l'EEPROM. Apres le cycle d'criture, il est mis automatiquement 0.

Bit 2: WREN (EEPROM WRite ENABLE).


C'est un bit de confirmation d'criture dans l'EEPROM. En effet, il ne suffit pas de
dfinir un cycle d'criture uniquement avec le bit WR. Il faut imprativement
valider le bit WREN (WREN=1) pour autoriser une criture.

Bit 3: WRERR (EEPROM WRite ERROR flag).


Ce drapeau indique qu'une erreur c'est produite lors d'un cycle d'criture dans
l'EEPROM. WRERR=1 : une opration d'criture a chou.
WRERR=0 : le cycle d'criture c'est droul normalement.

Bit 4: EEIF ( EEPROM Interrupt Flag).


Drapeau de l'interruption EEI qui intervient la fin d'un cycle d'criture russi dans
l'EEPROM. EEIF=1 : drapeau lev.
EEIF= 0 : drapeau baiss.

Le registre EECON2 (89H).


Ce registre de 8 bits est exclusivement utilis pour les squences d'critures dans
l'EEPROM. Il n'a pas d'adresse physique et la lecture de ce registre retourne une
valeur nulle. C'est un registre de scurit dcriture en EEProm de donnes. Une
donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA dans ce
registre.

Le registre TRISA (85H).


Le registre TRISA permet de configurer les E/S du PORTA en entre ou en sortie.
Si le bit associ est "1", alors l'E/S est configure en ENTREE. Si le bit est "0",
elle est configure en SORTIE.
Apres un RESET, toutes les E/S sont configures en ENTREE.
Comme le port A ne comporte que 5 bits, alors les bits 5, 6 et 7 ne sont pas
significatifs

Le registre PORTA (05H).


C'est le registre d'accs au port PORTA.

Le registre TRISB (86H)


Le registre TRISB configure chaque E/S du PORTB en ENTREE ou en SORTIE Si le bit
associ la porte est "1", alors elle sera configure en ENTREE. Si le bit est "0",
elle sera en SORTIE. Apres un RESET, toutes les E/S sont configures en ENTREE.

Le registre PORTB (06H).


C'est le registre d'accs du port B

Les registres PCL et PCLATH (02,82H et OA,8AH).


Le PC est un registre de 13 bits :
PC
H

PCL

PCL (8 bits) est la partie basse de PC, il est accessible en lecture criture
PCH (5 bits) est la partie haute de PC, il n'est pas accessible directement.
On peut toutefois le modifier indirectement l'aide du registre PCLATH qui
est une registre SFR accessible en lecture criture et o seuls 5 bits sont
utiliss.
Chaque fois qu'on crit dans PCL, PCLATH est recopi automatiquement dans
PCH
PC
H

PC AT
L H

PCL

Ecriture dans PCL

Le PC contient une adresse code sur 13 bits :

Le registre PCL contient l'adresse de poids faible (8 bits) du PC


Le registre PCLATH contient l'adresse de poids fort (5 bits) du PC.

Par exemple :
(PCL) = B'10110011'
(PCLATH) =B'---00010' (les bits 5 7 ne sont pas utiliss par le PIC
16F84A) (PC) = B'0001010110011' (adresse 0x2B3 en numration
hexadcimale).
La prochaine instruction que va excuter le PIC est donc situe l'adresse 0x2B3 de la
mmoire de programme.

Le compteur
Le PIC 16F84 est dot d'un compteur 8 bits. La Figure en donne l'organigramme

Le timer0 peut fonctionner suivant deux modes en fonction du bit T0CS


(OPTION_REG.5). En
mode timer (T0CS=0), le registre TMR0 est incrment chaque cycle
machine (si le pr-diviseur n'est pas slectionn).
En mode compteur (T0CS=1), le registre TMR0 est incrment sur chaque
front montant ou chaque front descendant du signal reu sur la broche
RA4/T0CKl en fonction du bit T0SE
(OPTION_REG.4). Si T0SE=0, les fronts montants sont compts, T0SE=1,
les fronts descendants sont compts.
VII.3. Pr-diviseur
En plus des deux horloges, un pr-diviseur, partag avec le chien de
garde, est disponible. La priode de l'horloge d'entre est divise par une
valeur comprise entre 2 et 256 suivant les bits PS2,
PS1 et PS0 (respectivement OPTION_REG.2, .1 et .0) (Figure). Le bit PSA
(OPTION_REG.3) permet de choisir entre la pr-division de timer0 (PSA=0) ou
du chien de garde (PSA=1).

L'utilisation du mode SLEEP


L'utilisation du mode SLEEP (Power-down mode) n'a d'intrt que dans les applications
alimentes par piles ou batteries.
En effet, en mode SLEEP la consommation lectrique du C devient trs faible.
2- Mise en mode Sommeil
Le C est plac en mode SLEEP aprs une instruction SLEEP.
L'instruction SLEEP provoque :

La mise 0 du bit /PD du registre STATUS

La mise 1 du bit /TO du registre STATUS

L'inhibition de l'horloge (broches OSC1/CLKIN et OSC2/CLKOUT) ce qui a pour


consquence d'arrter le programme (d'o une consommation d'nergie lectrique
rduite)

Le mise 0 du timer du watchdog (chien de garde)


Attention : le timer du watchdog continue de fonctionner pendant le mode SLEEP (si
le watchdog est actif).
3- Rveil (Power-up)
Le C se rveille, et reprend une activit normale, quand :
Il y a un RESET externe (niveau bas sur la broche /MCLR) : le programme est
rinitialis (adresse H'0000' de la mmoire de programme).

La temporisation du watchdog est dpasse (si le watchdog est actif) : le


programme reprend l'instruction qui suit l'instruction SLEEP.
o Une interruption RB0/INT, RB ou EEPROM survient (si ces interruptions sont autorises)
o
si GIE = 0 : le programme reprend l'instruction qui suit l'instruction SLEEP
o si GIE = 1 : l'instruction qui suit l'instruction SLEEP est excute puis le programme
saute la routine d'interruption (adresse H'0004' de la mmoire de programme)
Remarque : l'interruption TMR0 ne peut pas rveiller le C.
Le timer WATCHDOG (chien de garde)
Le timer watchdog (le watchdog pour simplifier) est un dispositif qui permet au C de
reprendre la main en cas de plantage.
Nous entendons par plantage :
la consquence d'un bug (dans ce cas, c'est une erreur humaine et il faut corriger
le programme)
la consquence d'une perturbation lectrique qui fait sauter le programme une
adresse quelconque et inattendue
Le plantage se traduit gnralement par un "blocage" : le C ne fait plus rien ou bien
des choses tranges.
Il faut alors faire un RESET externe (en supposant qu'un bouton poussoir sur la broche
/MCLR a t prvu cet effet) :

Autrement, il faut couper l'alimentation, attendre quelques secondes que les


condensateurs de filtrage se dchargent, et remettre en route. Nous allons voir que
le watchdog, par logiciel, permet de faire un RESET interne.
- Reset du watchdog
Pour utiliser le watchdog, il faut choisir de l'activer : cela se fait au niveau des bits de
configuration.
Il faut ensuite placer (judicieusement) dans le programme l'instruction CLRWDT.
Cette instruction remet 0 le timer du watchdog.
Si le timer watchdog dpasse une certaine dure, cela provoque un RESET
interne : le programme est rinitialis (adresse H'0000' de la mmoire de
programme).
Cette dure dpend des bits PSA, PS2, PS1 et PS0 du registre OPTION_REG :

PSAPS2, PS1,
PS0
0

XXX

Taux de
prdivisio
n
du

Dur
e
indicativ
e

18 ms

000

18 ms

001

36 ms

010

72 ms

011

144 ms

100

16

288 ms

101

32

576 ms

110

64

1,15 s

111

128

2,3 s

X = 0 ou 1
En effaant le watchdog intervalles rguliers (avec CLRWDT), le timer ne doit
normalement jamais "dborder".
En cas de plantage, le timer dborde ce qui gnre un RESET, et le programme
redmarre. Remarques :
L'instruction CLRWDT :

met 1 le bit /TO du registre STATUS


met 1 le bit /PD du registre STATUS

La mmoire EEPROM de donnes


La mmoire EEPROM (Electrical Erasable Programmable Read Only Memory), est
constitue de 64 octets commenant l'adresse 0x2100 que l'on peut lire et crire
depuis un programme. Ces octets sont conservs aprs une coupure de courant et
sont trs utiles pour conserver des paramtres semi permanents.
On y accde l'aide des registres EEADR et EEDATA : toute lecture criture dans
le registre EEDATA se fait dans la position mmoire pointe par EEADR.
Deux registres de contrle (EECON1 et EECON2) sont associs la mmoire
EEMROM.

Page
30

La dure dcriture dun octet tant de lordre de 10 ms, la fin de chaque criture russie
est annonc par le dclenchement de l'interruption EEI.

Procdure de lecture dans l'EEPROM de donnes

Placer ladresse de la donne lire dans EEADR


Mettre le bit RD de EECON1 1
Lire le contenu du registre EEDATA

Procdure d'criture dans l'EEPROM de donnes

Placer ladresse de la donne crire dans EEADR


Placer la donne crire dans EEDATA
Placer 0x55 dans EECON2 (processus de scurit pour viter une criture accidentelle)
Placer 0xAA dans EECON2 (processus de scurit pour viter une criture accidentelle)
Mettre le bit WR de EECON1 1
Attendre le drapeau EEIF avant de continuer

Les tapes ncessaires pour programmer un pic :

Exemples en assembleur avec 16F84


Calcul de la temporisation
Temporisation prcise

utilisation du timer

Temporisation non prcise : utilisation des boucles


A chaque fois que lon dsire fabriquer une temporisation, il faut calculer le temps
machine ncessaire pour excuter cette temporisation afin de dterminer la
valeur exacte de la temporisation.
Sachant que lhorloge interne divise par quatre la frquence issue du quartz.
Prenons lexemple dune temporisation avec un quartz de 4Mhz : linstruction GOTO
TEMPO dure 2 cycles , et linstruction DECFSZ 1cycle. Le compteur (retard) est
initialis 255. Le PIC fera 255 fois la boucle de temporisation : la temporisation est
donc 3*255=765s(3cycles *255*1s)

Exemple dune temporisation de 0.2s


;------------

Dfinition des registres temporaires

retard1

EQU

retard2
;------------

---------------

0x0C

; le registre temporaire retard1 se trouve l'


adresse 0C
EQU
0x0F
; le registre temporaire retard2 se trouve l'
adresse 0F
Programme de temporisation ( 0.2 s )
---------------

MOVLW 0xFF
MOVWF retard1

; on met 255 dans le registre W


; on charge retard1 avec 255 ( FFh contenu du

registre W ) MOVWF retard2

; on charge retard2 avec 255 ( FFh

contenu du registre W ) tempo


DECFSZ retard1,F
si

; on dcrmente retard1 et on saute la prochaine instruction

GOTO tempo

; le registre retard1 = 0 sinon retour tempo

MOVLW 0xFF
MOVWF retard1

; on met 255 dans le registre W


; on charge retard1 avec 255 ( FFh contenu du registre

W ) DECFSZ retard2,F

; on dcrmente retard1 et on saute la

prochaine instruction si GOTO tempo ; le registre retard1 = 0 sinon retour


tempo
RETURN

; retour au programme principal aprs l 'instruction CALL

Exemple de temporisateur interne utilisant le


Timer
1.1

CLIGNOTER UNE LED, TEMPO AVEC TMR0


;************************** programme led_tmr.asm ***************************
; Clignotement d'une LED relie n'importe quelle sortie du port B
; la temporisation est ralise l'aide de l'interruption provoque
; par le dbordement du timer TMR0. Ce dernier est cadenc par l'horloge
; interne pr divise par 256 ce qui donne une priode d'interruption
; de 255 x 255 = 65536 s. l'aide du compteur TIME, on fait changer
; l'tat du port B tous les 8 cycles de TMR0 ce qui donne une temporisation
; de l'ordre de 524288 s soit un peu plus d'une demi seconde
;***************************************************************************
list
p=16f84,f=inhx8m
config _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC
#include
"p16f84.inc" TIME equ
0x10
; ************************************ dmarrage sur REST
org 0
goto start
; ************************************ vecteur d'interruption
org
4
bcf
INTCON,T0IF ; baisser le drapeau lev par
l'interruption decfsz
TIME,f
retfie
comf
PORTB
movlw d8
; initialiser
TIME movwf
TIME
retfie
start

bsf
STATUS,RP0
clrf
TRISB
sortie movlw
horloge interne
movwf OPTION_REG
255 bcf STATUS,RP0
movlw B'10100000'
movwf INTCON
movlw d8
passage movwf
movlw B'00001111'
PORB movwf

Loo
p

goto

Loop

interruption end

; select bank1
; programme tous les bits du bort B en
B'00000111' ; timer cadenc par
; prescaler associ TMR0, ratio
; select bank0
; autorisation globale des interruptions
; autorisation de l'interruption par
TMR0
; initialise TIME pour le premier
TIME
; met n'importe quelle valeur dans
PORTB

; le PIC reste plant ici et n'en sort que pour aller excuter une

Exemple d'application: Un compteur binaire

; Titre : Compteur binaire


; PIC utilis : PIC 16 F 84
; On ralise un compteur binaire sur les broches RB0 RB7 d' un PIC 16 F 84 le quartz
utilis
; est de 4 Mhz , on effectue une tempo environ gale 0.2 seconde.
;-----------list

Directive d' assemblage pour MPLAB

---------------

p=16f84A

#include p16f84A.inc
config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0

; bouton marche

;------------ Dfinition des registres temporaires --------------retard1 EQU


0C retard2

0x0C
EQU

adresse 0D memo

; le registre temporaire retard1 se trouve l' adresse


0x0D
EQU

; le registre temporaire retard2 se trouve l'


0x0E

; le registre memo tampon se

trouve l' adresse 0E


;------------

Init des ports A et B

---------------

ORG 0
bsf STATUS,5

; on met 1 le 5eme bit du registre status pour accder

; la 2eme page mmoire ( pour trisa et trisb )


MOVLW B'00000000'

; on met 00 dans le registre W

MOVWF TRISB

; on met 00 dans le port B il est programm en sortie

MOVLW 0x1F

; on met 1F dans le registre W

MOVWF TRISA

; on met 00 dans le port A il est programm en entre

bcf STATUS,5

; on remet 0 le 5eme bit du registre status pour accder


; la 1ere page mmoire

;------------

Programme principal

---------------

Main
btfss PORTA,inter0
goto Main

; interrupteur 0 ( marche ) appuy ? si oui on continu sinon

; on va l' tiquette Main

MOVLW 0xFF

; on met 255 dans le registre W

MOVWF retard1
MOVLW 0xFF

; on charge retard1 avec 255 ( FFh contenu du registre W )


; on met 255 dans le registre W

MOVWF retard2

; on charge retard2 avec 255 ( FFh contenu du registre W )

MOVF memo, W

; on met memo dans W

MOVWF PORTB

; on met W sur le port B (

leds ) CALL tempo ; on appel la temporisation


MOVLW 0x01

; on met 1 dans le registre

W ADDWF memo, F

; on additionne

memo + 1
GOTO Main
;------------

; retour au dbut du programme

Programme de temporisation ( 0.2 s )

---------------

tempo
DECFSZ retard1,F
si

; on dcrmente retard1 et on saute la prochaine instruction

GOTO tempo

; le registre retard1 = 0 sinon retour tempo

MOVLW 0xFF
MOVWF retard1

; on met 255 dans le registre W


; on charge retard1 avec 255 ( FFh contenu du registre

W ) DECFSZ retard2,F

; on dcrmente retard1 et on saute la

prochaine instruction si GOTO tempo ; le registre retard1 = 0 sinon retour


tempo

RETURN

; retour au programme principal aprs l 'instruction CALL

END

; fin du programme

Exemple d'application: Les feux tricolores

; Titre : Feux
tricolores PIC utilis
: PIC 16 F 84
; On ralise des feux tricolores sur les broches RB0 RB5 d' un PIC 16 C 84
; le quartz est de 4 Mhz , on effectue une tempo longue environ gale 4 secondes et
; une tempo courte environ gale 1.5 secondes.
; un bouton marche sur le port A permet de lancer l' application
; RB0=rouge1 RB1=orange1 RB2=vert1
; RB3=rouge2 RB4=orange2 RB5=vert2
;-----------list

Directive d' assemblage pour PLAB ---------------

p=16f84A

#include p16f84A.inc
config H'3FF9'

;------------ Dfinition des constantes --------------#define inter0 0

; bouton marche

#define inter1 1

; bouton clignotement orange

;------------ Dfinition des registres temporaires --------------retard1

EQU 0x0C

0C retard2

EQU

; le registre temporaire retard1 se trouve l' adresse


0x0F

adresse 0F retard3

; le registre temporaire retard2 se trouve l'

EQU

0x10

; le registre temporaire retard3 se

trouve l' adresse 10


;------------

Init des ports A et B

---------------

ORG 0
bsf STATUS,5

; on met 1 le 5eme bit du registre status pour accder


; la 2eme page mmoire ( pour trisa et trisb )

MOVLW 0x00

; on met 00 dans le registre W

MOVWF TRISB

; on met 00 dans le port B il est programm en sortie

MOVLW 0x1F

; on met 1F dans le registre W

MOVWF TRISA

; on met 1F dans le port A il est programm en entre

bcf STATUS,5

; on remet 0 le 5eme bit du registre status pour accder


; la 1eme page mmoire

;------------ Init des feux ROUGE1 et ROUGE2 --------------MOVLW B'00001001'


MOVWF PORTB

; on met 0C dans le registre W ( Rouge1 et Rouge2 )

; on met W sur le port B ( led )

;-------------------- Programme principal ---------------------debut


MOVLW B'00001001'
MOVWF PORTB

; on met 0C dans le registre W ( Rouge1 et Rouge2 )


; on met W sur le port B ( led )

btfss PORTA,inter0

; interrupteur 0 ( marche ) appuy ? si oui on continu sinon

;va debut
goto debut
ret_cli
btfsc PORTA,inter1

; interrupteur 1 ( clignotant ) appuy ? si oui on

;va clignote
goto clignote
MOVLW B'00001001'

; on met 0C dans le registre W ( Rouge1 et Rouge2 )

MOVWF PORTB

; on met W sur le port B ( led )

;--------------- Chargement de la temporisation


--------------------CALL tempo

; on appel la temporisation 1 ( longue )

MOVLW B'00001100'

; on met 0C dans le registre W ( Vert1 et Rouge2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo

; on appel la temporisation 1 ( longue )

MOVLW B'00001010'

; on met 0A dans le registre W ( Orange1 et Rouge2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo2

; on appel la temporisation courte

MOVLW B'00001001'

; on met 0C dans le registre W ( Rouge1 et Rouge2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo2

; on appel la temporisation courte

MOVLW B'00100001'

; on met 24 dans le registre W ( Rouge1 et Vert2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo

; on appel la temporisation longue

MOVLW B'00010001'

; on met 14 dans le registre W ( Rouge1 et Orange2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo2

; on appel la temporisation courte

GOTO debut

; retour au dbut du programme

;------------

Programme de temporisation longue


---------------

tempo
MOVLW 0xFF
MOVWF retard1

; on met ff dans le registre W


; on met W dans le registre

retard1 MOVWF retard2

; on met W dans le

registre retard2 MOVLW 0x12

; on met 12 dans

le registre W MOVWF retard3


dans le registre retard3

; on met W

attente
DECFSZ retard1,F

; on dcrmente retard1 et on saute la prochaine instruction si

GOTO attente

; le registre retard1 = 0 sinon retour attente

movlw 0xFF

; on recharge retard1

movwf retard1
DECFSZ retard2,F

; on dcrmente retard2 et on saute la prochaine instruction si

GOTO attente

; le registre retard2 = 0 sinon retour attente

movlw 0xFF

; on recharge retard2

movwf retard2
DECFSZ retard3,F

; on dcrmente retard3 et on saute la prochaine instruction si

GOTO attente

; le registre retard3 = 0 sinon retour attente

RETURN

;------------

; retour au programme principal aprs l 'instruction CALL

Programme de temporisation courte

---------------

tempo2
MOVLW 0xFF
MOVWF retard1

; on met ff dans le registre W


; on met W dans le registre

retard1 MOVWF retard2

; on met W dans le

registre retard2 MOVLW 0x07

; on met 7 dans le

registre W MOVWF retard3; on met W dans le


registre retard3 attente2
DECFSZ retard1,F

; on dcrmente retard1 et on saute la prochaine instruction si

GOTO attente2

; le registre retard1 = 0 sinon retour

attente2 movlw 0xFF ; on recharge retard1


movwf retard1
DECFSZ retard2,F

; on dcrmente retard2 et on saute la prochaine instruction si

GOTO attente2

; le registre retard2 = 0 sinon retour attente2

movlw 0xFF

; on recharge retard2

movwf retard2
DECFSZ retard3,F

; on dcrmente retard3 et on saute la prochaine instruction si

GOTO attente2

; le registre retard3 = 0 sinon retour attente2

RETURN
clignote
MOVLW B'00010010'

; on met 12 dans le registre W ( Orange1 et Orange2 )

MOVWF PORTB

; on met W sur le port B ( led )

CALL tempo2

; on appel la temporisation courte

MOVLW B'00000000'

; on met 00 dans le registre W ( aucune led )

MOVWF PORTB

; on met W sur le port B ( led

) CALL tempo2

; on appel la temporisation

courte GOTO ret_cli


END

UTILISATION DE LINTERRUPTION RB0


;-----

Application avec un PIC : Gestion d'une interruption sur RB0 ------

; Titre : Interruption sur RB0


; PIC utilis : PIC 16 F 84
; Ce montage d'initiation base de PIC 16F84 permet de tester le droulement d
'une
; interruption. Lorsque la broche RB0 passe de 0 1 ( front montant ) alors on
gnre
; une IT , on allume une led ( RB7 ) et aprs une temporisation on teint celle-ci.
; Une prochaine action sur RB0 redclenche l ' IT

;------------

Directive d' assemblage pour PLAB


--- - list p=16f84A

#include p16f84A.inc
config H'3FF9'

Page
40

;**** Le programme pricipal commence l ' tiquette init


****** ORG 0

Page
41

goto init
;**** Le programme d' interruption se dclenche lorsque l' entre RB0 passe de
0 1 *** ORG 4
;*********** Programme d 'interruption **********************
bsf PORTB,7

; on allume la led connecte

sur rb7
;------------ temporisation --------------tempo2
MOVLW 0xFF

; on met ff dans le registre W

MOVWF retard1

; on met W dans le registre

retard1 MOVWF retard2

; on met W dans le

registre retard2 MOVLW d'52'

; on met 7 dans

le registre W MOVWF retard3

; on met W dans

le registre retard3
attente2
DECFSZ retard1,F

; on dcrmente retard1 et on saute la prochaine

instruction si GOTO attente2

; le registre retard1 = 0 sinon retour

tempo
movlw 0xFF

; on recharge

retard1 movwf retard1


DECFSZ retard2,F

; on dcrmente retard2 et on saute la prochaine

instruction si GOTO attente2


tempo
movlw 0xFF

; on recharge

retard2 movwf retard2

; le registre retard2 = 0 sinon retour

DECFSZ retard3,F

; on dcrmente retard3 et on saute la prochaine

instruction si GOTO attente2


tempo

; le registre retard3 = 0 sinon retour

bcf PORTB,7

; on teint la led connecte sur rb7

bcf INTCON,INTF ; on remet 0 le bit du registre d' IT qui est pass 1


RETFIE

; retour d 'interruption

;************* Programme d' INIT **************************


init
retard1

EQU

0x0C

; le registre temporaire retard1 se trouve l'

adresse 0C retard2EQU

0x0F

; le registre temporaire retard2 se trouve

l' adresse 0F retard3

EQU

0x0E ; le registre temporaire retard3 se

trouve l' adresse 0F bsf STATUS,5

; on met 1 le 5eme bit du


registre status pour accder

; la 2eme page mmoire ( pour configurer trisa et trisb


; -> broches en entre ou en sortie )
MOVLW B'00000001'

; rb0, en entre ( rb0 sera la broche utilise

; pour l ' interruption )


MOVWF TRISB
bsf OPTION_REG,INTEDG
; Le passage de 0 1 sur RB0 provoque une
IT; sur un front montant ( choix du front sur RB0 )
bcf STATUS,5
accder

; on remet 0 le 5eme bit du registre status pour


; la 1ere page mmoire

bsf INTCON,INTE

; autorise l ' IT sur RB0

bsf INTCON,GIE

; autorise les

Interruptions clrf PORTB


;************ Programme principal en rebouclage *********************
debu
t
RB0

sleep

; mise en sommeil du PIC conso : 3.2 mA, attente

impulsion sur GOTO debut

;*********** Fin du programme ***********


end

COMMANDE D'UN AFFICHEUR 7 SEGMENT PAR LE PORT B


;*********************************** programme 7seg_bcl.asm ******************
; Afficher un compteur 4 bits sur un afficheur 7 segment Anode Commune
; connect au port B. Le tableau de dcodage 7 segments est situ dans
; la mmoire programme.
; La temporisation d'affichage est ralise par boucle
;*************************************************************************************

list
p=16f84,f=inhx8m
include <p16f84.inc>
config _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
C1
T1
T2
T3

equ
equ
equ
equ

0x0C
0x0D
0x0E
0x0F

; compteur en position 0x0C de la


;RAM
T1,T2,T3 = compteurs
temporisateur

; ************************************ dmarrage sur REST


org
0x00
goto
main
; ************************************ vecteur d'interruption
org
0x04
; normalement on ne devrait jamais passer
clrf
INTCON
;par-l
aucune interruption autorise
retfie
; *************************** Codes 7 segments anode commune
bcd7seg
addwf PCL,1
retlw
0x40
;0
retlw
0x79
;1
retlw
0x24
;2
retlw
0x30
;3
retlw
0x19
;4
retlw
0x12
;5
retlw
0x02
;6
retlw
0x78
;7
retlw
0x00
;8
retlw
0x10
;9
retlw
0x08
;A
retlw
0x03
;B
retlw
0x46
;C
retlw
0x21
;D
retlw
0x06
;E
retlw
0x0E
;F
; ******************************** Routine de temporisation
tempo
movwf
T3
bcltmp
decfsz
T1,f

goto

bcltm
p

decfsz
goto
decfsz
goto
return

T2,f
bcltmp
T3,f
bcltmp

; *************************************** Programme principal


main
bsf
STATUS,RP0 ; passage en bank 1 des
registres
clrf
TRISB
; port B en
sortie bcf
STATUS,RP0 ;
passage en bank 0
loop
movf
C1,w andlw
0x0F
call
movwf
movlw
s call
incf
goto

bcd7seg
PORTB
4
tempo
C1,1

; affichage
; 0.59

loop end
5V

a
fb
g
ec
dp
a b c d e f g
PIC16f84

Rb0 RB1 RB2 RB3 RB4 RB5 RB6 RB7

La compilation se fait a laide du logiciel MPLAB de Microchip

Simulation dun PIC sous Proteus


Pour faire cela il est ncessaire davoir :
-> Proteus qui contient le module de simulation des pic (Module VSM)
-> Un schma dont tout les composants sont simulables (ou ceux qui le sont pas :
exclus de la simulation :
exemple les borniers )
-> Un fichier excutable (code machine) FICHIER.HEX, OU MIEUX un code machine
+ informations de Dbugage :FICHIER.COF
1. Prsence Module VSM
Le module VSM effectue la simulation du microprocesseur partir de votre code
source. Vrifier la prsence du module VSM adapt au microprocesseur simuler
sous Proteus.
-> Lancer Licence Manager :

VSL pour PIC 16 XXXX dans lexemple.


2. Fichier simuler
Editer les proprits du Microprocesseur puis slectionner le fichier source, on peut
utiliser :
VERSION 1 : Soit le fichier_source.HEX

VERSION 2 : Soit le fichier_source.COF (contenant le fichier source et les directives


de dsassemblage)
Il est prfrable dutiliser plutt ce fichier. Ce qui permet des mises au point plus
efficace (mode pas pas)

Pour lancer la simulation il suffit de cliquer sur licone PLAY verte en bas de page

Pour lancer la simulation en mode pas pas (et dbogage) :

*
En excutant la simulation en mode pas pas , vous pouvez ensuite excuter le
programme par pas, mettre
des points darrt dans le programme, voir ltat des registres, etc...

Circuits dinterfaces avec le microcontrleur


1 Utilisation des leds

2-AFFICHEUR LCD
2.1 Prsentation :
Lafficheur LCD, autrement appel un afficheur cristaux liquide. Il consomme
relativement de 1 5 mA et constitu de deux lames de verre, distante de 20 m
environ, sur lesquelles sont dessines les mers nantisses formant les caractres.
Lapplication entre les deux faces dune tension alternative basse frquence de
quelques volts (35V) le rend absorbant .Un afficheur cristaux liquide ne peut
tre utilis quavec un bon clairage ambiant .Son lisibilit augmente avec
lclairage
2.2 Principe de fonctionnement :
on utilise le mode 4 bits de lafficheur LCD. Dans ce mode, seul les 4 bits de poids
fort (D4 D7) de lafficheur sont utiliss pour transmettre les donnes et les lires. Les
4bits de poids faible (D0 D3) sont alors connects la masse, on a donc besoin
hors alimentation de sept fils pour commander lafficheur. Les donnes sont crites
squentiellement les quatre bits de poids fort suivi des quatre bits de poids faible.
Une impulsion positive dau moins 450ns doit tre envoye

sur la ligne E pour valider chaque demi -octet. On peut aprs chaque action sur
lafficheur vrifier que celui-ci est en mesure de traiter linformation suivante .Pour
cela, il faut demander une lecture en mode commande et tester le flag Busy BT.
Lorsque BF=0, lafficheur est prs recevoir une nouvelle commande ou donne.
2.3 Prsentation dun cran LCD :
Quil soit une ou deux lignes, un afficheur LCD se prsente sous la forme
suivante :

Au-dessus de lcran cristaux liquides proprement dit, on trouve une srie de 14


broches aux rles Suivantes :
Broche

1 : masse ;
Broche 2 : Vcc ;
Broche 3 : luminosit ;
Broche 5, R/W : slection du mode lecture ou criture :

critur
e
1
lectur
e

Broche 6, E : Commande des oprations dcriture ou de lecture ;


Broche 7 14 : utilises pour le transfert des donnes ou des instructions. Le transfert
peut se faire sur 8 bits, toutes les broches sont alors utilises, ou sur 4 bits, dans ce
cas, seules les broches 11 14 sont utilises.

Page
50

U1

PIC16F877
VDD=VCC VSS=GND

8 7D2 D3 D4 D5 D6 D7
D0 D1

RS RW E
4

VSS VDD VEE

LM032L

RS RW E

RD0/PSP019
RD1/PSP120
RD2/PSP221
RD3/PSP322
RD4/PSP427
RD5/PSP528
RD6/PSP629
RD7/PSP730

LCD

GND VCC VEE

33
RB0/INT
RW
34
RB1 RB2 RB3/PGM
35
RB4 RB5 RB6/PGC RB7/PGD
36
RS E
2
37
RA0/AN0
3
RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI 38
4
39
5
40
6
15
7
RA5/AN4/SS
RC0/T1OSO/T1CKI
16
8
RC1/T1OSI/CCP2
17
RE0/AN5/RD
RC2/CCP1
RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT
18
RE1/AN6/WR
23
RE2/AN7/CS
24
25
26
OSC1/CLKIN
OSC2/CLKOUT
1MCLR/Vpp/THV

Montages de lafficheur LCD avec le PIC

3- Le clavier
3.1 Prsentatio
n:
Le clavier est le priphrique le plus commode pour saisir du texte, mais dans notre
carte on va utiliser un clavier alphanumrique 16 touches matrices pour saisir
des numros et un peut dalphabets, pour connecter le clavier au microcontrleur
on est besoin dun codeur de clavier 74LS922 pour prserver les ressources du
microcontrleur.

3.2 Principe de fonctionnement :

Le clavier se compose de 16 touches reparties sur une matrice de 4 lignes (chaque


ligne contient 4 touches) 4 pistes sont disposes horizontalement (elles
correspondant aux 4 lignes de touches) et 4 autres pistes sont disposes
verticalement (elles correspondant aux 4 colonnes de touches). Chaque touche agit
comme un bouton poussoir qui tablit le contact entre une des 4 pistes horizontales
et une des 4 pistes verticales.
Chaque touche est un interrupteur, normalement en position ouverte .Lorsquune
touche est appuye un signal lectrique est envoy vers le codeur, circuit
lectronique trs simple qui associe chaque signal un code (par exemple le code
ascii de la touche). Ce signal peut tre utilis pour envoyer une interruption au
processeur fin quil traite linformation. Les codeurs rellement utiliss assurent
de fonctions supplmentaires comme le dcodage automatique des touches
appuyes longtemps.

4 Circuit ULN2003
LULN est un composant qui pour rle de commander les relais. Il comporte deux
transistors, deux diodes et deux rsistances. Le fait quil renferme tous les
composants lui permet davoir une longue dure de vie et de minimiser les pertes de
courant.
LULN est capable d'couler un courant max de 500mA par transistor et supporte une
tension max de 50V. Ainsi vous pouvez connecter directement la majorit des relais
sans problme

Figure : Structure interne de lULN2003

Circuit ULN2803
L'ULN2803 est dcrit comme "un conducteur 8 lignes". Cela signifie qu'il contient le
circuit pour contrler huit lignes de productions individuelles, chaque acte
indpendamment des autres.

5-Les moteurs
5-1. Moteur pas
pas :

Moteur pas pas


5.2 Prsentation :
Le moteur pas pas est un moteur qui tourne en fonction des impulsions
lectriques reu dans ses bobinages. Langle minimal entre deux modifications des
impulsions lectrique sappelle un pas .On caractrise un moteur par le nombre de
pas par tour.
5.3 Principe de fonctionnement :
Pour identifier le brochage du moteur ,un simple ohmmtre(calibre 100 ou
200ohms)permet de dterminer dune part les trois fils appartenant chaque
bobinage [P1-com1-P1\]et[P2-com2- P2\] ,dautre part le point milieu dun bobinage
donne(si la rsistance entre le commun et une phase vaut alors que celle entre
les deux phase vaut2R) .les deux les deux bobinages sont interchangeable, ainsi
que les deux phases extrmes dun mme bobinage (P1etP1\) ; signalons que cette
dernire manipulation entrane un changement du sens de rotation. Un cycle tant
ralis en quatre tapes successives, la squence ment est donc effectu par un
compteur binaire quatre sorties, lesquelles prsenteront donc cinq combinaisons
diffrentes (0000, 0001, 0010, 0100, 1000).Les tapes dfilent au rythme de lhorloge
intgre au compteur.
5.4 Connexion du moteur pas pas sur la carte :

Le moteur pas pas+ULN2003A sont connects aux lignes RD0 RD3 du


microcontrleur.
5.5 Moteur courant continue :
Le moteur courant continue est une machine lectrique tournante constitu de deux
parties principales : le stator (la partie fixe) et le rotor (la partie mobile).

Moteur courant continue


5.6 Connexion du moteur

Dans ce figu
re on utiliser deux relaies pour changer le rotation du moteur courant
continue.
Les
sens
dedeux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du
microcontrleur.

Lorsqu'on veut commander le sens de rotation dun moteur ( courant continu ou pas
pas) on est souvent oblig d'inverser la polarit. De plus il est gnralement
prfrable de pouvoir faire varier la vitesse du moteur. La solution est dutiliser le pont
en H.

Figure : Principe du pont en H


En regardant les schmas, on voit le sens de rotation du moteur : sur le schma a ; le
moteur est l'arrt (on devrait mme dire qu'il est frein : en effet court-circuiter les
deux ples d'un moteur revient le freiner).

Sur le schma b ; il tourne dans le sens inverse du schma c, et enfin sur le


schma d ; il est frein. Et bien voici la base du pont en H, toute l'ide rside
dans ce schma. Bien sr, pour l'implmenter, il va nous falloir remplacer les
interrupteurs par des transistors.

IN1

IN2

TAT MOTEUR

ARRE
T
SENS
1
SENS
2
ARRE
T

Figure : Tableau des diffrentes squences

Lorsqu'on arrte le moteur, et qu'il continue tourner avec l'inertie, il se comporte


comme une gnratrice. Pour viter d'avoir des courants dans les transistors on
monte des diodes de roues libres.

Figure: Schma dun pont en H


Commande de 2moteurs DC avec
L293D

6-Les relais
Les relais sont pilots via un transistor de commande, une diode de roue libre est
monte aux bornes du relais pour la protection du transistor

Montage du relais

7 Isolation laide dun opto- triac


Exemple de commande dune lampe.

8 Isolation galvanique
laide dun
opto_transistor

Page
60

9 Affichage 7sgments multiplex

10-Les touches de commande


Si on dispose de trois boutons poussoirs (SW0, SW1 et SW2)qui sont relis trois entres
numriques du microcontrleur en les reliant respectivement aux rsistances (R10
,R9 et R8) de rappel la source Vcc de moyenne valeurs (2.2 K) pour ne pas
consommer plus de lnergie .

SW O

RE0
RE1 RE2

12

SW 1
12

SW 2
12

R10 R9R8
2.2k2.2k2.2k

VCC

Montage des boutons poussoirs

11-Communication srie avec RS232


Le circuit adaptateur de niveau de tension TTL :RS232 permet alors de
relier un interface (exemple le tlphone au port srie dun
PC) .

Prsentation :
Les liaisons sries permettant la communication entre deux systmes
numriques en limitant le nombre de Fils de transmission..
DCD (Data Carrier Detecte ) : Cette ligne est une entre active ltat haute.
Elle signal lordinateur quune liaison a t tablie avec un correspondant.
RX( Reciver Data) : Cette ligne est une entre.Cest ici que transitent les
informations du correspondant vers lordinateur.
TX (Transmit Data ) : cette ligne est une sortie. Elle permet la vhicule des
donnes de lordinateur vers le correspondant.
DTR (Data Terminal Ready ) :Cette ligne est une sortie active ltat haut Elle
permet lordinateur de signaler au correspondant que le port srie t libr
et quil peut tre utilis sil le souhaite.
GND (GrouND) : cest la masse.
DSR (Data Set Read) : Cette ligne est une entre active ltat haut. Elle
permet au correspondant de signaler quune donne est prte.
RTS (Request To Send ) : cette ligne est une sortie active ltat haut. Elle
indique au correspondant que lordinateur veut lui transmettre des
donnes..
CTS (Clear To Send ) : Cette ligne est une entre active ltat haut.Elle indique
lordinateur que le correspondant est prt recevoir des donns.

RI( RING Indicator) :Cette ligne est une entre active ltat haut.Elle permet
lordinateur de savoir si un correspondant veut initier une communication avec
lui.

Fonctionnement :
Pour pouvoir dialoguer avec le PC, le microcontrleur utilise son module
USART signifie (Universal Synchronous Asynchronous Reciever Transmitter ).
Cest donc un module qui permet denvoyer et de recevoir des donnes en mode
srie, soit de faon synchrone, soit asynchrone. Le module USART de notre PIC
gre uniquement deux pins, savoir RC6/TX/CK et RC7/RX/DT.
Une liaison srie synchrone ncessite une connexion ddie lhorloge, donc il
reste une seule ligne pour transmettre les donnes. Alors quen mode asynchrone on
na pas besoin dune

ligne dhorloge, il nous restera alors deux lignes pour

communiquer, chacune tant ddie un sens de transfert. Nous pourrons donc


envoyer et recevoir des donnes en mme temps.
Les

liaisons

RS

232

sont

des

liaisons

asynchrones

trs

utilises

en

informatique. Elle ncessite que lmetteur et le rcepteur soit inform de la vitesse


choisie de transfert.
Puisque le rcepteur connat la vitesse du transfert il peut se passer de signal
de synchronisation.
Trois lignes sont ncessaires cette
liaison. TX : transmission de donns.
RX:rcepteur de donn.
GND :masse
Grce cette liaison la carte peut servir dinterface entre un PC et un montage
extrieure afin dadapter les signaux TTL du microcontrleur au standard RS232
Un MAX232 est monte de faucon classique, les lignes RX, TX et la masse sont
disponibles sur un connecteur DB9 mle qui permet ainsi de relier la carte au PC avec
un simple cble srie.

11-2 MAX 232


Le circuit intgr MAX232 qui cble avec ces condensateurs au tantale de 1F ,
permet dadapter les niveaux de tension entre le PC et le tlphone comme
certains PC ne disposent pas dune puissance suffisante sur leur port srie, cest le
cas notamment des portable , il est possible de connecter une alimentation
externe dlivrant une tension de 12V

12 BUS I2C
Le bus I2C (inter integrated circuit ce qui donne IIC et par contraction I2C), a
t propos initialement par Philips mais adopt de nos jours par des trs fabricants.
Cest bus de communication de type srie.

1. Prsentation :
Le bus I2C qui nutilise que deux lignes de signal (et les masses correspondantes
bien sr) permet un certain nombre dappareils dchange des informations sous
forme srie avec un dbit pouvant atteindre 100 Kbits par seconde ou 400 kbits par
seconde pour les versions les plus rcentes. Mme si ces dbits peuvent sembler
relativement faibles, les premires applications du bus I2C sont des applications
audio ou vido pour lesquelles la simplicit de mise en uvre est nettement plus
importante quun dbit lev.
Les points forts du bus I2C sont :
Premirement cest un bus srie bifilaire utilisant une ligne de donnes appele SDA
(Serial Data) et une ligne dhorloge appele SCL (Serial Clock).
Les donnes peuvent tre changes dans les deux sens sans restriction.
Le bus est multi-matre : chaque abonn dispose dune adresse code sur 7 bits, on
peut donc connecter simultanment 128 abonns dadresses diffrentes sur le mme
bus.
Un acquittement est gnr pour chaque octet de donne transfr.
Le bus peut travailler une vitesse maximum de 100 K bits par seconde (ou 400 Kbits
par seconde) tant entendu que son protocole permet de ralentir automatiquement
lquipement le plus rapide pour sadapter la vitesse de llment le plus lent, lors
dun transfert.
Le nombre maximum dabonns nest limit que par la charge capacitive maximale du
bus qui peut tre de 400pF.
Les donnes envoyes par paquets de huit bits indpendants(le bit de poids fort est
envoy le premier) sur la ligne SDA, chaque octet est suivie par un bit
dacquittement .La ligne SCL fonctionne comme une horloge srielle dun registre
dcalage, tant que cette ligne est ltat haut les donnes de la ligne SDA doivent
tre stables.
Certaines combinaisons particulires de niveaux et de fronts des deux lignes
dterminant la condition de dpart ou darrt de la transmission des donnes.
Condition de dpart : Un front descendant sur SDA quand SCL est ltat
haut. Condition darrt : Un front montant sur SDA quand SCL est ltat
haut.
13 Module horloge temps rel :
PCF8583 :
Le PCF8583 fonctionne en vritable horloge calendrier c'est--dire en mode de 24
heures et sur une priode de vingt quatre ans. Il possde une sortie dinterruption
et de la RAM qui possde 232 octets disponibles en plus de ceux de sa propre
fonction.

Figure : Schma de brochage


Caractristiques lectriques :
- consommation faible de courant.
- garantie de la fonction dhorloge et de rtention de mmoire sous 1v (et 2A) ce qui
permet de le secourir facilement par une batterie.
Figure : architecture interne du PCF8583
2. Connexion de PCF8583:

Lhorloge temps rel PCF8583 accs I2C est raccorde la ligne RC3 du Pic pour
lhorloge (SCL) et RC4 pour les donnes (SDA), la liaison aux lignes RC3 et RC4
seffectue en changeant ltat

du SW9. Les rsistances R48 et R49 maintiennent positivement ces signaux au repos.
Le montage contient aussi une pile rechargeable pour alimenter le PCF8583 en
cas o la carte nest pas alimente.
Le bus I2C appartient la catgorie des bus srie par opposition aux bus parallle ou
les donnes sont transmises par bloc, les donnes sont ici envoyes bit par bit par
groupe doctet sur la ligne SDA.La ligne SCL fonctionne comme une horloge srielle
dun registre dcalage. Tant que la ligne SCL est ltat haut les donnes de la
ligne SDA doivent tre stables.
Lorsque la ligne SCL est ltat bas, le circuit qui met les donnes peut modifier ltat.

Figure: condition de validit des donnes sur le bus I2C


Certaines combinaisons particulires de niveaux et de fronts des deux lignes
dterminant la condition de dpart ou darrt de la transmission des donnes.

Condition de dpart : Un front descendant sur SDA quand SCL est ltat haut.
Condition darrt : Un front montant sur SDA quand SCL est ltat haut.

Pic 16F877 :
Le pic 16F877 est un circuit intgre contenu dans un botier nommer DIL 40 , il
prsente 40 broches, 20 de chaque cot. Les broches sont virtuellement numrotes
ere
de 1 40. La 1
broche est plac dans le coin situ gauche de lencoche de
reprage.

Figure : Les pins du 16F877


1. Les PINS de 16F877 :

MCLR
Cette broche sert initialiser le microcontrleur.
Le microcontrleur dispose de plusieurs sources de RESET :
POR.
EXTERNAL RESET
WDT
BOR
POR: (POWER ON RESET) Mise sous tension.
Un front montant sur MCLR dclenche l'initialisation du microcontrleur. Le temps
ncessaire est au minimum de 72ms et au maximum de 72ms+1024*Tosc. Le
microcontrleur dispos en interne dun circuit de dtection de niveau, quand la
tension VDD est comprise entre 1.2V et 1.7V, il dmarre une procdure
dinitialisation.
Cette broche peut tre simplement relie VDD si on na pas besoin de RESET
externe. Par contre si on souhaite implanter un bouton de remise zro, on pourra
cbler un simple rseau RC sur la broche MCLR.

Remarque importante : On peut se passer de circuit RC la seule condition que le


temps de mont de VDD soit suffisamment rapide (au minimum 50mV/ms). Si le
temps de monte est infrieur 50mV/ms, il faut rajouter un rseau RC.
EXTERNAL RESET (Mise ltat bas de MCLR). Remise zro extrieure. Il faut
appliquer un niveau bas sur l'entre RESET pendant au moins 2S pour que
l'Initialisation soit prise en compte.
WDT: Chien de garde.
Si le WDT arrive la fin du temps de garde sans avoir t rafrachi il y aura alors une
initialisation du microcontrleur.
BOR: Baisse de lalimentation.
Si la tension VDD chute en dessous de 4V pendant 100S au moins, le
microcontrleur peut gnrer un RESET.

Oscillateur : OSC1 et OSC2 ou CLKIN et CLOUT.


Ces broches permettent de faire fonctionner loscillateur
interne du PIC. On peut utiliser 3 types doscillateurs :
- Un quartz ou rsonateur cramique
- Un oscillateur externe
- Un rseau RC
Remarque : Les instructions standards durent 1 cycle machine (sauf les instructions
de sauts 2
cycles). Le microcontrleur utilise 4 coups dhorloge pour raliser un cycle machine.
Si la frquence du QUARTZ est de 20MHz (T=50nS), une instruction sera excute
toutes les 200nS, Dans ce cas l, le microcontrleur a une puissance de calcul de
5MIPS (5 Millions dinstructions par secondes ! ! !).
La frquence MAX est de 20MHz pour les microcontrleurs dont les rfrences se
terminent par - 20.Par exemples : 16F876-20 (20MHz max) et 16F876-04 (4MHz
max).
C1
1nF

C2
1nF

U1
X1

13
CRYS T AL14
1
2
3
4
5
6
7

8
9
10

OSC1/CLK INRB 0/INT


OSC2/CLK OUTRB1
MCLR/V pp/T HVRB2
RB3/PGM
RA0/AN0RB4
RA1/AN1RB5
RA2/AN2/V RE F-RB6/PGC
RA3/AN3/V RE F+RB7/PGD RA4/T 0CKI
RA5/AN4/S SRC0/T 1OS O/T 1CKI RC1/T 1OSI/CCP2
RE0/AN5/RDRC2/CCP 1
RE1/AN6/W RRC3/S CK /S CL
RE2/AN7/CSRC4/SDI/S DA RC5/SDO RC6/T X/CK
RC7/RX/DT

33
34
35
36
37
38
39
40

15
16
17
18
23
24
25
26

RD0/PS P0 RD1/PS P1 RD2/PS P2 RD3/PS P3


RD4/PS P4 RD5/PS P5 RD6/PS P6 RD7/PS P7
19
20
21
22
27

28
29
30

PIC16F877

.
Brochage du circuit doscillation PIC16F877
Page
70

Remarque : La consommation du circuit sera d'autant plus faible que la frquence sera
petite, cela peut tre intressant pour des applications de faible consommation
(alimentation autonome).
Pour des applications faible consommation, on peut utiliser les sries LF (Low
Frequency and Low Power).

Alimentation : VDD et VSS.


Ce sont les broches d'alimentation du circuit. Les tensions qui peuvent tre appliques
vont :
- De 4,5V 6V pour la gamme standard F.
- De 2 6V pour la gamme tendue LF.
L'intensit du courant consomm peut aller de 1A
10mA. La consommation du microcontrleur sera
fonction de :
- La tension d'alimentation.
- La frquence interne.
- Le mode de fonctionnement.
De plus ces bornes doivent tre dcouples par deux condensateurs :
- 1F lectrolytique.
- 10nF cramique.

LInterruption : RBO/INT.
Cette broche une double fonction elle peut tre utilise comme une broche
standard RBO ou comme une entre dinterruption INT.
Si cette broche est utilise comme une entre d'interruption externe, elle doit tre
maintenue un niveau haut par l'intermdiaire de rsistances de 10 k pour ne
pas dclencher dinterruptions imprvues, cela permet aussi de relier plusieurs
sources d'interruptions sur une mme ligne (OU CABLE).
2. Architecture interne du16F877 :
Comme pour tous les circuits intgre, chacun de ses broches une ou plusieurs
fonctions qui sont rsumes par un sigle mnmotechnique.
Ce microcontrleur prsente une architecture Harvard, les donnes sont places dans
une mmoire de type RAM de 368 bytes. La mmoire de programme est constitue
de mot de 14 bytes, est type FLASH (non volatile).
Ces ressources sont donc prcieuses, en comparaison de celles dautres composantes.
Le 16F877 possde encore 5 ports (A E) et 3 temporisateurs (timers), ce
diagramme bloc prsente les composantes du 16F877 :

Figure 2: Architecture interne du PIC 16F877


*Les 5 ports sont dentres sorties input/output, ils sont bidirectionnels :
-Le port A (6 bits) I/O pure et/ou convertisseur analogique et/ou
TIMER 0. La broche RA4 5Entre du timer 0 T0CKI) est de type
DRAIN OUVERT.
-Le port B (8 bits) I/O pure et/ou programmation in situ ICSP/ICD, RB0 est entre
dinterruption externe.

-Le port C (8 bits) I/O pure et/ou SPI/I2C et/ou USART.

-Le port D (8 bits) I/O pure et/ou port parallle 8 bits associ au port E.
-Le port E (3 bits) I/O pure et/ou pilotage du port E RE0/R, RE1/WR et RE/CS.
Remarque : Si le PIC est utilis en mode ICSP/ICD il faut laisser libre les broches
RB3/PGM, RB6/PGC ainsi que RB7/PGD) et les configurer en entre.
Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART.
Le PORT D (8 bits) I/O pure et/ou port parallle 8 bits associ au PORT E.
Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.

Configuration des PORTx, les registres PORTx et TRISx.


Tous les ports sont pilots par deux registres :
- Le registre de PORTx, si le PORT x ou certaines lignes de PORT X sont configures
en sortie, ce registre dtermine ltat logique des sorties.
- Le registre TRISx, cest le registre de direction. Il dtermine si le PORTx ou certaines
lignes de port sont en entre ou en sortie. Lcriture dune 1 logique correspond
une entre (1 comme Input) et lcriture dune 0 logique correspond une sortie (0
comme Output).
Au RESET toutes les lignes de ports sont configures en entres.
Remarque : Les registres TRISx appartiennent la BANQUE 1 des SFR.
Lors de linitialisation du microcontrleur il ne faut pas oublier de changer de page
mmoire pour les configurer.
Le tableau ci dessous reprsente les caractristiques de PIC :

Tableau de caractristiques
. Les mmoires du PIC 16F877 :
Les mmoires sont de trois types diffrents :
3.1 La mmoire FLASH :
Cest une mmoire programme de taille 8ko. Chaque case mmoire unitaire est de
taille 13 bits. Cette mmoire est de type mmoires stable, c'est--dire quon peut
rcrire dessus volont, car le 16F877 est caractris par la possibilit dcrire des
donnes. La zone mmoire est caractrise

par une adresse de 13 bits, alors ceci nous impose donc pour ladressage les
registres EEAR et EEADRH. De mme, nous aurons pour les donnes, les registres
EEDATA et EEDATH.
3.2 La mmoire RAM :
Cette mmoire de taille 368 octets est une mmoire daccs rapide et elle est
volatile (les donnes seront perdus lorsque elle nest plus sous tentions). Elle
contient tous les registres de configuration du PIC ainsi que les diffrents registres
de donnes. Elle contient galement les variables utilises par le programme. La
RAM est la mmoire la plus utilise. Toutes les donnes qui y sont stockes sont
perdues lors dune coupure de courant.
La RAM est subdivise de plus en deux parties dans chacune on trouve des cases
mmoire spciales appele REGISTRES SPECIAUX et des cases mmoire libre
dont on peut se servir provoque un fonctionnement spcial du PIC ou la mise en
service dune fonction particulire.
3.3 LEPROM Interne :
Le pic 16F877contient galement la mmoire lectriquement effaable. Ce type de
mmoire est daccs plus lent. Pour grer cette EEPROM on a besoin de quatre
registres, savoir EEDR, EEDATA, EECON1 et EECON2.
Le registre EEADR est utilis pour placer ladresse relative en EEPROM, tandis que
le EEDATA contient la donn lire ou crire.
Ladresse relative de laccs EEPROM est donc comprise entre 0000 et 00FF ce qui
nous permet dutiliser un registre de huit bit pour dfinir cette adresse.
4. Les Timers :
Il possde 3 timers qui sont :
-Le Timer0 (8bits) : il peut tre incrment par des impulsions extrieures via la
broche (TOCKI/RA4) ou par lhorloge interne (Fosc/4).
-Le Timer1 (16 bits) : il peut tre incrment soit par lhorloge interne par des
impulsions sur la broche T1CKI/RC0 ou par un oscillateur (RC ou quartz) connect
sur les broches T1OSO/RC0 et T1OSI/RC1.
- Le Timer2 (8bits) : il est incrment par lhorloge interne, celle peut tre pr
divise. Tous ces timers peuvent dclencher une interruption interne, sils
ont t autoriss.
5. Lunit centrale :

Organisation mmoire
Comme les PICs utilisent un bus pour les instructions et un bus pour les
donnes, il faut considrer deux plans mmoire lun pour les instructions et lautre
pour les donnes ainsi que les registres internes.

Figure 3 : Plan Mmoire pour les instructions


(Code programme)
Le plan mmoire est linaire les adresses vont de 0000h 1FFFh (8k mots de 14
bits), par page de 2K mots. On peut remarquer, le vecteur de reset est fig en
0000h.
Les PICs nont quun seul vecteur dinterruption en 0004h. Lors dune
interruption, le sous programme associ devra dterminer quel priphrique a
demand une interruption.
La pile utilise par les sous programmes nest pas implante en mmoire de donne
comme avec les microcontrleurs classiques, mais dans la mmoire programme.
Elles sont utilises lors dappels de sous programmes, on ne peut pas imbriquer
plus de 8 sous programmes (Ce qui est dj beaucoup).
6. Les interruptions :
6.1 Prsentation :
Le microcontrleur dispose de plusieurs sources d'interruptions.
Une interruption externe, action sur la broche INT/RB0.
Dbordement du TIMER0.
Changement dtat logique sur une des broches du PORTB (RB4 RB7).
Une interruption dun des priphriques (PEIE).
- Fin de programmation dune case mmoire de lEEPROM.
- Changement dtat sur le PORTD (PSPIE).
- Fin de conversion analogique numrique (ADIE).
- Rception dune information sur la liaison srie (RCIE).

- Fin dmission dune information sur la liaison srie (TXIE).

- Interruption SPI ou I2C du module MSSP (SSPIE).


- Interruption du registre de capture et/ou de comparaison 1 (CCPI1E).
- Interruption du registre de capture et/ou de comparaison 2 (CCPI2E).
- Dbordement du TIMER1 (TMR1E).
- Dbordement du TIMER2 (TMR2E).
- Collision de BUS (BCLIE)
6.2 Fonctionnement :
Lors dun vnement dans un ou plusieurs des circuits priphriques (ADC,
EEPROM, USART- SCI, MSSP-I2C-SPI, TIMER1, TIMER2) comme par exemple : la
fin de conversion, la fin de programmation dun octet dans lEEPROM, la rception
dune information, la dtection dun front, etc. et si le bit de linterruption
concerne a t autorise (EEIE, PSPIE, ADIE, RCIE, TXIE, SSPIE, CCP1IE,
TMR2IE, TMR1IE, CCP2IE ou BCLIE : Registres PIE1 et PIE2) alors une
interruption priphrique est dclenche. Pour que celle-ci soit prise en compte il
faut que le bit dautorisation des interruptions priphriques soit positionn 1
(PEIE) ainsi que le bit GIE dautorisation globale des interruptions du registre
INTCON.
Pour quune interruption du type TIMER0 ou INT/RB0 ou PORTB soit prise en
compte il suffit que le bit local dautorisation dinterruption soit positionn 1 (T0IE
ou INTE ou RBIE) ainsi que le bit GIE dautorisation globale des interruptions du
registre INTCON.
Dans ces conditions le programme en cours dexcution est interrompu et le
microcontrleur excute le programme dinterruption partir de ladresse 0x0004. Au
dbut de celui-ci il faut que le logiciel vrifie quel priphrique a dclench
linterruption.
Le programme se droule normalement. Survient un vnement spcifique. Le
programme principal est interrompu (donc, subit une INTERRUPTION), et va traiter
lvnement, avant de reprendre le programme principal lendroit o il avait t
interrompu .Linterruption est donc une RUPTURE DE SEQUENCE ASYNCHRONE,
cest dire non synchronise avec le droulement normal du programme. Vous
voyez ici lopposition avec les ruptures de squences synchrones, provoques par le
programme lui-mme (goto, call, btfss).
Mcanisme gnrale dune interruption :
Une routine dinterruption est un sous-programme particulier, dclench par
lapparition dun vnement spcifique. Cela a lair un peu ardu, mais vous allez voir
que cest trs simple.
Voici donc comment cela fonctionne :
Le programme se droule normalement

Lvnement survient

Le programme achve linstruction en cours de traitement


Le programme saute ladresse de traitement de linterruption
Le programme traite linterruption

Le programme saute
programme principal.

linstruction

qui

suit

la

dernire

excute

dans

le

Il va bien sr de soi que nimporte quel vnement ne peut pas dclencher une
interruption. Il fault que 2 conditions principales soient remplies :
Lvnement en question doit figurer dans la liste des vnements susceptibles de
provoquer une interruption pour le processeur sur lequel on travaille
Lutilisateur doit avoir autoris linterruption, cest dire doit avoir signal que
lvnement en question devait gnrer une interruption.
Le programme principal ne sait pas quand il est interrompu, il est donc crucial de lui
remettre ses registres dans ltat o ils taient avant linterruption.
En effet, supposons que linstruction xxx ait positionn un flag (par exemple, le bit
dindicateur Z). Si par malheur, la routine dinterruption a modifi ce bit, le
programme ne pourra pas se poursuivre normalement.
Nous voyons galement que linstruction xxx termine son excution avant de se
brancher sur la routine dinterruption. Une instruction commence nest donc jamais
interrompue.
Mcanisme dinterruption sur les PICs :
les PICs rpondent au fonctionnement gnral ci-dessus, mais elles ont
galement leurs particularits. Voyons maintenant le principe des interruptions sur
les PICs
Tout dabord, ladresse de dbut de toute interruption est fixe. Il sagit toujours de
ladresse 0x04. Toute interruption provoquera le saut du programme vers cette
adresse.
Toutes les sources dinterruption arrivant cette adresse, si le programmeur utilise
plusieurs sources dinterruptions, il lui faudra dterminer lui-mme laquelle il est
en train de traiter.
Les PICs en se connectant cette adresse, ne sauvent rien automatiquement, hormis
le contenu du PC, qui servira connatre ladresse du retour de linterruption. Cest
donc lutilisateur de se charger des sauvegardes.
Le contenu du PC est sauv sur la pile interne (8 niveaux). Donc, si vous utilisez
des interruptions, vous ne disposez plus que de 7 niveaux dimbrication pour vos
sous-programmes. Moins si vous utilisez des sous-programmes dans vos interruption.
Le temps de raction dune interruption est calcul de la manire suivante : le cycle
courant de l'instruction est termin, le flag d'interruption est lu au dbut du cycle
suivant. Celui-ci est achev, puis le processeur s'arrte un cycle pour charger
l'adresse 0x04 dans PC. Le processeur se connecte alors l'adresse 0x04 o il lui
faudra un cycle supplmentaire pour charger l'instruction excuter. Le temps mort
total sera donc compris entre 3 et 4 cycles.

Une interruption ne peut pas tre interrompue par une autre interruption. Les
interruptions sont donc invalides automatiquement lors du saut ladresse 0x04
par leffacement du bit GIE (que nous allons voir).

Les interruptions sont remises en service automatiquement lors du retour de


linterruption. Linstruction RETFIE agit donc exactement comme linstruction RETURN,
mais elle repositionne en mme temps le bit GIE.
. Le convertisseur
Le CAN est un priphrique intgr destin mesurer une tension et la convertir
en nombre binaire qui pourra tre utilis par un programme.
Le16F877 travaille avec un convertisseur analogique/numrique qui permet un
chantillonnage sur 10 bits. Le signal numrique peut donc prendre 1024 valeurs
possibles. On sait que pour pouvoir numriser une grandeur, nous devons connatre la
valeur minimale quelle peut prendre, ainsi que sa valeur maximale, Les pics
considrent par dfaut que la valeur minimale correspond leur Vss dalimentation,
tandis que la valeur maximale correspond la tension positive dalimentation Vdd. le
principe de la conversion suit la squence est la suivante :
- Le pic connecte le pin sur laquelle se trouve la tension mesurer un condensateur
interne, qui va se charger via une rsistance interne jusque la tension applique.
Le pin est dconnect du condensateur, et ce dernier est connect sur le
convertisseur analogique/numrique interne.
Le temps ncessaire la conversion est gal au temps ncessaire la conversion dun
bit multipli par le nombre de bits dsirs pour le rsultat. Concernant notre pic, il
faut savoir quil ncessite, pour la conversion dun bit, un temps nomm Tad.
Ce temps est driv par division dhorloge principale. Le diviseur peut prendre une valeur
de 2, 8 ou
32. Le temps de conversion Tad ne peut dtendre, pour des raisons lectroniques, en
dessous de
1.6 us pour les versions classiques de 16F87x, et en dessous de 6 us pour les
versions LC. Donc en fonction des frquences utilises pour le quartz du pic, on choisit
le diviseur le plus appropri.
Voici un tableau qui reprend les valeurs de diviseur utiliser pour quelques
frquences courantes du quartz et pour les PICs de type classique :

Diviseu
r
2
8
32
Osc
RC

20Mh
z
100n
s
400n
s
1,6
s
2-6s

5Mhz

4Mhz

2Mhz

400n
s
1,6s

500n
s
2s

1s

6,4s

8s

16s

2-6s

2-6s

2-6s

4s

1,25Mh
z
1,6
s
6,4
s
25,6
s
2-6s

333,3Kh
z
6s
24s
96s
2-6s

Les valeurs 400ns; 1,6s; 2s; 4s; 6,4; 24s correspondent au meilleur diviseur en
fonction de la frquence choisie, en ce qui nous concerne puisquon utilise une

frquence de 4MHZ, on utilisera la valeur de 2s dans notre programmation. Il faut


prsent prciser que le PIC ncessite un temps Tad avant le dmarrage effectif de
la conversion, et un temps supplmentaire Tad la fin de la conversion.

Rsumons donc le temps ncessaire pour effectuer lensemble des oprations :


- On charge le condensateur interne (ncessite le temps Tacq).
- On effectue la conversion (ncessite le temps 12 * Tad).
- On doit attendre 2 * Tad avant de pouvoir recommencer une autre conversion.

Figure : cycle de conversion


Le module de conversion utilise 4 registres disposs comme suit :
*Registre de Rsultat High (ADRESH)
*Registre de Rsultat Low (ADRESL)
*Registre0 de Contrle (ADCON0)
*Registre1 de Contrle (ADCON1)
Regardons cela de prs dans la figure ci-dessous :
Configuration interne du module de convertisseur analogique/numrique :

Figure : module du convertisseur

On voit trs bien sur ce schma que les pins AN2 et AN3 servent selon la position
du slecteur dentre analogique ou de tension de rfrence. Le slecteur de canal
permet de slectionner lequel des 8 canaux va tre appliqu au convertisseur
analogique/digital.
On voit que la slection de la source des tensions de rfrence dpend de bits
du registre ADCON1, tandis que le canal slectionn pour tre numris dpend
dADCON0. Cest le registre ADCON1 qui dtermine si ce port sera utilis comme
port I/O ou comme port analogique. Nous en aurons besoin dans la programmation.

Les registres ADRESL et ADRESH :


Le convertisseur donne un rsultat sur 10 bits, et donc que ce rsultat devra donc
obligatoirement tre sauvegard dans 2 registres. Ces registres sont tout
simplement les registres ADRESL et ADRESH. Comme 2 registres contiennent 16
bits, et que nous nen utilisons que 10, Microchip nous a laiss le choix sur la faon
dont est sauvegard le rsultat, nous pouvons soit justifier le rsultat gauche, soit
droite
La justification droite complte la partie gauche du rsultat par des 0 . Le rsultat
sera donc de la forme :
ADRESH
0

ADRESL
0

0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

La justification gauche procde bien videmment de la mthode inverse :


ADRESH

ADRESL

B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

La justification droite sera principalement utilise lorsque nous avons besoin de


lintgralit des
10 bits de rsultat, tandis que la justification gauche est trs pratique lorsque 8
bits vous suffisent. Dans ce cas, les 2 bits de poids faibles se trouvent isols dans
ADRESL, il suffit donc de ne pas en tenir compte. Cette approche est destine nous
pargner des dcalages de rsultats.
Le choix de la mthode seffectue laide du bit 7 dADCON1.
Le registre ADCON1 :
Ce registre permet de dterminer le rle de chacune des pins AN0 AN7. Il
permet donc de choisir si un pin sera utilis comme entre analogique, comme
entre/sortie standard, ou comme tension de rfrence. Il permet galement de
dcider de la justification du rsultat.
Pour pouvoir utiliser un pin en mode analogique, il faudra que ce pin soit configur
galement en entre par TRISA. Le registre ADCON1 dispose, comme tout registre
accessible de notre PIC, de 8 bits, dont seulement 5 sont utiliss :
1.2 Tableau : le registre ADCON1
Page
80

B7
B6

ADFM
INUTILISE

A/D result format select


lu comme 0

B5

INUTILISE

lu comme 0

B4

INUTILISE

lu comme 0

B3

PCFG3Port Configuration control bit 3

B2

PCFG2Port Configuration control bit 2

B1

PCFG1Port Configuration control bit 1

B0

PCFG1Port Configuration control bit 0

Le bit ADFM permet de dterminer si le rsultat de la conversion sera justifi


droite (1) ou gauche (0). Nous trouvons dans ce registre les 4 bits de configuration
des pins lis au convertisseur analogique/numrique. Ces bits nous permettent
donc de dterminer le rle de chaque pin.
Comme nous avons 16 combinaisons possibles, nous aurons autant de possibilits de
configuration
Le registre ADCON0 :

Ce registre est le dernier utilis par le convertisseur analogique/numrique. Il


contient les bits que nous allons manipuler lors de notre conversion. Sur les 8 bits
de notre registre, 7 seront utiliss.

Tableau : le registre ADCON0 :


B7

B6

ADCS
1

A/D conversion Clock Select


bit 1

ADCS A/D conversion Clock Select


0
bit 0

B5

CHS2

B4

CHS
1
CHS
0
GO/DON
E

Analog Channel Select


bit2
Analog Channel Select
bit1
Analog Channel Select
bit0
A/D conversion status
bit

B1

Inutilis

lu comme 0

B0

ADO
N

B3
B2

A/D ON
bit

loscillateur : Lhorloge est un systme qui peut tre ralise soit avec un QUARTZ(a),
soit avec une horloge extrieur(b), soit avec un circuit RC(c), dans ce dernier la
stabilit du montage est limite.
La frquence maximale dutilisation va dpendre de Microcontrleur utilis. Le suffixe
indiqu sur le

botier donne la nature de lhorloge utiliser et sa frquence maximale