Email : HBMVIPH@hotmail.com
2009-2010
Sommaire de la formation
- Un peu d’historique.
- Définition d’un µP.
- Le séquenceur de µP.
- Le Micro-ordinateur.
- Les µC PIC chez Microchip.
- Architecture de la CPU « MID-RANGE ».
- Les modes d’adressage.
- Jeu d’instructions et leur codage.
- Organisation de la zone CODE, STACK & gestion des interruptions.
- La structure d’un fichier source en assembleur chez Microchip.
- Le PIC 16F84A.
- Synoptique de l’architecture PIC 16F84A.
- Brochage de circuit.
- Organisation de la zone DATA.
- Registres spéciaux.
- Périphériques de PIC 16F84A.
o Les ports E/S (PORTA et PORTB).
o L’EEPROM de 64 bytes.
o Le TIMER (TMR0)
o Le WDT et le mode mise en veille.
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Un peu d’historique :
L’apparition du µP est due à l’évolution de l’industrie électronique. Elle répond au
besoin d’un circuit intégré LSI (Large Scale Integration) ou VLSI (Very LSI).
Le concept du µP a été créé par la société INTEL. Cette société créée en 1968, était
spécialisée dans la conception et la fabrication des puces mémoires. A la demande de deux ses
clients, fabricants des calculatrices et de terminaux. INTEL étudia une unité de calcul
implémentée sur une seule puce. Ceci donna naissance en 1971 au premier µP le 4004 qui
était une unité de calcul de 4 bits fonctionnant à 108 KHz. Il résultait de l’intégration
d’environ de 2300 transistors.
Définition d’un µP :
Le µP est un ou plusieurs circuits LSI/VLSI qui réalisent des fonctions de traitement.
Dont le noyau de µP est le séquenceur.
Le séquenceur de µP :
C’est en ensemble de circuits logique séquentiel pour décoder une instruction puis
générer les différents signaux nécessaires pour exécuter cette dernière.
Dans ce qui suit, on va réaliser un séquenceur qui exécute l’opération de transfert entre 2
registres de N bits.
RD\ CS\
Reg A
WR\
N bits
RD\
Reg B
CS\
WR\
On appel ses signaux, les signaux du contrôle, ainsi que un bus commun entre le REGA et
REGB de N bits pour le transfert de données.
1
Formation sur les PIC 16Fxxx par : ATOUI Hamza
La question qui se pose est comment réaliser une logique de contrôle pour transférer le
contenue du REGA vers le REGB ?
Pour réaliser cette logique, il faut d’abord suivre l’évolution des signaux du contrôle de
chaque registre pour le transfert. On donne la table suivante :
D’après cette table, l’opération de transfert se fait sur 4 étapes. Donc la réalisation de ce
séquenceur nécessite un compteur. A chaque incrémentation, on exécute une ligne de la table
des signaux du contrôle.
Vcc
Le circuit de séquenceur :
R
D
E
C
O
Compteur D
E
U
R
Horloge Point de
Connexion
Entre la
RD\ RD\ Ligne et
CS\ WR\ CS\ WR\
La colonne
2
Formation sur les PIC 16Fxxx par : ATOUI Hamza
On conclure que le µP est un élément très important dans le développement Soft/Hard. Dont
la domaine d’application est illimité.
Le micro-ordinateur :
C’est une carte électronique composée de µP ou plusieurs, de circuits mémoires, et des
circuits E/S.
- le µP ou la CPU pour exécuter un traitement.
- Les circuits mémoires pour le stockage de données (Code, Data).
- Les circuits E/S pour réaliser des interfaces de manipulation du monde externe (HDD,
Clavier, Ecran, Souris, …).
Regardez l’architecture en général d’un micro-ordinateur de type VON NEUMAN dans la
figure suivante.
Horloge
DATA CODE
µP
(CPU) Bus système
E/S
On général les micro-ordinateur sont fabriqués pour résoudre des problèmes de grandes
complexités, mais pour des problèmes de moyennes et faibles complexités comment faire ?
Est ce que c’est pratique d’utiliser un micro-ordinateur pour les résoudre ?
Eh bien, ou est la solution ? La solution est de réaliser des micro-ordinateurs de taille réduite
dans un seul boîtier, qu’on appel mono-chip, constitué de CPU, de mémoires, et des E/S du
faible capacité. Ce mono-chip est appelé dans l’industrie par le nom « microcontrôleur ».
Les microcontrôleurs sont des micro-ordinateurs en version compactée très utilisée dans
l’industrie, ces circuits sont fabriqués par plusieurs sociétés comme INTEL, MOTOROLA,
ST, ATMEL, PHELIPS, PARALAXE et Microchip…
D’après cette introduction sur les µP et les micro-ordinateurs (µC), on va étudier seulement
les µC chez Microchip d’Arizona.
3
Formation sur les PIC 16Fxxx par : ATOUI Hamza
MICROCHIP
ICROCHIP est un fabricant de semi-conducteurs fondé en 1989 à partir d’une division de
GENEREL INSTRUMENTS. Microchip produit les microcontrôleurs PIC, des composants
radiofréquences, de gestion des batteries, des interfaces analogiques etc.
Et une CPU de type RISC (Reduce Instruction Set Computer). Tous les µC PIC de la série
12CÎ 18C ce base sur 1 de ces 3 CPUs de 8bits « BASE-LINE » « MID-RANGE »
« HIGH-END ».
Une simple question qui se pose est : pourquoi cette évolution ? Tous simplement, pour des
besoins demandés par le marché industriel « Traitement en temps réel, l’intégration d’un
RTOS préemptif (Preempted Real Time Operating System)…
4
Formation sur les PIC 16Fxxx par : ATOUI Hamza
128 bytes
W REG STATUS 2k x 14bits
Registre d’instruction
14
CODE
5
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Un ensemble de registres pour contrôler les interruptions (INTCON, PIE1 & 2, PIR1 & 2…),
un accumulateur sur 8bits « W reg », un registre d’état « STATUS »,un registre pointeur
« FSR File Select Register » sur 8bits avec un ensemble de 3 bits « RP0, RP1, IRP » pour
l’accès DATA, une U.A.L pour réaliser d’opérations logiques & arithmétiques sur 8bits, un
compteur programme « PC » sur 13 bits pour balayer un espace de 8k, un buffer PCLATH
utilisé pour le mode paginé code (on explique plus tard), et un registre d’instruction sur 14bits
pour la réception des instructions à partir de la zone CODE.
Mais dans le cas d’adressage direct & indirect le MID-RANGE fait une opération entre un
FILE « case mémoire de l’espace DATA » et le W reg.
Microchip utilise une simple astuce pour la sélection du mode d’adressage direct ou indirect
dans la zone DATA, dont l’algorithme est le suivant :
6
Formation sur les PIC 16Fxxx par : ATOUI Hamza
En résumé : le schéma général pour l’adressage direct et indirect dans la zone DATA
0 1
7bits d’adresse
dans l’instruction FSR
Bank0 Bank1 Bank2 Bank3
7 8
9 9
RP1 RP0 2 1 IRP
00 01 10 11
Code :
MOVLW 0x59 ; W Í 0x59
Adressage Direct :
Exemple 1 : Transfert de contenue de W reg vers le FILE d’adresse (0x30).
Code :
MOVWF 0x30 ; (0x30) Í W reg
0x30
W reg
Code :
MOVF 0x40,W ; W Í (0x40)
0x40
W reg
7
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Adressage Indirect : charger le FILE d’adresse (0x50) par la valeur 0x55 dont le mode
d’adressage est indirect.
Code :
MOVLW 0x50
MOVWF FSR Etape 1
FSR 0x50
W reg
0x55
N.B: vous remarquez que je n’ai pas utilisé les bits RP1, RP0 et IRP pour l’adressage direct et
indirect, tous court, on n’a pas étudié jusqu’à présent le jeu d’instructions et la structure de
registre STATUS.
8
Formation sur les PIC 16Fxxx par : ATOUI Hamza
La majorité des opérations réalisées par le MID-RANGE passe par le W reg et l’U.A.L affect
seulement 3 bits de STATUS sont : (C, DC, Z).
La structure de STATUS : ce registre contient les bits d’état de l’U.A.L, les bits de sélection
des banques DATA, et les bits d’état de µC.
9
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Chaque instruction de MID-RANGE est codée sur 14bits, ces instructions regroupées en 3
groupes selon le codage :
- Orienté mémoire (FILE).
- Orienté bit sur FILE.
- Orienté constante (valeur immédiate).
10
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Instructions de Transfert :
Groupe : MOVLW, MOVWF, MOVF.
Instructions Arithmétiques :
Groupe : ADDLW, ADDWF, SUBLW, SUBWF, DECF, INCF, DECFSZ, INCFSZ, COMF,
CLRW, CLRF.
11
Formation sur les PIC 16Fxxx par : ATOUI Hamza
L’instruction DECF : Décrémente un FILE et range le résultat dans la destination (le W reg
ou le FILE).
Syntaxe : DECF FILE, D
FILE -1 Î Destination.
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le
FILE).
Nombre de cycle : 1.
STATUS : Z.
L’instruction INCF : Incrémente un FILE et range le résultat dans la destination (le W reg
ou le FILE).
Syntaxe : INCF FILE, D
FILE +1 Î Destination.
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le
FILE).
Nombre de cycle : 1.
STATUS : Z.
12
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Instructions Logiques :
Groupe : ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF, RLF, RRF, SWAPF.
L’instruction ANDLW : Opération "ET" entre le contenu du registre W reg et une valeur
immédiate, le résultat dans W reg.
Syntaxe : ANDLW k
0≤ k ≤255.
k ‘ET’ W Î W.
Nombre de cycle : 1.
STATUS : Z.
13
Formation sur les PIC 16Fxxx par : ATOUI Hamza
L’instruction IORLW : Opération logique "OU" entre le registre W reg et une valeur
immédiate, le résultat dans le W reg.
Syntaxe : IORLW k
0≤ k ≤255.
k ‘OU’ W Î W.
Nombre de cycle : 1.
STATUS : Z.
L’instruction XORLW : Opération logique XOR (ou exclusif) entre le contenu de W reg et
une valeur immédiate, le résultat dans le W reg.
Syntaxe : XORLW k
0≤ k ≤255.
k ‘XOR’ W Î W.
Nombre de cycle : 1.
STATUS : Z.
14
Formation sur les PIC 16Fxxx par : ATOUI Hamza
L’instruction RLF : Rotation à gauche d’un FILE au travers du bit carry, le résultat va dans
la destination.
Syntaxe : RLF FILE, D
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le
FILE).
Nombre de cycle : 1.
STATUS : C Í Bit7 du FILE.
C 7 0
L’instruction RRF : Rotation à droite d’un FILE au travers du bit carry, le résultat va dans la
destination.
Syntaxe : RRF FILE, D
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le
FILE).
Nombre de cycle : 1.
STATUS : C Í Bit0 du FILE.
C 7 0
L’instruction SWAPF : Échange de quartet du poids faible et le quartet du poids fort d’un
FILE, le résultat dans la destination.
Syntaxe : SWAPF FILE, D
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le
FILE).
Nombre de cycle : 1.
STATUS : rien.
15
Formation sur les PIC 16Fxxx par : ATOUI Hamza
L’instruction BTFSC : Vérifier l'état du bit spécifié d’un FILE et sauter l'instruction suivante
si le bit = 0.
Syntaxe : BTFSC FILE, Bit
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
0≤ Bit ≤7.
Sauter si (FILE {Bit}=0) l’instruction suivante.
Nombre de cycle : 1 ou 2.
STATUS : rien.
L’instruction BTFSS : Vérifier l'état du bit spécifié d’un FILE et sauter l'instruction suivante
si le bit = 1.
Syntaxe : BTFSS FILE, Bit
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
0≤ Bit ≤7.
Sauter si (FILE {Bit}=1) l’instruction suivante.
Nombre de cycle : 1 ou 2.
STATUS : rien.
16
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Avant d’étudier ce groupe, il faut d’abord parler sur le registre compteur ordinal « PC ». Ce
registre de longueur 13 bits (balayage de 8k emplacements), et d’après l’architecture de
« MID-RANGE » ce dernier divisé en 2 registres (PCL et PCH) avec le PCL est adressable
par le bus interne de la zone DATA (vous pouvez manipuler comme un FILE), mais le PCH
est adressable à partir du buffer PCLATH seulement les 5bits du poids faible par ce que le
PCH est un registre de 5bits.
- Transfert du résultat de l’U.A.L vers le PCL et au même temps, charger le PCH par les
5bits du poids faible de PCLATH dans les bits 8Î12 du PC.
- N’oublie pas que n’importe quelle modification dans le PC s’implique un changement
de chemin d’exécution du programme en cours.
Vous remarquez que ADR est de 11bits Î un espace de 2k (une page du code), mais pour
faire un saut vers une autre page comment faire ? D’après le schéma de la figure au dessus, on
distingue le mécanisme réel de l’exécution d’instruction GOTO par : le chargement des bits
17
Formation sur les PIC 16Fxxx par : ATOUI Hamza
0Î10 du PC par l’adresse indiquée par l’instruction, et le reste (bits 11Î 12) par les bits
3Î4 de PCLATH.
Eh bien, avant de faire un saut vers une adresse, il faut d’abord sélectionner la page du saut
par la modification des bit 3Î4 de PCLATH (00 : page0, 01 : page1, 10 : page2, 11 :page3).
Nombre de cycle : 2.
STATUS : rien.
L’instruction CALL : appel d’un sous-programme (soit une procédure ou une fonction).
Syntaxe : CALL ADR
ADR est une valeur immédiate sur 11bits.
La modification de PC est identique comme l’instruction GOTO.
Les instructions de retour sous programme RETURN, RETLW: ces instructions sont
utilisées pour compléter un sous-programme (ajouter à la fin d’un sous-programme) comme
indiquée la figure au dessus.
Le mécanisme d’exécution de l’instruction RETURN est le retour vers le programme
principal qu’on a quitté précédemment par l’instruction CALL est le chargement du PC par le
TOS (Top Of Stack) et décrémente le pointeur de la pile par 1. Mais pour RETLW, le MID-
RANGE fait le même travail que RETURN plus renvoyer une valeur immédiate de 8bits
présentée par l’instruction dans le W reg.
Syntaxe : RETURN
RETLW k ; 0≤ k ≤255.
Nombre de cycle : 2.
STATUS : rien.
18
Formation sur les PIC 16Fxxx par : ATOUI Hamza
TOS Í PC+1
L’adresse de retour
Main Program
----------
SOMME
----------
----------
----------
----------
----------
----------
----------
----------
PC Î CALL SOMME
----------
PC+1 Î ----------
----------
----------
----------
----------
RETURN
----------
PC Í TOS
L’instruction RETFIE : cette instruction est utilisée pour compléter le ISR (Interrupt Service
Routine) (ajouter à la fin de l’ISR).
Le travail a réalisé par l’instruction RETFIE est le retour vers le programme principal qu’on a
quitté précédemment par :
- Le chargement du PC par le TOS (Top Of Stack).
- Décrémente le pointeur de la pile par 1.
- Mettre le GIEÍ1 (Autorisation de la réception d’une nouvelle interruption par ce que
le branchement vers le ISR met le GIEÍ0 pour ne pas gêner le traitement de
l’interruption en cours).
TOS Í PC+1
Main Program
GIE Í 0
----------
ISR (vecteur 4)
----------
----------
Interruption ---------- 2
----------
----------
----------
----------
----------
1 PC Î SUBLW 0x50
----------
PC+1 Î ----------
----------
----------
----------
---------- 3
RETFIE
----------
PC Í TOS
GIE Í 1
Nombre de cycle : 2.
STATUS : rien.
19
Formation sur les PIC 16Fxxx par : ATOUI Hamza
20
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 1 :
Ecrire un programme qui fait le travail suivant :
- Mettre dans le FILE d’adresse (0x30) la valeur 0x55.
- Mettre dans le FILE d’adresse (0x40) la valeur 0x34.
- Calculer la somme de ces 2 FILES puis ranger le résultat dans le FILE d’adresse
(0x50).
Exercice 2 :
Ecrire un programme qui initialise la zone mémoire (0x30Î0x40) dans la banque 2 par zéro.
Exercice 3 :
Ecrire un programme qui calcul la parité arithmétique de FILE (0x55), s’il est pair, mettre
dans le FILE (0x30) dans la banque 3 le caractère ‘P’, sinon mettre le caractère ‘I’.
Exercice 4 :
Ecrire un programme qui calcul la somme de la zone mémoire (0x50Î0x60) et mettre le
résultat dans le FILE d’adresse (0x10) situé à la banque 1.
Exercice 5 :
Ecrire un programme qui fait la multiplication par 2 de tous les FILES de (0x25Î0x35) dans
la banque2.
Exercice 6 :
Ecrire un programme qui fait la recherche de la première occurrence de la valeur 0x00 dans la
zone mémoire (0x60Î0x70) et mettre l’adresse dans le FILE (0x10).
Exercice 7 :
Ecrire un sous programme qui réalise la multiplication de 2 FILES (M1 et M2) et mettre le
résultat dans les 2 FILES (H et L) par ce que la multiplication de 2 FILES de 8bits donne un
résultat sur 16bits.
M1*M2 Î (HL)
Avec M1 : le FILE1, M2 : le FILE2, HL : 2 FILES de résultat, dont l’algorithme est le
suivant :
HÍ0;
L Í M1 ;
Compteur Í8 ;
Tant que (Compteur >0)
Début
Si ( L {0} = 1 ) alors
H Í H+M2 ;
FinSi.
Décalage à droite de la paire (HL) ;
Compteur Í Compteur -1 ;
FinTantQue.
21
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 8 :
Ecrire un sous programme qui réalise la division entre 2 FILES et mettre le quotient dans un
FILE et le reste dans un autre FILE.
A B
R Q
RÍ0;
QÍA;
Compteur Í 8 ;
Tant que (Compteur > 0)
Début
Décalage à gauche de la paire (RQ) ;
Si (R < B) alors
Q {0} Í 0 ;
Sinon
R Í R-B ;
Q {0} Í 1 ;
FinSi.
Compteur Í Compteur-1 ;
FinTantQue.
22
Formation sur les PIC 16Fxxx par : ATOUI Hamza
23
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Gestion des interruptions : le MID-RANGE gère les interruptions générées par leurs
périphériques. La gestion d’une interruption sous MID-RANGE se fait par :
- compléter l’exécution de l’instruction en cours.
- Vérifier si GIE = 1 (Global Interrupt Enable).
- Si le cas, empiler l’adresse de retour dans le TOS.
- Mettre GIE Í 0 pour ne pas gêner le traitement de l’interruption en cours.
- Brancher vers le vecteur numéro 4 (0x004), dans cette adresse en trouve le début de
l’ISR.
TOS Í PC+1
Main Program
GIE Í 0
----------
ISR (vecteur 4)
Interruption ----------
----------
Si GIE=1 ---------- 2
----------
----------
----------
----------
----------
1 PC Î SUBLW 0x50
----------
PC+1 Î ----------
----------
----------
----------
---------- 3
RETFIE
----------
PC Í TOS
GIE Í 1
Remarque : vous remarquez que à chaque fois si on a une demande d’interruption le MID-
RANGE branche toujours vers le même vecteur (vecteur 4) à l’adresse CODE 0x004.
Comment identifiez le périphérique qui génère cette demande d’interruption et exécutez le
ISR correspondant ?
24
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Begin ISR
No
Yes ISR RB
RBIF=1
No
No
No
End ISR
25
Formation sur les PIC 16Fxxx par : ATOUI Hamza
; partie CODE
ORG Reset
GOTO MAIN
ORG ISR
RETFIE
MAIN
------
------
------
END
Maintenant, on passe vers la création d’un projet sous MPLAB IDE. A partir de la version
6.xx les choses sont simplifiées, on suit les étapes suivantes pour le créer (ver 8.02):
- double click sur l’icône de logiciel MPLAB IDE sur votre bureau.
- Aller vers le menu ProjectÎProject Wizard…
- elle apparaisse la fenêtre « Project Wizard » puis cliquer sur le bouton « suivant ».
- Sélectionner le µC « par exemple le PIC16F84 » puis cliquer sur le bouton « suivant ».
- Sélectionner le langage de programmation « dans ce cas, on choisi Microchip
MPASM Toolsuite » puis cliquer sur le bouton « suivant ».
26
Formation sur les PIC 16Fxxx par : ATOUI Hamza
- Cliquer sur le bouton « Browse… », nommer votre projet, puis cliquer sur le bouton
« suivant ».
- Cliquer sur le bouton « suivant ».
- Cliquer sur le bouton « Terminer ».
- Aller vers le menu ViewÎProject (elle apparaisse la fenêtre de votre projet dans
l’interface principale de MPLAB IDE).
- Aller vers le menu FileÎNew (elle apparaisse une fenêtre blanche pour écrire le
fichier source en assembleur MPASM).
- Après l’écriture du code source, sauvegarder ce dernier sous l’extension « .asm » dans
le même répertoire que le projet.
- Aller vers la fenêtre de votre projet puis cliquer sur menu « Source Files » par le click
droite de la souris.
- Il apparaisse un sous menu, cliquer sur « Add Files… ».
- Sélectionner votre source sous l’extension « .asm ».
- Sauvegarder le projet par le menu ProjectÎSave Project.
- Compiler le projet par le menu ProjectÎBuild All.
- S’il y a des erreurs, corriger les puis répéter l’étape de compilation.
27
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Le PIC 16F84A :
C’est un µC de la série 16Fxxx avec un noyau de type MID-RANGE, et des fonctionnalités
E/S qui permettent de réaliser des montages avec un minimum de composants externes.
D’après le DATA SHEET, on distingue particulièrement :
- une CPU de type MID-RANGE (35 instructions, codage sur 14bits).
- Partie CODE de 1Kx14bits (1024 instructions = ½ page).
- Partie DATA composée de 2 banques, seulement 68 bytes sont utilisées comme RAM.
- Un ensemble de périphériques sont :
o 2 ports E/S (PORTA de 5 lignes, PORTB de 8 lignes).
o TIMER de 8 bits.
o EEPROM de 64 bytes.
o Un chien de garde (WDT).
- compatible avec les PIC 16CR84, 16C84, 16F84.
P TMR0 (8bits) P
O O
R
EEPROM R
5 T WDT 64 bytes T 8
A B
Brochage de circuit :
28
Formation sur les PIC 16Fxxx par : ATOUI Hamza
29
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Registres spéciaux :
Le PIC 16F84A a 15 registres spéciaux situés dans la mémoire des données (Data RAM).
30
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Le PORTA : est port d’E/S possède 5 lignes, configurable par le registre spécial « TRISA »,
ce dernier responsable sur la direction des lignes (TRISA {i} = 1 Î la ligne en entrée,
TRISA {i} = 0 Î la ligne en sortie), seule les 5bits du poids faible sont utilisés.
Exemple de configuration :
RA0ÎRA1 en sortie.
RA2ÎRA4 en entrée.
Dans ce cas le TRISA sera effectué par la valeur 0x1C.
N.B : à partir de la table des registres spéciaux, le TRISA situé à la banque1Î il faut passer
vers cette banque avant d’effectuer ce registre.
Code :
; Passage vers la banque 1
BSF STATUS, RP0
; Chargement de TRISA par la valeur 0x1C
MOVLW 0x1C
MOVWF TRISA
Vous pouvez configurer les pins RA0ÎRA3 soit en entrée ou en sortie sans aucun problème
à la particularité de la pin RA4, par ce que cette ligne est configurée en drain ouvert et en plus
utilisée comme entrée horloge externe de module TMR0, comme indique la figure suivante :
31
Formation sur les PIC 16Fxxx par : ATOUI Hamza
La broche RA4 possède une sortie de type drain ouvert. Cela veut dire qu'elle ne peut pas
fournir de courant. Par contre, elle peut en consommer :
Le PORTB : est port d’E/S possède 8 lignes, configurable par le registre spécial « TRISB »,
ce dernier responsable sur la direction des lignes (TRISB {i} = 1 Î la ligne en entrée,
TRISB {i} = 0 Î la ligne en sortie), avec une résistance de PULL-UP à chaque ligne du
PORTB et activable par le bit7 « RBPU\ » de registre « OPTION_REG », ces résistances de
PULL-UP sont désactivées si les lignes en sortie. Ces dernières sont désactivées
automatiquement l’or d’un Power-On Reset.
32
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Les pins RB4ÎRB7 génère une interruption l’or d’un changement d’état d’une de ces lignes
par rapport à la dernière lecture du PORTB, le flag qui indique cette interruption est le bit0
« RBIF » de registre « INTCON ». Cette interruption est générée si ces lignes configurées en
entrée, avec une activation des résistances de PULL-UP pour la stabilité de l’état des lignes.
La pin RB0/INT est une autre source d’interruption, déclanche sur front mentant ou
descendant selon le bit6 « INTEDG » de registre « OPTION_REG », le flag qui indique cette
interruption est le bit1 « INTF » de registre « INTCON ». Toujours si la ligne est configurée
en entrée.
33
Formation sur les PIC 16Fxxx par : ATOUI Hamza
L’ EEPROM de 64 bytes :
C’est une mémoire accessible en lecture/écriture. Cette mémoire est implantée en d’hors de la
zone DATA RAM et adresser séparément par leurs registres spéciaux. Ces registres sont :
- Le registre « EECON1 » situé à la banque 1.
- Le registre « EECON2 » situé à la banque 1 (registre virtuel).
- Le registre « EEADR » situé à la banque 0.
- Le registre « EEDATA » situé à la banque 0.
Le registre « EEADR » est de 8bits utilisé pour adresser un emplacement dans l’EEPROM
parmi 64 emplacements (seulement les 6bits du poids faible sont utilisés).
Synoptique de l’EEPROM :
E
E
A
D
R 6
Bloc de 64 bytes.
De l’adresse
0x00 Î 0x3F.
E
E
D 8
A
T
A
8 Logique du contrôle de
l’EEPROM
EECON1 EECON2
34
Formation sur les PIC 16Fxxx par : ATOUI Hamza
35
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Opération d’écriture d’un byte dans l’EEPROM : toujours, il faut passer par un ensemble
des étapes pour la faire.
36
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Le TIMER de 8bits (TMR0): est un TIMER libre (Free Timer) contient les caractéristiques
suivantes :
- 8 bits Temporisateur/Compteur.
- Accessible en Lecture/Ecriture.
- Pré-diviseur (PRESCALER) programmable sur 8 bits.
- Source horloge sélective Interne/Externe.
- Génère une interruption l’or de débordement, passage de 0xFF vers 0x00.
- Front d’incrémentation sélectif pour la source externe.
Synoptique du TMR0 :
Modes de fonctionnement :
Le module TME0 fonctionne en 2 modes, mode Temporisateur et mode Compteur.
Mode Compteur : Pour configurer ce mode, il faut mettre T0CS Í 1, ce mode utilise la
ligne RA4/T0CKI comme source (il faut configurer cette ligne en entrée dans TRISA).
On distingue que, je peut diviser la fréquence source sur 2, 4, 8, 16, 32, 64, 128 et 256, et
d’après la synoptique du module TMR0, on remarque que ce pré-diviseur n’est pas accessible
soit en lecture ou en écriture, la CPU toute seule fait un effacement automatique du pré-
diviseur dans le cas si le registre TMR0 est une destination par l’UAL (cette limite va créer un
problème par la suite), ce pré-diviseur est composant commun entre le TMR0 et le WDT.
37
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Compteur de 8 bascules
Source
1
8 0
Mux 8Î1
PS2/PS0
3
PSA
38
Formation sur les PIC 16Fxxx par : ATOUI Hamza
39
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Le mode mise en vielle : pour entrer dans cette situation, on exécute l’instruction « SLEEP »
qui fait le travail suivant :
- WDT Í 0.
- Post-diviseur Í 0.
- TO\ Í 1.
- PD\ Í 0.
- Arrêt l’horloge système.
Cette situation arrête le µC et leurs périphériques fonctionnant sous l’horloge système, et pour
sortir de cette situation, il faut réceptionner un événement indépendant de l’horloge système
comme :
- Un reset par la ligne MCLR\.
- Débordement de WDT.
- Déclanchement d’une interruption par un périphérique.
- après un reset sur la ligne MCLR\, la CPU exécute l’instruction située à l’adresse
0x000.
- Après un TIME-OUT (débordement WDT), la CPU exécute l’instruction qui suit
l’instruction « SLEEP ».
- Après une interruption, on a 2 situations :
o Si GIE = 0, la CPU exécute l’instruction qui suit l’instruction « SLEEP ».
o Si GIE = 1, exécute l’instruction qui suit l’instruction « SLEEP » puis branche
vers le vecteur d’interruption situé à l’adresse 0x004.
Remarque très importante : le mode mise en veille est impossible si GIE=0 et tous les flag
et autorisateurs d’interruptions égal à 1 avant l’exécution de l’instruction « SLEEP »,
la CPU exécute « SLEEP » comme « NOP » puis exécute l’instruction qui suit l’instruction
« SLEEP ».
40
Formation sur les PIC 16Fxxx par : ATOUI Hamza
La série de TP N° :1
Exercice 1 :
Soit le montage suivant :
1- Ecrire un programme qui affiche l’état de DIPSW sur le PORTA dans les 4 Leds relies
aux PORTB (RB0:RB3).
2- Ecrire le même programme de la question 1 avec l’affichage de l’état inverse de
DIPSW dans le reste du PORTB (RB4:RB7).
41
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 2 :
Soit le montage suivant :
42
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 3 :
Soit le montage suivant :
Ecrire un programme qui réalise un compteur M10 chaque appuyer sur BP1 et un décompteur
M10 chaque appuyer sur BP2.
43
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 4 :
Réaliser le montage & écrire le programme qui fait le travail suivant :
- Initialiser le FILE d’adresse (0x30) par zéro.
- A chaque impulsion sur RB0, le ISR incrémente cet FILE puis affiche son contenue
sur les 8 Leds relies aux pins du PIC.
Exercice 5 :
Réaliser le montage & écrire le programme qui fait le travail suivant :
- Initialiser le TMR0 par la valeur 0xFA.
- Compter les impulsions arrivées de la ligne RA4 par le TMR0, et afficher le contenue
du TMR0 sur le PORTB (8 Leds).
- A chaque débordement, le ISR initialise le TMR0 par la valeur 0xFA, puis change le
Pré-diviseur par : 1:1 Î 1:2 Î 1:4 Î 1:1 …
Exercice 6 :
Réaliser un compteur M10 (affichage sur DIGIT) avec une temporisation chaque 200ms se
fait par le TMR0.
Exercice 7 :
On donne le montage de jeu de lumière suivant :
Utiliser le TMR0, l’ EEPROM, & les PORTA, B pour réaliser le menu suivant :
DIPSW2 Travail a effectué
00 Clignement de toutes les Leds à chaque 300ms
01 Défilement de droite à gauche à chaque 300ms
10 Basculement 4 Leds par 4 à chaque 300ms
11 Défilement de l’intérieur vers l’extérieur à chaque 300ms
44
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Exercice 8 :
Réaliser un compteur BCD M10000 (0Î9999) avec l’incrémentation se fait chaque
impulsion sur RB0 dans l’ ISR (manipulation de l’affichage multiplexé).
Exercice 9 :
Réaliser un décodeur d’un clavier matriciel 4x4 et afficher la touche décodée sur un ensemble
de 4 Leds.
- Dans le mode normal.
- Dans le mode économique.
Exercice 10 :
Relais programmable à base de PIC
START Reprogrammer
M1
L1
M2
Relais programmable
À base de PIC
T1 Mémoriser
T2
2
Sortie relais
45
Formation sur les PIC 16Fxxx par : ATOUI Hamza
Fonctionnement :
- Si le bouton « Reprogrammer » est appuyé le PIC est donc dans le mode
programmation, ce dernier attend une impulsion sur le bouton « Mémoriser » pour
sauvegarder la fonction et la temporisation sélectionnées par le clavier (M2M1T2T1),
la LED « L1 » doit allumer « 200ms » pour indiquer la mémorisation du mode de
relais demandé dans l’ EEPROM de PIC, après la programmation de relais, le PIC
attend une impulsion sur le bouton « START » pour déclancher le relais.
- Si le bouton « Reprogrammer » n’est pas appuyé, le PIC déclanche le mode mémorisé
dans l’ EEPROM.
Les fonctions et les temporisations possibles par le clavier :
Temporisation
Impulsion START
Minuterie
Temporisation
Impulsion START
Retardateur
Temporisation
Impulsion START Impulsion START
Télé- rupteur
Temporisation
Impulsion START
Générateur
46