Programmation des Microcontroleurs (PIC)
EL MORNAN
SOMMAIRE
1)Architecture interne dun systme microprocesseur
2)Le microcontrleur16F84
3)Jeux d'instructions des PIC
4) Bits (ou "fusibles") de configuration
5)Les interruptions
6)Le mode SLEEP
7)Le timer WATCHDOG (chien de garde)
8)Accs la mmoire EEPORM
9) Remarques et astuces de programmation en assembleur
10) Les tapes ncessaires pour programmer un pic :
11) Exemples en assembleur avec 16F84
12) Simulation dun PIC sous Proteus
13) Circuits dinterfaces avec le microcontrleur
14) Pic 16F877 :
Page 1
Programmation des Microcontroleurs (PIC)
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 1-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
Programmation des Microcontroleurs (PIC)
1.2
EL MORNAN
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.
2. Les microcontrleurs :
2.1 Gnralits :
Un microcontrleur se prsente comme tant une unit de traitement de linformation de type
microprocesseur contenant tous les composants dun systme informatique, savoir, microprocesseur,
des mmoires et des priphriques (ports, timers, convertisseurs). Chaque fabricant a sa ou ses familles
de microcontrleurs.
Une famille se caractrise par un noyau commun (le microprocesseur, le jeu dinstruction).
Ainsi les fabricants peuvent prsenter un grand nombre de pins qui sadaptent plus au moins certaines
tches. Mais un programmeur connaissant une famille na pas besoin dapprendre utiliser chaque
membre, il lui faut connatre juste ces diffrences par rapport au pre de la famille. Ces diffrences sont
souvent, la taille des mmoires, la prsence ou labsence des priphriques et leurs nombres
Page 3
Programmation des Microcontroleurs (PIC)
EL MORNAN
2.2 Les avantages du microcontrleur :
Lutilisation des microcontrleurs pour les circuits programmables plusieurs points forts et bien
rels. Il suffit pour sen persuader, dexaminer la spectaculaire volution de loffre des fabricants de
circuits intgrs en ce domaine depuis quelques annes.
Tout dabord, un microcontrleur intgre dans un seul et mme botier ce qui, avant ncessitait une
dizaine dlments spars. Il rsulte donc une diminution vidente de lencombrement de matriel et
de circuit imprim.
Cette intgration a aussi comme consquence immdiate de simplifier le trac du circuit imprim
puisquil nest plus ncessaire de vhiculer des bus dadresses et de donne dun composant un
autre.
Le microcontrleur contribue rduire les cots plusieurs niveaux :
- Moins cher que les autres composants quil remplace.
- Diminuer les cots de main duvre.
Ralisation des applications non ralisables avec dautres composants
2.3 Contenu dun microcontrleur :
Un circuit microcontrleur doit contenir dans un seul botier tous Les lments de bases, nous y
retrouvons bien videmment lunit centrale qui est plus simplifie par rapport celle du
microprocesseur. En contre partie, des instructions de manipulation de bits, trs utiles pour faire des
entres/sorties lui ont t ajoutes. Dans certains circuits, cette unit centrale se voit dote dun trs grand
nombre de registres internes qui servent alors de mmoire vive.
2.4 Organisation de la mmoire
Architecture Von Neumann : une mmoire unique et pour le programme et pour les donnes.
Architecture Harvard : le programme et les donnes sont stocks dans des mmoires physiquement
spars
2.5 Qu'est-ce qu'un PIC ?
Un PIC est un microcontrleur de chez Microchip. Ses caractristiques principales sont :
Sparation des mmoires de programme et de donnes (architecture Harvard) : On obtient ainsi une
meilleure bande passante et des instructions et des donnes pas forcment codes sur le mme nombre de
bits.
Communication avec l'extrieur seulement par des ports : il ne possde pas de bus d'adresses, de bus de
Page 4
Programmation des Microcontroleurs (PIC)
EL MORNAN
donnes et de bus de contrle comme la plupart des microprocesseurs.
Utilisation d'un jeu d'instructions rduit, d'o le nom de son architecture : RISC (Reduced Instructions Set
Construction). Les instructions sont ainsi codes sur un nombre rduit de bits, ce qui acclre l'excution
(1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles). En revanche, leur nombre
limit oblige se restreindre des instructions basiques, contrairement aux systmes d'architecture CISC
(Complex Instructions Set Construction) qui proposent plus d'instructions donc codes sur plus de bits
mais ralisant des traitements plus complexes.
Il existe trois familles de PIC :
- Base-Line : Les instructions sont codes sur 12 bits
- Mid-Line : Les instructions sont codes sur 14 bits
- High-End : Les instructions sont codes sur 16 bits
Un PIC est identifi par un numro de la forme suivant : xx(L)XXyy zz
- xx : Famille du composant (12, 14, 16, 17, 18)
- L : Tolrance plus importante de la plage de tension
- XX : Type de mmoire de programme
C -EPROM ou EEPROM
CR - PROM
F -FLASH
- yy : Identification
- zz : Vitesse maximum du quartz
Nous utiliserons un PIC 16F84 10, soit :
- 16 : Mid-Line
- F : FLASH
- 84 : Type
- 10 : Quartz 10MHz au maximum .Il s'agit d'un microcontrleur 8 bits 18 pattes.
Principales caractristiques :
- 35 instructions
- Instructions codes sur 14 bits
- Donnes sur 8 bits
- 1 cycle machine par instruction, sauf pour les sauts (2 cycles machine)
- Vitesse maximum 10 MHz soit une instruction en 400 ns (1 cycle machine = 4 cycles d'horloge)
- 4 sources d'interruption
- 1000 cycles d'effacement/criture pour la mmoire flash
Brochage et fonction des pattes
La Figure montre le brochage du circuit. Les fonctions des pattes sont les suivantes :- VSS, VDD :
- OSC1,2 :
- RA0-4 :
- RB0-7 :
- T0CKL :
- INT :
- MCLR :
Figure: Brochage du circuit
Page 5
Programmation des Microcontroleurs (PIC)
EL MORNAN
2.6 Architecture gnrale
Figure : Architecture gnrale du PIC 16F8X.
La Figure prsente larchitecture gnrale du circuit. Il est constitu des lments suivants :
- un systme dinitialisation la mise sous tension (power-up timer, )
- un systme de gnration dhorloge partir du quartz externe (timing gnration)
- une unit arithmtique et logique (ALU)
- une mmoire flash de programme de 1k mots de 14 bits
- un compteur de programme (program counter) et une pile (stack)
- un bus spcifique pour le programme (program bus)
- un registre contenant le code de linstruction excuter
- un bus spcifique pour les donnes (data bus)
- une mmoire RAM contenant
- les SFR 68 octets de donnes- une mmoire EEPROM de 64 octets de donnes
- 2 ports dentres/sorties
- un compteur (timer)
- un chien de garde (watchdog)
Le circuit de mise en uvre minimale :
Le circuit 16F84 est lun des plus simples de la famille, mais il permet nanmoins de travailler avec 12
broches dentre/sortie !
La mise en uvre est trs simple. Il faut au minimum :
- Un circuit dhorloge ( un quartz, deux condensateurs ou bien seulement un condensateur et une
rsistance )
- Une alimentation +5V !
Page 6
Programmation des Microcontroleurs (PIC)
EL MORNAN
2.7 Circuit dhorloge :
2.7 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.
2.8 Mmoire de programme
Cest elle qui contient le programme excuter. Ce dernier est tlcharg par liaison srie
La Figure montre lorganisation 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.
Ladresse 0000h contient le vecteur du reset, ladresse 0004h lunique vecteur dinterruption du PIC.
La pile contient 8 valeurs. Comme le compteur de programme, elle na pas dadresse dans la plage de
mmoire.
Ce sont des zones rserves par le systme.
Page 7
Programmation des Microcontroleurs (PIC)
EL MORNAN
Figure : Organisation de la Mmoire de donnes.
Page 8
Programmation des Microcontroleurs (PIC)
EL MORNAN
2.9 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 indiquants sur quelle page (bank), le microprocesseur travail en adressage direct (seul 7
bits dadresses sont ncessaires).
RP1 RP0
bank 0 (adresse 00h-7Fh) ou page 0
bank 1 (adresse 80h-FFh) ou page 1
bank 2 (adresse 100h-17Fh) ou page 2
bank 3 (adresse 180h-1FFh) ou page 3
Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage indirect (8 bits
dadresses sont ncessaires).
0 : bank 0, 1 (adresse 00h-FFh) ou page 0 et 1
1 : bank 2,3 (adresse 100h-1FFh) ou page 2 et 3
E) Ports
Port A :
RA0 RA4 sont des entres du port parallle A. Ces lignes sont bidirectionnelles (sauf pour RA4 en entre
seulement). De plus elles sont partages avec certains priphriques du pic (voir doc constructeur en fonction des
besoins).
Port B :
PB0 PB7 sont des sorties du port parallle B. Ces lignes sont bidirectionnelles. De plus elles sont partages avec
certains priphriques du pic (voir doc constructeurs en fonction des besoins).
On remarque que l'cran se dcoupe en 4 champs :
Page 9
Programmation des Microcontroleurs (PIC)
EL MORNAN
Champ tiquette
Champ oprateur (code mnmonique) ou directive d'assemblage
Champ oprande
Champ commentaire
Pour passer d'un champ un autre, il suffit de mettre un espace avec la touche espace ou
TAB. Plusieurs espaces accols correspondent un seul et mme espace. Attention on ne peut sauter des champs,
c'est dire passer du champ tiquette au champ oprande. Seul le champ commentaire est un peu particulier. Si un
champ quelconque est rempli, on peut aller directement au champ commentaire. Il y a une exception, lorsqu'aucun
champ n'est rempli, l'diteur considre que toute la ligne est un champ commentaire, d'o la condition de mettre ;
en dbut de ligne.
On n'utilisera pas d'tiquette comportant plus de 8 caractres du code ASCII standard.
2.10 Directives d'assemblage :
END
Fin du fichier contenant le programme.
EQU
Permet de donner des quivalences (pour des valeurs).
Ex: FSR
EQU
H04.
Et dans le programme cela donnera :
MOVF FSR
; Ecriture de W dans FSR
#DEFINE
Permet de donner des quivalences (pour des chanes de caractres).
Ex: #DEFINE MONBIT
PORTA,1.
Et dans le programme cela donnera :
BCF MONBIT ; Met le bit 1 du port A 0 (quivalent BCF PORTA,1)
Page 10
Programmation des Microcontroleurs (PIC)
EL MORNAN
ORG
Dtermine o le compilateur doit mettre les codes qui suivent cette commande.
Ex: ORG
0x00.
_CONFIG Dtermine les fusibles qui fixeront le fonctionnement du PIC.
Ex: _CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_ON.
_CP_OFF :
_WDT_ON :
_PWRTE_ON :
_HS_ON :
Aucune protection en lecture du pic (choix par dfaut).
WatchDog en service par dfaut (le mettre OFF sur nos Kits).
Dlai de dmarrage du pic la mise sous tension (OFF par dfaut).
Oscillateur quartz grande vitesse (_XT_OSC sur nos kits : quartz lent)
(_RS_OSC par dfaut).
_BODEN_ON :
Reset du pic si chute de tension (choix par dfaut).
_LVP_ON :
Utilisation de RB3 comme broche de programmation sous 5V(choix par
dfaut).
_CPD_OFF :
Non protection en criture de la zone EEPROM (choix par dfaut).
_DATA_CP_OFF : Non protection en criture de la zone RAM (choix par dfaut).
_WRT_ON :
Non protection de la mmoire FLASH (li _CP_) (choix par dfaut).
_DEBUG_OFF :
Non utilisation dun dbuggeur (avec RB6 et RB7) (choix par dfaut).
#INCLUDE Dtermine pour le compilateur toutes les quivalences lis la structure du pic
(pour lassembleur). Aussi utilis en programmation en langage C. Cela permet
alors dinclure des fonctions ou procdures en C dj ralises.
Ex: #INCLUDE <pic16F648A>.
CBLOCK
Dtermine un bloc mmoire pour rserver des octets pour diffrentes variables.
ENDC
Fin de la dclaration pour le bloc mmoire.
Ex : CBLOCK
0x20 ; Dclaration dun bloc mmoire ladresse 0x20
TEMP
:
1
; Rservation dun octet ladresse 0x20
TABLE
:
8
; Rservation de 8 octets partir de ladresse 0x21
ENDC ;
Fin de la
dclaration
du bloc
Page 11
Programmation des Microcontroleurs (PIC)
EL MORNAN
2.11 Registres d'usage gnral
Le PIC 16F84A possde 68 registres d'usage gnral situs dans la mmoire des donnes (Data RAM).
Cela correspond donc 68 octets (68 x 8 bits) de mmoire SRAM, que vous pouvez utiliser comme
variables pour votre programme.
Les registres d'usage gnral sont indiffremment accessibles en banque 0 ou en banque 1.
Banque 0 (adresses 0x0C 0x4F)
Banque 1 (adresses 0x8C 0xCF)
Notez bien que le registre situ l'adresse 0x0C (banque 0) est aussi le registre de l'adresse 0x8C (banque
1)
Les outils de programmation (MPLAB ...) permettent d'attribuer un nom un registre.
Il est plus agrable de manipuler :
movwf compteur1
que :
movwf 0x0C
2.12 Registres spciaux
Le PIC 16F84A a 15 registres spciaux situs dans la mmoire des donnes (Data RAM).
La mmoire des donnes est divise en 2 banques :
Banque 0 (adresses 0x00 0x7F)
Banque 1 (adresses 0x80 0xFF)
-> Les registres spciaux :
TIMR0
PORTA
PORTB
EEDATA
EEADR
sont situs en banque 0.
N.B. Pour passer en banque 0, il faut au pralable excuter l'instruction :
bcf STATUS , RP0
-> Les registres spciaux :
Page 12
Programmation des Microcontroleurs (PIC)
EL MORNAN
OPTION_REG
TRISA
TRISB
EECON1
EECON2
sont situs en banque 1.
N.B. Pour passer en banque 1, il faut au pralable excuter l'instruction :
bsf STATUS , RP0
-> Les autres registres spciaux :
STATUS
INTCON
FSR , INDF
PCL
PCLATH
sont indiffremment accessibles en banque 0 ou en banque 1 (donc peu importe la valeur du bit RP0 du
registre STATUS).
3. Jeux d'instructions des PIC
Les PIC 16F84A, 16F876A et 16F877 ont le mme jeu d'instructions, constitu de seulement 35
instructions (architecture RISC : Reduced Instruction-Set Computer).
Une instruction est code par un mot de 14 bits.
La mmoire programme (de type Flash) a une taille de :
1792 octets (16F84A)
3584 octets (16F628A)
7168 octets (16F88)
ce qui permet de stocker un programme de :
1024 instructions (16F84A)
2048 instructions (16F628A)
4096 instructions (16F88)
Une instruction ncessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement (GOTO,
CALL ...).
Avec une horloge quartz de 20 MHz, un cycle correspond 4/(20.106) = 200 nanosecondes.
Le microcontrleur peut donc excuter jusqu' 5 millions d'instructions par seconde !
Jeu d'instructions
Page 13
Programmation des Microcontroleurs (PIC)
EL MORNAN
W : rgistre de travail (accumulateur), taille 8 bits
k : valeur littrale, taille 8 bits
Mnmonique ,
oprande
bit du
registre nombre de
cycles
STATUS
affect
Description
k (8 bits) est charg dans (W)
MOVLW k
C, DC , Z
C, DC , Z
Additionne k (8 bits) et (W) et place le rsultat
ADDLW k
dans (W)
Soustrait W de k (8 bits) et place le rsultat
SUBLW k
dans (W)
k - (W) -> (W)
Ralise un ET logique entre k (8 bits) et (W),
ANDLW k
et place le rsultat dans (W)
Ralise un OU logique (inclusif) entre k (8 bits)
IORLW k
et (W), et place le rsultat dans (W)
Ralise un OU exclusif entre k (8 bits) et (W),
XORLW k
et place le rsultat dans (W)
L : label (tiquette)
Mnmonique ,
oprande
GOTO L
bit du registrenombre de
STATUS affect
cycles
Description
Branchement l'adresse L
Appelle un sous-programme (subroutine)
CALL L
situ l'adresse L
RETURN
Retour de sous-programme
Retour de sous-programme, avec chargement
RETLW k
de la valeur littrale k (8 bits) dans (W)
Page 14
Programmation des Microcontroleurs (PIC)
RETFIE
EL MORNAN
Retour de sous-programme d'interruption
Efface le Watchdog
CLRWDT
SLEEP Place le microcontrleur en mode sommeil
/TO, /PD
/TO, /PD
f : registre (spcial ou d'usage gnral)
b : position du bit (0 7)
Mnmonique ,
oprande
Description
bit du registre
STATUSaffect
nombre de
cycles
BCF f , b
Mise 0 du b me bit du registre f
BSF f , b
Mise 1 du b me bit du registre f
1 ou 2
1 ou 2
Si le b me bit du registre f est gal 0,
alors l'instruction suivante est ignore,
BTFSC f , b
et une instruction NOP est excute
la place (soit 2 cycles)
Si le b me bit du registre f est gal 1
, alors l'instruction suivante est ignore,
BTFSS f , b
et une instruction NOP est excute
la place (soit 2 cycles)
f : registre (spcial ou d'usage gnral)
d : registre de destination (on peut choisir entre le registre de travail W et le registre f ).
Mnmonique ,
oprande
bit du registre nombre de
Description
STATUS affect
cycles
MOVWF f
(W) est charg dans (f)
MOVF f , d
(f) (8 bits) est charg dans (destination)
C, DC , Z
ADDWF f , d
Additionne le contenu du registre f (8 bits)
et (W), et place le rsultat dans (destination)
Page 15
Programmation des Microcontroleurs (PIC)
EL MORNAN
Soustrait (W) de (f) (8 bits) et place le
SUBWF f , d
Rsultat dans (destination).
C, DC , Z
1 ou 2
1 ou 2
(f) - (W) ->(destination)
Ralise un ET logique entre (f) (8 bits)
ANDWF f , d
et (W), et place le rsultat dans (destination)
Ralise un OU logique (inclusif) entre (f)
IORWF f , d
(8 bits)et (W), et place le rsultat dans
(destination)
Ralise un OU exclusif entre (f) (8 bits) et (W),
XORWF f , d
et place le rsultat dans (destination)
Ralise le complment logique de (f)
COMF f , d
(8 bits)et place le rsultat dans (destination)
DECF f , d
Dcrmente (f) et place le rsultat dans
(destination). (f) - 1 -> (destination)
Dcrmente (f) et place le rsultat dans
(destination).Si le rsultat est 0, alors
DECFSZ f , d
l'instruction suivante est ignore, et une
instruction NOP est excute la place
(soit 2 cycles)
INCF f , d
Incrmente (f) et place le rsultat dans
(destination). (f) + 1 -> (destination)
Incrmente (f) et place le rsultat dans
(destination).Si le rsultat est 0, alors
INCFSZ f , d
l'instruction suivante est ignore, et
une instruction NOP est excute la place
(soit 2 cycles)
CLRF f
Efface le contenu du registre (f).
Remarque : le bit Z est donc mis 1.
Page 16
Programmation des Microcontroleurs (PIC)
CLRW
EL MORNAN
Efface le contenu de l'accumulateur (W).
Remarque : le bit Z est donc mis 1.
Ralise une rotation circulaire gauche :
RLF f , d
Le rsultat est plac dans (destination).
Ralise une rotation circulaire droite :
RRF f , d
Le rsultat est plac dans (destination).
Les 4 bits de poids forts et les 4 bits de poids
SWAPF f , d
faible de (f) sont changs.
Le rsultat est plac dans (destination).
NOP
Cette instruction ne fait rien (dure 1 cycle).
3.1 Modes d'adressages
On ne peut pas concevoir un programme qui ne manipule pas de donnes. Il existe quatre grands types
d'accs une donne ou modes d'adressage :
Adressage inhrent
Adressage immdiat
Adressage direct
Adressage indirect
Adressage inhrent :
Ce mode nest pas proprement parler un mode dadressage, mais tous les fabricants le dcomptent
comme tel
Les instructions agissent sur les registres internes du microprocesseur. Les instructions comportent donc un code
oprateur seul sans oprande.
CLRW
Met le registre de travail W 0 et met le bit Z 1.
Page 17
Programmation des Microcontroleurs (PIC)
EL MORNAN
Adressage immdiat
La donne est contenue dans l'instruction .La donne est contenue dans un registre.
L'adresse de la donne est contenue dans un pointeur
Exemple : movlw 0xC4; Transfert la valeur 0xC4 dans W
Adressage direct
La donne est contenue dans un registre. Ce dernier peut tre par un nom (par exemple W) ou une adresse
mmoire.
Exemple : movf 0x2B, 0
; Transfert dans W la valeur contenue l'adresse 0x2B.
!
L'adresse 0x2B peut correspondre 2 registres en fonction de la
banque
Adressage indirect
3.2 Le compteur de programme (PC)
Le PC contient l'adresse de la prochaine instruction que doit excuter le programme.
Le programme est stock dans la mmoire de programme (de type Flash, reprogrammable jusqu' 10000
fois) aux adresses 0x0000 0x3FF (soit 1024 adresses).
Le codage d'une instruction ncessite un seul emplacement mmoire : on peut donc stocker un programme
de 1024 instructions au maximum (pour le PIC 16F84A).
Le PC est constitu des deux registres spciaux :
PCL
PCLATH
Le registre spcial PCL est situ l'adresse 0x02 (banque 0) de la mmoire des donnes (Data RAM).
Ce registre est galement accessible en banque 1 ( l'adresse 0x82).
Le registre spcial PCLATH est situ l'adresse 0x0A (banque 0) de la mmoire des donnes.
Ce registre est galement accessible en banque 1 ( l'adresse 0x8A).
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).
Page 18
Programmation des Microcontroleurs (PIC)
EL MORNAN
La prochaine instruction que va excuter le PIC est donc situe l'adresse 0x2B3 de la mmoire de
programme.
Vous pouvez manipuler le contenu des registres PCL et PCLATH.
Par exemple, les instructions :
movlw 0x02 ; W = 0x02
movwf PCLATH ; (PCLATH) = 0x02
movlw 0xB3 ; W = 0xB3
movwf PCL ; (PCL) = 0xB3
font sauter le programme l'adresse 0x2B3 (aprs l'excution de l'instruction movwf PCL).
On a ainsi fait un GOTO "programm" (goto 0x2B3)
3.3 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.
- Les sous-programmes (ou routines)
- La routine d'interruption
- La pile
1- Les sous-programmes (routines)
Prenons un exemple :
...
MOVLW B'10010001'
CALL routine1
CLRW
...
...
routine1 ; tiquette de dbut de la routine
Page 19
Programmation des Microcontroleurs (PIC)
EL MORNAN
instructions de la routine
RETURN ; retour de routine
Supposons que le C en soit l'excution de l'instruction MOVLW B'10010001'.
L'instruction suivante est l'instruction CALL : il s'agit d'une instruction d'appel un sous-programme.
Le C saute alors la position dfinie par l'tiquette "routine1".
Puis, les instructions du sous-programme sont excutes.
La fin du sous-programme est signale par l'instruction RETURN (ou aussi RETLW).
Cette instruction indique qu'il faut revenir l'instruction qui suit l'instruction CALL, c'est dire dans cette
exemple CLRW.
N.B. Les instructions CALL et RETURN (ou RETLW) s'utilisent toujours par paire.
3.4 La routine d'interruption
Il s'agit d'un sous-programme particulier : il est dclench par une interruption (alors qu'un sousprogramme "classique" est appel par l'instruction CALL).
Le C se branche alors l'adresse H'0004' de la mmoire de programme (les instructions de la routine
d'interruption doivent donc commencer cette adresse).
La fin de la routine d'interruption est signale par l'instruction RETFIE.
L'instruction RETFIE provoque le retour dans le programme principal, l'endroit o il avait t
interrompu par l'apparition de l'interruption.
3.5 La pile
La pile est une zone mmoire particulire.
Page 20
Programmation des Microcontroleurs (PIC)
EL MORNAN
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 soussous-programme) : la pile rserve un autre emplacement..
La taille de la pile est limite 8 niveaux (pour le PIC 16F84A).
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 ...).
Remarques :
- il ne peut y avoir qu'une seule routine d'interruption (car un seul vecteur d'interruption : H'0004')
- la routine d'interruption peut appeler un sous-programme (avec l'instruction CALL)
- un sous-programme ne doit pas s'appeler lui-mme
3.6 Le compteur
Le PIC 16F84 est dot d'un compteur 8 bits. La Figure en donne l'organigramme
Page 21
Programmation des Microcontroleurs (PIC)
EL MORNAN
Figure: Organigramme du Timer0.
3.7 Registre TMR0
C'est le registre de 8 bits qui donne la valeur du comptage ralis. Il est accessible en lecture et en
criture l'adresse 01h dans la banque 0..
Choix de l'horloge
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.
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).
Figure : Valeurs du pr-diviseur en fonction de PSA, PS2, PS2 et PS0.
Page 22
Programmation des Microcontroleurs (PIC)
EL MORNAN
Fin de comptage et interruption
Le bit T0IF (INTCON.2) est mis 1 chaque fois que le registre TMR0 passe de FFh 00h. On peut donc
tester
ce bit pour connatre la fin de comptage. Pour compter 50 vnements, il faut donc charger TMR0 avec la
valeur 256-50=206 et attendre le passage de T0IF 1. Cette mthode est simple mais bloque le processeur
dans une boucle d'attente.
On peut aussi reprer la fin du comptage grce l'interruption que peut gnrer T0IF en passant 1
Le processeur est ainsi libre de travailler en attendant cet vnement.
Registres utiles la gestion de timer0
Plusieurs registres ont t voqus dans ce paragraphe. Ils sont synthtiss dans la Figure
Figure: Registres utiles la gestion de timer0.
Page 23
Programmation des Microcontroleurs (PIC)
EL MORNAN
4. Bits (ou "fusibles") de configuration
On se place dans le cadre de l'outil de dveloppement MPLAB de Microchip.
La syntaxe utilise est alors :
Nom
Valeurs
possibles
Signification
Rend impossible la lecture de la mmoire de programme
Flash
ON
CP
et de l'EEPROM ( travers un programmateur)
C'est une protection contre le piratage industriel.
(Code Protection bit)
OFF
Lecture possible
ON
A la mise sous tension du C, lance une temporisation
d'environ 72 ms durant laquelle est effectu un RESET
interne.
PWRTE
(Power-up Timer
Enable bit)
Il est conseill d'utiliser cette configuration.
OFF
Temporisation dsactive
WDT
ON
Active le watchdog (chien de garde)
(Watchdog Timer
Enable bit)
OFF
Dsactive le watchdog
Oscillateur de type Rsistance / Condensateur
RC
OSC
(Oscillator Selection
bits)
Remarques : conomique, rserv aux applications o
la prcision de la base de temps n'est pas critique.
HS
Oscillateur quartz haute frquence (4 MHz, 20 MHz ...).
XT
Oscillateur quartz ou rsonateur cramique
LP
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
Page 24
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
5. Les interruptions
Le PIC 16F84A dispose de 4 sources d'interruptions :
1.
Interruption sur la broche RB0/INT
2.
Interruption "RB" : sur changement du niveau logique d'au moins une de ces 4 broches : RB4,
RB5, RB6 ou RB7 (port B)
3.
Interruption de dbordement du registre TMR0 (H'FF' -> H'00')
4.
Interruption de fin d'criture de l'EEPROM
5.1 - Le mcanisme des interruptions
Quand une interruption survient, le programme principal est interrompu :
Le C finit l'excution de l'instruction en cours puis il se branche vers le sous-programme d'interruption (la
routine d'interruption).
Quand la routine d'interruption est acheve (instruction retfie), le C retourne au programme principal,
l'endroit exact o il l'avait quitt.
5.2 - Cas d'une seule source d'interruption
Imaginons une application o l'on dsire utiliser l'interruption sur la broche RB0/INT.
Il peut s'agir d'un bouton poussoir connect sur la broche RB0/INT :
Page 25
Programmation des Microcontroleurs (PIC)
EL MORNAN
/RBPU = 0 : activation des rsistances de pull-up du port B (bit 7 du registre OPTION_REG)
INTEDG = 0 : l'interruption de la broche RB0/INT est active sur un front descendant (bit 6 du
registre OPTION_REG)
On veut donc provoquer une interruption quand on appuie sur le bouton poussoir.
Pour cela, il faut commencer par autoriser les interruptions de manire globale :
GIE = 1 (bit 7 du registre INTCON)
Puis, on autorise uniquement l'interruption qui nous intresse :
INTE = 1 (bit 4 du registre INTCON) : autorise l'interruption sur la broche RB0/INT
RBIE = 0 (bit 3 du registre INTCON) : dsactive l'interruption "RB"
T0IE = 0 (bit 5 du registre INTCON) : dsactive l'interruption de dbordement du registre TMR0
EEIE = 0 (bit 6 du registre INTCON) : dsactive l'interruption de fin d'criture de l'EEPROM
Enfin, on initialise le drapeau (flag) INTF 0 (bit 1 du registre INTCON).
Tout cela se fait pendant la phase d'initialisation du programme principal par :
movlw B'10010000'
movwf INTCON
Maintenant, quand on appuie sur le bouton poussoir, le drapeau INTF est automatiquement mis 1.
Le C prend en compte cette interruption quand il a connaissance du niveau haut de drapeau INTF (3 ou 4
cycles de dlai).
Le mcanisme des interruptions est lanc (voir plus haut).
Important :
Il faut remettre le drapeau INTF 0 avant de quitter la routine d'interruption (bcf
INTCON, INTF).
Sinon, le C se rebranche indfiniment sur la routine d'interruption (puisque INTF = 1) : le programme est
plant !
Sauvegarde et restauration du contexte de travail
Page 26
Programmation des Microcontroleurs (PIC)
EL MORNAN
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 27
Programmation des Microcontroleurs (PIC)
EL MORNAN
Page 28
Programmation des Microcontroleurs (PIC)
EL MORNAN
5.3 - Cas de plusieurs sources d'interruption
On suppose que les 4 sources d'interruptions sont actives :
GIE = 1
INTE = 1
RBIE = 1
T0IE = 1
EEIE = 1
Dans la routine d'interruption (aprs avoir sauvegard le registre W et le registre STATUS), se pose la
question suivante : quelle est la source de l'interruption ?
La rponse se fait en testant, les uns aprs les autres, le niveau logique des drapeaux :
INTF (bit 1 du registre INTCON)
RBIF (bit 3 du registre INTCON)
T0IF (bit 2 du registre INTCON)
EEIF (bit 4 du registre EECON1)
Par exemple, supposons que l'interruption est due au dbordement du registre TMR0 :
INTF = 0
RBIF = 0
T0IF = 1
EEIF = 0
Aprs le test, le C se branche vers le bloc de traitement spcifique de l'interruption TMR0.
Il ne faut pas oublier d'effacer le drapeau T0IF.
On finit par la restauration du registre STATUS puis du registre W.
Il peut arriver qu'il y ait plusieurs sources d'interruptions en mme temps :
INTF = 1
RBIF = 1
T0IF = 0
EEIF = 0
Dans ce cas, on se peut se contenter de traiter une seule source d'interruption la fois.
Ce sera l'interruption RB0/INT s'il se trouve que le drapeau INTF est test en premier.
Aprs retour dans le programme principal, on aura :
INTF = 0
RBIF = 1
T0IF = 0
EEIF = 0
Page 29
Programmation des Microcontroleurs (PIC)
EL MORNAN
L'interruption "RB" est alors traite, etc ...
On voit ici que l'on peut choisir des niveaux de priorits entre les diffrentes sources d'interruptions.
Page 30
Programmation des Microcontroleurs (PIC)
EL MORNAN
6. Le mode SLEEP
6.1 Prambule
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.
6.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).
6.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.
Une interruption RB0/INT, RB ou EEPROM survient (si ces interruptions sont autorises) mme
quand le bit GIE (du registre INTCON) est gal 0 :
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.
Page 31
Programmation des Microcontroleurs (PIC)
EL MORNAN
7. Le timer WATCHDOG (chien de garde)
7.1 Prambule
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.
7.2 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 :
Page 32
Programmation des Microcontroleurs (PIC)
PSA PS2, PS1, PS0
Taux de
prdivision
EL MORNAN
Dure
indicative
du Watchdog
0
XXX
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
En cas de dbordement du watchdog :
le bit /TO est mis 0
3- Cas particulier du mode SLEEP
En mode SLEEP, le C se rveille si la temporisation du watchdog est dpasse (si le watchdog est actif).
Mais il n'y a pas RESET : le programme reprend l'instruction qui suit l'instruction SLEEP.
le bit /TO est mis 0
Page 33
Programmation des Microcontroleurs (PIC)
EL MORNAN
le bit /PD est mis 0
7.3 Reset
Il y a plusieurs types de Reset :
Reset la mise sous tension (POR : Power-on Reset)
Reset externe en mode de fonctionnement normal (niveau bas sur la broche /MCLR)
Reset externe pendant le mode SLEEP (niveau bas sur la broche /MCLR)
Reset d au Watchdog (en mode de fonctionnement normal)
Rveil d au Watchdog (en mode SLEEP)
7-3-1- Reset la mise sous tension (POR : Power-on Reset)
Un Reset interne a lieu la mise sous tension, ou aprs une coupure de courant.
Le programme est initialis (adresse H'0000' de la mmoire de programme).
Le bit /TO (du registre STATUS) est mis 1
Le bit /PD (du registre STATUS) est mis 1
7-3-2- Reset externe (en mode de fonctionnement normal)
Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui gnre un Reset
"externe" :
Le programme est rinitialis (adresse H'0000' de la mmoire de programme).
Le bit /TO (du registre STATUS) est mis 1
Le bit /PD (du registre STATUS) est mis 1
7-3-3- Reset externe pendant le mode SLEEP
On se place dans le cas o le C est plac en mode SLEEP (suite l'instruction SLEEP).
Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui gnre un Reset
"externe" :
Page 34
Programmation des Microcontroleurs (PIC)
EL MORNAN
Le C se rveille, le programme est rinitialis (adresse H'0000' de la mmoire de programme).
Le bit /TO (du registre STATUS) est mis 1
Le bit /PD (du registre STATUS) est mis 0
7-3-4- Reset d au Watchdog (en mode de fonctionnement normal)
Quand le timer Watchdog dborde, un Reset interne est ralis :
Le programme est rinitialis (adresse H'0000' de la mmoire de programme).
Le bit /TO (du registre STATUS) est mis 0
Le bit /PD (du registre STATUS) est mis 1
7-3-5- Rveil d au Watchdog (en mode SLEEP)
En mode SLEEP, le C se rveille si le timer watchdog dborde (si le watchdog est actif).
Mais il n'y a pas RESET : le programme reprend l'instruction qui suit l'instruction SLEEP.
Le bit /TO (du registre STATUS) est mis 0
Le bit /PD (du registre STATUS) est mis 0
7-3-6 - Bits /TO et /PD du registre STATUS
Ces bits sont en lecture seule.
/TO
/PD
Condition
Reset la mise sous tension (Power-on Reset POR)
Reset externe (en mode de fonctionnement normal)
Reset d au Watchdog (en mode de fonctionnement normal)
Rveil d au Watchdog (en mode SLEEP)
Reset externe pendant le mode SLEEP
Rveil d une interruption
Page 35
Programmation des Microcontroleurs (PIC)
EL MORNAN
En testant si /TO = 0, on peut savoir si le Reset est d un plantage (dbordement de Watchdog), et
orienter la suite de programme en consquence
8. Accs la mmoire EEPORM
Le PIC possde une zone EEPROM de 64 octets accessibles en lecture et en criture par le programme.
On peut y sauvegarder des valeurs, qui seront conserves mme si l'alimentation est teinte, et les
rcuprer lors de la mise sous tension. Leur accs est spcifique et requiert l'utilisation
de registres ddis. La lecture et l'criture ne peut s'excuter que selon des squences particulires.
8.1 . Registres utiliss
Quatre registres sont utiliss pour l'accs la mmoire eeprom du PIC :
- EEDATA contient la donne.
- EEADR contient l'adresse.
- EECON1 (Figure* VIII.1) est le registre de contrle de l'accs l'eeprom. Cinq bits permettent un cet
accs :
- RD et WR initient la lecture ou l'criture. Ils sont mis 1 par le programme pour initier l'accs et mis
zro par le systme la fin de l'accs.
- WREN autorise (1) ou non (0) l'accs en criture.
- WRERR est mis 1 par le systme quand une opration d'criture est interrompue par MCLR, reset ou le
chien de garde.
- EEIF est un drapeau d'interruption signalant la fin de l'criture physique dans la mmoire eeprom. Il doit
tre mis 0 par programme.
Figure : Registre EECON1.
Page 36
Programmation des Microcontroleurs (PIC)
EL MORNAN
- EECON2 joue un rle spcifique lors de l'criture.
8.2 Lecture
Pour lire une donne dans la mmoire eeprom, il faut mettre l'adresse dans EEADR et positionner RD 1.
La valeur lue est alors disponible dans EEDATA au cycle machine suivant. Le programme ci-dessous
donne un exemple de lecture dans la mmoire eeprom.
8.3 Ecriture
Pour crire une donne dans la mmoire eeprom, il faut d'abord mettre l'adresse dans EEADR et la donne
dans EEDATA. Un cycle bien spcifique doit ensuite tre respecter pour que l'criture ait lieu. L'exemple
suivant donne le cycle :
Page 37
Programmation des Microcontroleurs (PIC)
EL MORNAN
9. Remarques et astuces de programmation en
assembleur
9-1- Charger une valeur littrale dans un registre
movlw B'10001100' ; W = B'10001100'
movwf REGISTRE ; (REGISTRE) = B'10001100' = 0x8C = D'140'
9-2- Charger un registre avec le contenu d'un autre registre
movf REGISTRE1 , W ; W = (REGISTRE1)
movwf REGISTRE2 ; (REGISTRE2) = (REGISTRE1)
9-3- Echanger le contenu de deux registres : (REGISTRE1) < - > (REGISTRE2)
Il faut utiliser une variable intermdiaire :
REGISTRE_TEMP (registre d'usage gnral)
movf REGISTRE1 , W ; W = (REGISTRE1)
movwf REGISTRE_TEMP ; (REGISTRE_TEMP) = (REGISTRE1)
movf REGISTRE2, W ; W = (REGISTRE2)
movwf REGISTRE1 ; (REGISTRE1) = (REGISTRE2)
movf REGISTRE_TEMP, W ; W = (REGISTRE_TEMP)
movwf REGISTRE2 ; (REGISTRE2) = (REGISTRE_TEMP)
9-4 Tests de comparaison
9-4- Tests d'galit
9-4-1- Le contenu du registre est-il nul ?
(REGISTRE) = 0x00 ?
Page 38
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE , f ; (REGISTRE) = (REGISTRE)
btfss STATUS , Z ; test du bit Z
goto non ; Z = 0 c'est--dire (REGISTRE) != 0x00
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-2- Le contenu du registre est-il diffrent de zro ?
(REGISTRE) != 0x00 ?
Page 39
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE , f ; (REGISTRE) = (REGISTRE)
btfsc STATUS , Z ; test du bit Z
goto non ; Z = 1 c'est--dire (REGISTRE) = 0x00
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-3- Le contenu du registre est-il gal une certaine valeur ?
(REGISTRE) = 0x3F ?
Page 40
Programmation des Microcontroleurs (PIC)
EL MORNAN
movlw 0x3F ; W = 0x3F
subwf REGISTRE, W ; W = (REGISTRE) - 0x3F
btfss STATUS, Z ; test du bit Z
goto non ; Z = 0 c'est--dire (REGISTRE) != 0x3F
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-4- Le contenu du registre est-il diffrent d'une certaine valeur ?
(REGISTRE) != 0x3F ?
Page 41
Programmation des Microcontroleurs (PIC)
EL MORNAN
movlw 0x3F ; W = 0x3F
subwf REGISTRE, W ; W = (REGISTRE) - 0x3F
btfsc STATUS, Z ; test du bit Z
goto non ; Z = 1 c'est--dire (REGISTRE) = 0x3F
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-5- Le contenu du registre est-il gal au contenu d'un autre registre ?
(REGISTRE1) = (REGISTRE2) ?
Page 42
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE2 , W ; W = (REGISTRE2)
subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)
btfss STATUS, Z ; test du bit Z
goto non ; Z = 0 c'est--dire (REGISTRE1) != (REGISTRE2)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-6- Le contenu du registre est-il diffrent du contenu d'un autre registre ?
(REGISTRE1) != (REGISTRE2) ?
Page 43
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE2 , W ; W = (REGISTRE2)
subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)
btfsc STATUS, Z ; test du bit Z
goto non ; Z = 1 c'est--dire (REGISTRE1) = (REGISTRE2)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-7 - Le contenu du registre est-il strictement suprieur une certaine valeur ?
(REGISTRE) > 0x3F ?
Les valeurs sont supposes en binaire naturel.
Page 44
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE , W ; W = (REGISTRE)
sublw 0x3F ; W = 0x3F - (REGISTRE)
btfsc STATUS, C ; test du bit C (Carry)
goto non ; C = 1 c'est--dire 0x3F >= (REGISTRE)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-8 - Le contenu du registre est-il suprieur ou gal une certaine valeur ?
(REGISTRE) >= 0x3F ?
Les valeurs sont supposes en binaire naturel.
Page 45
Programmation des Microcontroleurs (PIC)
EL MORNAN
movlw 0x3F ; W = 0x3F
subwf REGISTRE, W ; W = (REGISTRE) - 0x3F
btfss STATUS, C ; test du bit C (Carry)
goto non ; C = 0 c'est--dire (REGISTRE) < 0x3F
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-9 - Le contenu du registre est-il strictement infrieur une certaine valeur ?
(REGISTRE) < 0x3F ?
Les valeurs sont supposes en binaire naturel.
Page 46
Programmation des Microcontroleurs (PIC)
EL MORNAN
movlw 0x3F ; W = 0x3F
subwf REGISTRE, W ; W = (REGISTRE) - 0x3F
btfsc STATUS, C ; test du bit C (Carry)
goto non ; C = 1 c'est--dire (REGISTRE) >= 0x3F
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-10 - Le contenu du registre est-il infrieur ou gal une certaine valeur ?
(REGISTRE) <= 0x3F ?
Les valeurs sont supposes en binaire naturel.
Page 47
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE , W ; W = (REGISTRE)
sublw 0x3F ; W = 0x3F - (REGISTRE)
btfss STATUS, C ; test du bit C (Carry)
goto non ; C = 0 c'est--dire 0x3F < (REGISTRE)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-11 - Le contenu du registre est-il suprieur ou gal au contenu d'un autre registre ?
(REGISTRE1) >= (REGISTRE2) ?
Les valeurs sont supposes en binaire naturel.
Page 48
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE2 , W ; W = (REGISTRE2)
subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)
btfss STATUS, C ; test du bit C (Carry)
goto non ; C = 0 c'est--dire (REGISTRE1) < (REGISTRE2)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-4-12 - Le contenu du registre est-il strictement infrieur au contenu d'un autre registre ?
(REGISTRE1) < (REGISTRE2) ?
Les valeurs sont supposes en binaire naturel.
Page 49
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf REGISTRE2 , W ; W = (REGISTRE2)
subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)
btfsc STATUS, C ; test du bit C (Carry)
goto non ; C = 1 c'est--dire (REGISTRE1) >= (REGISTRE2)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
9-5- Boucle Do While
Exemple :
Page 50
Programmation des Microcontroleurs (PIC)
EL MORNAN
debut
{ bloc d'instructions }
movf REGISTRE , f
btfsc STATUS , Z
goto debut
suite
{ suite du programme }
9-6- Boucle While
Exemple :
Page 51
Programmation des Microcontroleurs (PIC)
EL MORNAN
debut
movlw 0xE8 ; W = 0xE8
subwf REGISTRE, W ; W = (REGISTRE) - 0xE8
btfss STATUS , Z
goto suite
{ bloc d'instructions }
goto debut
suite
{ suite du programme }
9-7- Boucle FOR
Une variable (1 octet) sert de compteur.
Exemple :
Pour excuter le bloc d'instructions 20 fois, la valeur initiale du compteur doit tre 21 :
Page 52
Programmation des Microcontroleurs (PIC)
EL MORNAN
movlw D'21' ; W = D'21'
movwf COMPTEUR ; (COMPTEUR) = D'21' pour 20 boucles
debut
decfsz COMPTEUR , f ; (COMPTEUR) = (COMPTEUR) - 1
goto boucle ; (COMPTEUR) != 0
goto suite ; (COMPTEUR) = 0
boucle
{ bloc d'instructions }
goto debut
suite
Page 53
Programmation des Microcontroleurs (PIC)
EL MORNAN
{ suite du programme }
N.B. Avec (COMPTEUR) = 0xFF en valeur initiale, on effectue 254 boucles.
Avec (COMPTEUR) = 0x00 en valeur initiale, on effectue 255 boucles.
Avec (COMPTEUR) = 0x01 en valeur initiale, on effectue 0 boucle.
9-8- Manipulation de bits. Les masques
9-8-1- Mettre 0 certains bits d'un registre
Exemple : on veut mettre 0 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u0u0u00u'
movlw B'10101001' ; W = B'10101001' (on appelle a un masque)
andwf REGISTRE , f ; fonction ET logique
Valeur initiale : (REGISTRE) = B'11010101'
Valeur finale : (REGISTRE) = B'10000001'
N.B. S'il n'y a qu'un seul bit mettre 0, il faut simplement utiliser l'instruction bcf.
S'il faut mettre tous les bits 0, il faut simplement utiliser l'instruction clrf REGISTRE
9-8-2- Mettre 1 certains bits d'un registre
Exemple : on veut mettre 1 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u1u1u11u'
movlw B'01010110' ; W = B'01010110' (masque)
iorwf REGISTRE , f ; fonction OU logique
Valeur initiale : (REGISTRE) = B'11010101'
Valeur finale : (REGISTRE) = B'11010111'
N.B. s'il n'y a qu'un seul bit mettre 1, il faut simplement utiliser l'instruction bcf
9-8-3- Inverser certains bits d'un registre
Exemple : on veut complmenter les bits 1, 2, 4 et 6, les autres bits tant inchangs.
movlw B'01010110' ; W = B'01010110' (masque)
Page 54
Programmation des Microcontroleurs (PIC)
EL MORNAN
xorwf REGISTRE , f ; fonction logique OU exclusif
Valeur initiale : (REGISTRE) = B'11010101'
Valeur finale : (REGISTRE) = B'10000011'
N.B. s'il faut inverser tous les bits, il faut simplement utiliser l'instruction
comf REGISTRE , f
9-9- Tables de donnes
On utilise la technique de l'adressage relatif.
Exemple :
On dsire effectuer l'opration arithmtique : y = 10x +1
Ainsi, pour x =D'16' : y = D'161'
Cela peut se faire simplement avec un tableau de donnes.
On commence par crer la routine table.
Pour des raisons de simplicit, l'adresse de dbut de cette routine peut tre (pour un microcontrleur
16F84A) :
0x100
0x200
0x300
; xxxxxxxxxxx
; Routine table
; xxxxxxxxxxx
org 0x0300 ; adresse de dbut de la table
table
addwf PCL , f ; (PCL) = (PCL) + W
retlw D'1'
retlw D'11'
retlw D'21'
retlw D'31'
Page 55
Programmation des Microcontroleurs (PIC)
EL MORNAN
retlw D'41'
retlw D'51'
retlw D'61'
retlw D'71'
retlw D'81'
retlw D'91'
retlw D'101'
retlw D'111'
retlw D'121'
retlw D'131'
retlw D'141'
retlw D'151'
retlw D'161'
retlw D'171'
retlw D'181'
retlw D'191'
retlw D'201'
retlw D'211'
retlw D'221'
retlw D'231'
retlw D'241'
retlw D'251'
; Fin de la routine table
; xxxxxxxxxxxxxxxxxx
Avec un dbut de routine l'adresse 0x300, l'instruction retlw D'1' se trouve l'adresse 0x301, retlw
D'11' l'adresse 0x302 etc...
Page 56
Programmation des Microcontroleurs (PIC)
EL MORNAN
La table peut contenir jusqu' 255 lments (0x301 0x3FF).
Ici, notre table possde 26 lments donc pas de problme de taille.
Dans le programme principal, pour appeler la routine, il faut au pralable charger le registre spcial
PCLATH avec la valeur 0x03 (0x02 si l'adresse de dbut est 0x200 etc ...) :
movlw 0x03 ; W = 0x03
movwf PCLATH ; (PCLATH) = 0x03
movlw D'16' ; W = D'16' : 16me ligne de la table
call table
movwf resultat ; (resultat) = D'161'
10. les tapes ncessaires pour programmer un pic :
Page 57
Programmation des Microcontroleurs (PIC)
EL MORNAN
11. Exemples en assembleur avec 16F84
11.1 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)
11.2 Exemple dune temporisation de 0.2s
;------------ Dfinition des registres temporaires --------------retard1
EQU
0x0C
; le registre temporaire retard1 se trouve l' adresse 0C
retard2
EQU
0x0F
; le registre temporaire retard2 se trouve l' adresse 0F
;------------ Programme de temporisation ( 0.2 s ) --------------MOVLW 0xFF
; on met 255 dans le registre W
MOVWF retard1
MOVWF retard2
; on charge retard1 avec 255 ( FFh contenu du registre W )
; on charge retard2 avec 255 ( FFh contenu du registre W )
tempo
DECFSZ retard1,F
; on dcrmente retard1 et on saute la prochaine instruction si
GOTO tempo
; le registre retard1 = 0 sinon retour tempo
MOVLW 0xFF
; on met 255 dans le registre W
MOVWF retard1
; 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
Page 58
Programmation des Microcontroleurs (PIC)
EL MORNAN
11.3 Exemple de temporisateur interne utilisant le Timer
; Titre : TIMER du PIC
; PIC utilis : PIC 16 F 84
; on utilise le timer pour avoir une temporisation multiple de la seconde
; si le registre OPTION =
; 04 --> 1 S
; 05 --> 4 S
; 07 --> 8 S
; 03 --> 0.5 S
; 02 --> 0.25 S
; 01 --> 0.0125 S
; 00 --> 0.00625 S
; le timer fonctionne avec la frquence interne Q = 4 MHz
;------------ Directive d' assemblage pour PLAB --------------list
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes ---------------
EQU
0x00
; variable W = 0
EQU
0x01
; variable F = 1
;------------ Dfinition des registres temporaires --------------retard1
EQU
0x0C
key
EQU
0x12
OPTION_REG EQU
; le registre temporaire retard1 se trouve l' adresse 0C
H'0081'
Page 59
Programmation des Microcontroleurs (PIC)
EL MORNAN
;------------ 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 et OPTION )
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
MOVLW 0x07
; on met 07 dans le registre W
MOVWF OPTION_REG
; on met 07 dans le registre OPTION ( 8 secondes )
; 1MHz / 256 = 3.906 kHz
bcf STATUS,5
; on remet 0 le 5eme bit du registre status pour accder
; la 1eme page mmoire
clrf PORTB
clrf key
;-------------------- Programme principal ---------------------debut
MOVLW 0x06
MOVWF TMR0
; on met 06 dans le registre W
; on met W dans le registre du TIMER 0
; le timer comptera jusqu' 256 - 6 = 250
; 3.906 kHz / 250 = 15.624 Hz
MOVLW 0x7D
; on met 7D ( 125 ) dans le registre W
MOVWF retard1
; on met W dans le registre retard1
; 15.624 Hz / 125 = 0.124992 Hz et 1/0.12 = 8 S
call tempo
COMF key,f
; on complmente le registre key
Page 60
Programmation des Microcontroleurs (PIC)
EL MORNAN
movf key,w
movwf PORTB
; change l 'tat des leds chaque fois que la tempo est finie
goto debut
tempo
movf TMR0,w
btfss STATUS,2
;test du bit Z
goto tempo
MOVLW 0x06
MOVWF TMR0
DECFSZ retard1,F
GOTO tempo
; on met 06 dans le registre W
; on met W dans le registre du TIMER 0
; on dcrmente retard1 et on saute la prochaine instruction si
; le registre retard1 = 0 sinon retour tempo
return
END
11.4 Exemple d'application: Un compteur binaire
; Titre : Compteur binaire
; PIC utilis : PIC 16 F 84
Page 61
Programmation des Microcontroleurs (PIC)
EL MORNAN
; 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.
;------------ Directive d' assemblage pour MPLAB --------------list
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0
; bouton marche
;------------ Dfinition des registres temporaires --------------retard1
EQU
0x0C
; le registre temporaire retard1 se trouve l' adresse 0C
retard2
EQU
0x0D
; le registre temporaire retard2 se trouve l' adresse 0D
memo
EQU
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
; on charge retard1 avec 255 ( FFh contenu du registre W )
MOVLW 0xFF
; on met 255 dans le registre W
Page 62
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
; on dcrmente retard1 et on saute la prochaine instruction si
GOTO tempo
; le registre retard1 = 0 sinon retour tempo
MOVLW 0xFF
; on met 255 dans le registre W
MOVWF retard1
; 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
Page 63
Programmation des Microcontroleurs (PIC)
11.5
EL MORNAN
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
;------------ Directive d' assemblage pour PLAB --------------list
p=16f84A
#include p16f84A.inc
__config H'3FF9'
;------------ Dfinition des constantes --------------#define inter0 0
; bouton marche
#define inter1 1 ; bouton clignotement orange
Page 64
Programmation des Microcontroleurs (PIC)
EL MORNAN
;------------ Dfinition des registres temporaires --------------retard1
EQU
0x0C
; le registre temporaire retard1 se trouve l' adresse 0C
retard2
EQU
0x0F
; le registre temporaire retard2 se trouve l' adresse 0F
retard3
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'
; on met 0C dans le registre W ( Rouge1 et Rouge2 )
MOVWF PORTB
; 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 )
Page 65
Programmation des Microcontroleurs (PIC)
EL MORNAN
;--------------- 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
; 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 0x12
; on met 12 dans le registre W
MOVWF retard3
; on met W dans le registre retard3
attente
DECFSZ retard1,F
GOTO attente
movlw 0xFF
; on dcrmente retard1 et on saute la prochaine instruction si
; le registre retard1 = 0 sinon retour attente
; on recharge retard1
Page 66
Programmation des Microcontroleurs (PIC)
EL MORNAN
movwf retard1
DECFSZ retard2,F
GOTO attente
movlw 0xFF
; on dcrmente retard2 et on saute la prochaine instruction si
; le registre retard2 = 0 sinon retour attente
; 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
; 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 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
GOTO attente2
movlw 0xFF
; on dcrmente retard2 et on saute la prochaine instruction si
; le registre retard2 = 0 sinon retour attente2
; on recharge retard2
movwf retard2
DECFSZ retard3,F
GOTO attente2
; on dcrmente retard3 et on saute la prochaine instruction si
; le registre retard3 = 0 sinon retour attente2
RETURN
clignote
MOVLW B'00010010'
; on met 12 dans le registre W ( Orange1 et Orange2 )
Page 67
Programmation des Microcontroleurs (PIC)
MOVWF PORTB
CALL tempo2
EL MORNAN
; on met W sur le port B ( led )
; 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
11.6 Exemple d'application: La perceuse
Cycle effectu par la perceuse
1) Ds l'appui sur le bouton dpart cycle, la perceuse se met en rotation puis descend.
Les leds "descente" et "rotation" sont allumes.
2) Ds que le capteur de position bas est actionn, la perceuse remonte aprs une temporisation de 3s.
Les leds "monte" et "rotation" sont allumes.
3) Ds que le capteur de position haut est
actionn, la remonte s'arrte. Aprs une
temporisation de 3s la rotation s'arrte. Fin de cycle.
Arrt d'urgence
4) Si l'arrt d'urgence est actionn, la rotation s'arrte et la perceuse remonte quel que soit l'endroit o
l'on se trouve dans le cycle. La led "dfaut" est allume et mmorise jusqu'au prochain dpart cycle.
Tant que l'arrt d'urgence est appuy le cycle ne peut dmarrer.
Page 68
Programmation des Microcontroleurs (PIC)
EL MORNAN
; Titre : Perceuse
; PIC utilis : PIC 16 F 84
; On ralise une simulation dune perceuse en utilisant les broches RB0 RB3
; pour le bouton marche, le coup de poing d' arrt d'urgence et les deux fin de
; course haut et bas.
; Les broches RB4 RB7 reprsentent la rotation, la monte et la descente.
; Entres : RB0= Arrt
RA0= Marche
RA1= Capteur haut
; Sorties : RB1= Rotation RB2= Descente RB3= Monte
RA2= Capteur bas
RB4= Dfaut mmoris
; Cycle :
; 1) appui sur marche -> rotation + descente
; 2) capteur bas actionn -> temporisation et rotation + remonte
; 3) capteur haut actionn -> rotation + temporisation et arrt rotation
; Arrt d'urgence : La perceuse s'arrte de tourner et remonte, un voyant dfaut mmorise
; l' action. Le voyant dfaut s' efface au prochain cycle.
;------------ Directive d' assemblage pour PLAB --------------list
p=16f84A
#include p16f84A.inc
Page 69
Programmation des Microcontroleurs (PIC)
EL MORNAN
__config H'3FF9'
;------------ Dfinition des constantes --------------#define arret 0
; bouton arrt
#define marche
; bouton marche
#define capteur_h 1
; capteur haut
#define capteur_b 2
; capteur bas
;------------ Dfinition des registres temporaires --------------retard1
EQU
0x0C
; le registre temporaire retard1 se trouve l' adresse 0C
retard2
EQU
0x0F
; le registre temporaire retard2 se trouve l' adresse 0F
retard3
EQU
0x10
; le registre temporaire retard3 se trouve l' adresse 10
; -------------------------------------------- Saut init -------------------------------------------------------------------org 0
goto init
;----------------------------------------- Programme d' interruption ------------------------------------org 04
MOVLW B'00011000'
; on met 18 dans le registre W ( monte + voyant dfaut )
MOVWF PORTB
; on met W sur le port B ( led )
capt
btfss PORTA,capteur_h
goto capt
; interrupteur 1 ( capteur haut ) appuy ? si non on
; va capt
MOVLW B'00010000'
; on met 10 dans le registre W ( voyant defaut )
MOVWF PORTB
; on met W sur le port B ( led )
bcf INTCON,1
; on met 0 le 1er bit de INTCON
bsf INTCON,4
; on met 1 le 4eme bit du registre INTCON pour autoriser l' IT sur RB0
bsf INTCON,7 ; on met 1 le 7eme bit du registre INTCON pour autoriser toutes les IT
goto debut
; on retourne debut
;---------------------------------- Init des ports A et B et validation des IT -----------------------------------init
ORG 20
bsf STATUS,5
; on met 1 le 5eme bit du registre status pour accder
Page 70
Programmation des Microcontroleurs (PIC)
EL MORNAN
; la 2eme page mmoire ( pour trisa et trisb )
MOVLW 0x01
; on met 01 dans le registre W
MOVWF TRISB
; on met 00 dans le port B il est programm en sortie sauf RB0
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
bsf INTCON,4
; on met 1 le 4eme bit du registre INTCON pour autoriser
; l 'IT sur la broche RB0 ( arrt d 'urgence )
bsf INTCON,7
; on met 1 le 7eme bit du registre INTCON pour autoriser toutes les 'IT
;---------------------------------------------- Programme principal ---------------------------------------------MOVLW B'00000000'
; on met 00 dans le registre W ( arret )
MOVWF PORTB
; on met W sur le port B ( led )
debut
bsf INTCON,4
; on met 1 le 4eme bit du registre INTCON
bsf INTCON,7
; on met 1 le 7eme bit du registre INTCON
; toutes les 'IT
btfsc PORTB,arret
goto debut
; interrupteur 0 ( arret ) appuy ? si oui on
; va debut
btfss PORTA,marche
goto debut
; va debut
btfss PORTA,capteur_h
goto debut
; interrupteur 0 ( marche ) appuy ? si oui on continu sinon
; interrupteur 1 ( capteur haut ) appuy ? si non on
; va debut ( init )
MOVLW B'00000000'
; on met 00 dans le registre W ( arret )
MOVWF PORTB
; on met W sur le port B ( led )
MOVLW B'00000110'
; on met 06 dans le registre W ( Rotation + descente )
MOVWF PORTB
; on met W sur le port B ( led )
descente
btfss PORTA,capteur_b
; interrupteur 2 ( capteur bas ) appuy ? si non on
Page 71
Programmation des Microcontroleurs (PIC)
EL MORNAN
goto descente
; va descente
CALL tempo
; on appel la temporisation
MOVLW B'00001010'
; on met 0A dans le registre W ( Rotation + monte )
MOVWF PORTB
; on met W sur le port B ( led )
remonte
btfss PORTA,capteur_h
; interrupteur 1 ( capteur haut ) appuy ? si non on
goto remonte
; va remonte
CALL tempo
; on appel la temporisation
MOVLW B'00000010'
; on met 02 dans le registre W ( Rotation )
MOVWF PORTB
; on met W sur le port B ( led )
CALL tempo
; on appel la temporisation
MOVLW B'00000000'
; on met 00 dans le registre W ( arret )
MOVWF PORTB
; on met W sur le port B ( led )
GOTO debut
; retour au dbut du programme
;---------------------------------------------- Programme de temporisation
-----------------------------------
tempo
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 0x12
; on met 12 dans le registre W
MOVWF retard3
; on met W dans le registre retard3
attente
DECFSZ retard1,F
GOTO attente
movlw 0xFF
; on dcrmente retard1 et on saute la prochaine instruction si
; le registre retard1 = 0 sinon retour tempo
; on recharge retard1
movwf retard1
DECFSZ retard2,F
GOTO attente
movlw 0xFF
; on dcrmente retard2 et on saute la prochaine instruction si
; le registre retard2 = 0 sinon retour tempo
; on recharge retard2
movwf retard2
Page 72
Programmation des Microcontroleurs (PIC)
DECFSZ retard3,F
EL MORNAN
; on dcrmente retard3 et on saute la prochaine instruction si
GOTO attente
; le registre retard3 = 0 sinon retour tempo
RETURN
; retour au programme principal aprs l 'instruction CALL
END
11.7 La compilation se fait a laide du logiciel MPLAB de Microchip
11.8 Le programmateur des microcontrleurs
Une fois le fichier est compil ; il porte lextension .HEX on doit le transfrer vers le microcontrleur a
travers un programmateur universel qui peut tre reli au PC a travers le port srie ou le port USB
On peut programmer toutes les sortes de PIC selon le schma de brochage en utilisant le logiciel PICPgm
ou ICPROG ou autre logiciel.
Page 73
Programmation des Microcontroleurs (PIC)
EL MORNAN
12. 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
Page 74
Programmation des Microcontroleurs (PIC)
EL MORNAN
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)
. Lancer la simulation
Pour lancer la simulation il suffit de cliquer sur licone PLAY verte en bas de page
Page 75
Programmation des Microcontroleurs (PIC)
EL MORNAN
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...
Nhsitez pas utiliser du clic droit de la souris dans le code source ;)
Page 76
Programmation des Microcontroleurs (PIC)
EL MORNAN
13. Circuits dinterfaces avec le microcontrleur
13.1 AFFICHEUR LCD
13-1-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
13-1-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.
13-1-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 :
Page 77
Programmation des Microcontroleurs (PIC)
EL MORNAN
criture
lecture
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 78
Programmation des Microcontroleurs (PIC)
EL MORNAN
U1
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
19
20
21
22
27
28
29
30
LCD
7
8
9
10
11
12
13
14
D0
D1
D2
D3
D4
D5
D6
D7
LM032L
RS
RW
E
RS
E
4
5
6
15
16
17
18
23
24
25
26
RW
VSS
VDD
VEE
RA0/AN0
RA1/AN1
RA2/AN2/VREFRA3/AN3/VREF+
RA4/T0CKI
RA5/AN4/SS
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RE0/AN5/RD
RC2/CCP1
RE1/AN6/WR
RC3/SCK/SCL
RE2/AN7/CS
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
33
34
35
36
37
38
39
40
RS
RW
E
8
9
10
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
1
2
3
2
3
4
5
6
7
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp/THV
GND
VCC
VEE
13
14
1
PIC16F877
VDD=VCC
VSS=GND
Montages de lafficheur LCD avec le PIC
13.2 Le clavier
13-2-1 Prsentation :
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.
Page 79
Programmation des Microcontroleurs (PIC)
EL MORNAN
13-2-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.
Page 80
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.3 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
Page 81
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.4 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.
Page 82
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.5 Les moteurs
13-5-1. Moteur pas pas :
Moteur pas pas
a) 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.
b) 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.
c) Connexion du moteur pas pas sur la carte :
Page 83
Programmation des Microcontroleurs (PIC)
EL MORNAN
Le moteur pas pas+ULN2003A sont connects aux lignes RD0 RD3 du microcontrleur.
13-5-2 Moteur courant continu :
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
a) Connexion du moteur
Dans ce figure on utiliser deux relaies pour changer le sens de rotation du moteur courant continue. Les
deux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du microcontrleur.
Page 84
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
ETAT MOTEUR
ARRET
SENS 1
SENS 2
ARRET
Figure : Tableau des diffrentes sequences
Page 85
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
b) Commande de 2moteurs DC avec Times L293D
Page 86
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.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
RL
21
VCC
REL2
D2
1N4148
5
3
Q2
R2
2N2222
POMP1
RL
20
2.2k
Montage du relais
13.7 Isolation laide dun opto- triac
Exemple de commande dune lampe.
Page 87
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.8 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 .
SWO
1
RE0
SW1
1
RE1
2
RE2
SW2
1
R9
R10
2.2k
2.2k
R8
2.2k
VCC
Montage des boutons poussoirs
13.9 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.
Page 88
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
Page 89
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
13.10 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
Page 90
Programmation des Microcontroleurs (PIC)
EL MORNAN
Page 91
Programmation des Microcontroleurs (PIC)
EL MORNAN
13.11 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.
Page 92
Programmation des Microcontroleurs (PIC)
EL MORNAN
Figure : architecture interne du PCF8583
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.12 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 15 : 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.
Page 93
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
Page 94
Programmation des Microcontroleurs (PIC)
EL MORNAN
14. 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 de 1 40. La 1ere broche est plac dans le
coin situ gauche de lencoche de reprage.
Figure : Les pins du 16F877
14.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.
Page 95
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
14.2 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
U1
1nF
X1
C2
1nF
13
14
CRYS T AL
1
2
3
4
5
6
7
8
9
10
OSC1/CLK IN
OSC2/CLK OUT
MCLR/V pp/T HV
RA0/AN0
RA1/AN1
RA2/AN2/V RE FRA3/AN3/V RE F+
RA4/T 0CKI
RA5/AN4/S S
RE0/AN5/RD
RE1/AN6/W R
RE2/AN7/CS
RB 0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T 1OS O/T 1CKI
RC1/T 1OSI/CCP2
RC2/CCP 1
RC3/S CK /S CL
RC4/SDI/S DA
RC5/SDO
RC6/T X/CK
RC7/RX/DT
RD0/PS P0
RD1/PS P1
RD2/PS P2
RD3/PS P3
RD4/PS P4
RD5/PS P5
RD6/PS P6
RD7/PS P7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
PIC16F877
.
Brochage du circuit doscillation PIC16F877
Page 96
Programmation des Microcontroleurs (PIC)
EL MORNAN
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).
14.3 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 :
Page 97
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
Page 98
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
14.4 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
14.5 . Les mmoires du PIC 16F877 :
Les mmoires sont de trois types diffrents :
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.
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
Page 99
Programmation des Microcontroleurs (PIC)
EL MORNAN
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 LEPROM Interne :
Le pic 16F877contient galement la mmoire lectriquement effaable, rcrivable et stable. 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.
14.6 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.
14.7 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.
Page
100
Programmation des Microcontroleurs (PIC)
EL MORNAN
Figure : 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).
14.8 Les interruptions :
14-8- 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).
Page
101
Programmation des Microcontroleurs (PIC)
EL MORNAN
- 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)
14-8- 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.
14-8-3 Quest-ce quune interruption :
Imaginez une conversation normale. Chaque interlocuteur prend la parole quand vient son tour de parler.
Survient alors un vnement extrieur dont le traitement est urgent. Vous imaginez bien que votre
interlocuteur ne va pas attendre la fin de votre phrase pour vous signaler le danger. Il va donc vous
INTERROMPRE durant le cours normal de votre conversation. Afin de pouvoir TRAITER
IMMEDIATEMENT lEVENEMENT extrieur. Les interlocuteurs reprendront leur conversation o elle
en tait arrive, sitt le danger cart.
Et bien, pour les programmes, cest exactement le mme principe. Votre 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).
Page
102
Programmation des Microcontroleurs (PIC)
EL MORNAN
14-8-4 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 linstruction qui suit la dernire excute dans le programme principal.
Il va bien sr de soi que nimporte quel vnement ne peut pas dclencher une interruption. Il faut 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.
Page
103
Programmation des Microcontroleurs (PIC)
EL MORNAN
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.
14.9
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 :
Diviseur
20Mhz
5Mhz
4Mhz
2Mhz
1,25Mhz
333,3Khz
100ns
400ns
500ns
1s
1,6s
6s
400ns
1,6s
2s
4s
6,4s
24s
32
1,6s
6,4s
8s
16s
25,6s
96s
Osc RC
2-6s
2-6s
2-6s
2-6s
2-6s
2-6s
Page
104
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
Page
105
Programmation des Microcontroleurs (PIC)
EL MORNAN
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
ADRESL
B9
B8
B7
B6
B5
B4
B3
B2
B1
B0
La justification gauche procde bien videmment de la mthode inverse :
ADRESH
B9
B8
ADRESL
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 :
Page
106
Programmation des Microcontroleurs (PIC)
EL MORNAN
Tableau : le registre ADCON1
B7
ADFM
A/D result format select
B6
INUTILISE
lu comme 0
B5
INUTILISE
lu comme 0
B4
INUTILISE
lu comme 0
B3
PCFG3
Port Configuration control bit 3
B2
PCFG2
Port Configuration control bit 2
B1
PCFG1
Port Configuration control bit 1
B0
PCFG1
Port 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 (en fait,
vous verrez que nous nen avons que15)
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.
Page
107
Programmation des Microcontroleurs (PIC)
EL MORNAN
Tableau : le registre ADCON0 :
B7
ADCS1
A/D conversion Clock Select bit 1
B6
ADCS0
A/D conversion Clock Select bit 0
B5
CHS2
Analog Channel Select bit2
B4
CHS1
Analog Channel Select bit1
B3
CHS0
Analog Channel Select bit0
B2
GO/DONE
A/D conversion status bit
B1
Inutilis
lu comme 0
B0
ADON
A/D ON bit
14.10 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
Page
108