Vous êtes sur la page 1sur 48

Centre de Formation **HBM Corporation**

Formation sur les µC PIC 16Fxxx chez


Microchip d’Arizona

Support de formation première partie (ver 1.01)

Pour les spécialités : Electronique & Micro-Informatique.


Informatique industrielle.

Par : Mer ATOUI Hamza


Magistère en TELECOM & Traitement numérique,
Ingénieur en électronique option contrôle industriel.

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

En effet, la technologie permet d’intégrer des centaines de milliers de transistors sur


une puce de silicium de quelques mm2.

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.

Synoptique des registres :

RD\ CS\
Reg A
WR\

N bits

RD\
Reg B
CS\
WR\

Description des signaux :


RD\ : signal de lecture.
WR\ : signal d’écriture.
CS\ : signal de sélection registre.

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 :

Temps Reg A Reg B Commentaires


CS\ RD\ WR\ CS\ RD\ WR\
T 1 1 1 1 1 1 Etat de repos
T+1 0 1 1 1 1 1 Activer le reg A
T+2 0 0 1 1 1 1 Lecture de reg A
T+3 0 0 1 0 1 1 Activer le reg B
T+4 0 0 1 0 1 0 Ecriture dans le reg B

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

Vers les signaux Vers les signaux


de contrôle de Reg A de contrôle de Reg B

A chaque incrémentation, le décodeur sélectionne une ligne de contrôle. On appel l’ensemble


de lignes de contrôle le micro code de l’instruction de transfert de REGA vers REGB.

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

Question : est ce que le µP tout seule résoudre un problème ?


Réponse : tout simplement, c’est impossible par ce que le µP est un composent qui sert à
réaliser un micro-ordinateur.

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.

Les µC PIC chez Microchip :


Les µC PIC sont basés sur une architecture de type HARVARD, il y a une séparation
entre les bus de la partie mémoire CODE et DATA comme indique cette figure :

DATA CPU CODE

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

Dans cette formation, on va étudier la CPU « MID-RANGE » de la série 16Fxxx.

4
Formation sur les PIC 16Fxxx par : ATOUI Hamza

Architecture de la CPU « MID-RANGE » :

DATA CPU STACK


7 8 level
Stack
128 bytes
PC
9 RP0 RP1
M 9 2 PCH PCL
U
X 13
IRP
9 1 PCLATH
2k x 14bits
128 bytes
FSR
8 8
8
2k x 14bits
8 INTCON PIE2
8
PIE1 PIR1, 2
128 bytes
Registres des interruptions
2k x 14bits
U.A.L Unité de décodage et
3 3 De contrôle
8

128 bytes
W REG STATUS 2k x 14bits
Registre d’instruction
14

CODE

5
Formation sur les PIC 16Fxxx par : ATOUI Hamza

On remarque facilement l’architecture de type HARVARD sur la CPU « MID-RANGE ». La


partie CODE a un espace de 8k x 14bits segmentée en 4 pages de 2k chacune ; La partie
DATA a un espace de 512 x 8bits segmenté en 4 banques de 128 chacune ; et une PILE
« STACK » de 8 niveaux contrôler par la CPU.

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.

Les modes d’adressage :


Le MID-RANGE utilise 3 modes d’adressage sont :
- Adressage immédiat.
- Adressage direct.
- Adressage indirect.
Dans l’adressage immédiat le MID-RANGE fait une opération de W reg avec une constante
sur 8bits ou le transfert d’une constante sur 11bits vers le PC.

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.

On distingue à partir de l’architecture MID-RANGE que ce µP utilise un bus d’adresse de


7bits à partir de registre d’instruction avec les 2bits RP0, RP1 de STATUS pour réaliser un
bus l’adresse de 9bits d’un FILE dans la zone DATA (adressage direct), et un autre chemin
d’adressage par le FSR et le bit IRP de STATUS pour réaliser le même bus de 9bits
(adressage indirect).

D’après le jeu d’instruction de MID-RANGE, ce µP utilise le mode d’adressage direct, Eh


bien, comment sélectionnez l’autre mode ‘indirect’ ?

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 :

Si les 7bits d’adresse dans l’instruction ≠ 0 alors


Le bus d’adresse FILE de 9bits =
RP1 RP0 7bits d’adresse dans l’inst

Sinon (les 7bits d’adresse dans l’instruction = 0)


Le bus d’adresse FILE de 9bits =
IRP 8bits de registre FSR
Fin-Si.

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

Exemple sur les modes d’adressage :

Adressage Immédiat : chargement de W reg par la constante 0x59.

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

Exemple 2 : Transfert de contenue de FILE d’adresse (0x40) vers le 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.

Cet exercice se fait en 2 étapes :


1- On met l’adresse de FILE dans le registre FSR (pointeur mémoire).
2- On utilise l’adresse 0x00 pour l’opération de transfert ou le registre virtuel « INDF »
indiqué par Microchip par ce que INDF = 0x00.

Code :
MOVLW 0x50
MOVWF FSR Etape 1

MOVLW 0x55 Etape 2


MOVWF INDF

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

Jeu d’instructions & leur codage :


Le fonctionnement de MID-RANGE est de type RISC à 35 instructions ; elle est constituée de
3 entités :
- l’U.A.L et le registre STATUS.
- Le W reg « Accumulateur ».
- La RAM « FILE registers ».

Schéma fonctionnel de l’unité d’exécution de MID-RANGE :

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.

IRP : bit de sélection de banque mémoire dans le mode d’adressage indirect.


- 1 : banque 2, 3.
- 0 : banque 0, 1.
RP1 :RP0 : bits de sélection de banque mémoire dans le mode d’adressage direct.
- 11 : banque 3.
- 10 : banque 2.
- 01 : banque 1.
- 00 : banque 0.
TO\ : Time-out bit.
PD\ : Power-down bit.
Z: le flag zéro de l’U.A.L
- 1 : le résultat de l’opération est nul.
- 0 : le résultat différent de zéro.
DC : le flag Digit-carry ou demi-retenue. Après une opération d’addition ou soustraction ce
flag positionne s’il y a un débordement sur les 4 bits du faible.
C : le flag carry ou retenue. Après une opération d’addition ou soustraction ce flag positionne
s’il y a un débordement sur 8bits.

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

Mais selon la fonction, on a 5 groupes :


- Transfert : MOVLW, MOVWF, MOVF.
- Arithmétique : ADDLW, ADDWF, SUBLW, SUBWF, DECF, INCF, DECFSZ,
INCFSZ, COMF, CLRW, CLRF.
- Logique : ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF, RLF, RRF,
SWAPF.
- Orienté bit : BCF, BSF, BTFSC, BTFSS.
- Contrôle : GOTO, CALL, RETFIE, RETLW, RETURN, CLRWDT, NOP, SLEEP.

10
Formation sur les PIC 16Fxxx par : ATOUI Hamza

Instructions de Transfert :
Groupe : MOVLW, MOVWF, MOVF.

L’instruction MOVLW : Charge une constante de 8bits dans le registre W reg.


Syntaxe : MOVLW k
0≤ k ≤255.
Nombre de cycle : 1.
STATUS : rien.

L’instruction MOVWF : Charge le registre W dans un FILE.


Syntaxe : MOWWF FILE
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
Nombre de cycle : 1.
STATUS : rien.

L’instruction MOVF : Copier le FILE dans une destination.


Syntaxe : MOVF 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 lui même).
Nombre de cycle : 1.
STATUS : Z.

Instructions Arithmétiques :
Groupe : ADDLW, ADDWF, SUBLW, SUBWF, DECF, INCF, DECFSZ, INCFSZ, COMF,
CLRW, CLRF.

L’instruction ADDLW : Additionner le registre W et une valeur immédiate, la somme est


stockée en W reg.
Syntaxe : ADDLW k
0≤ k ≤255.
k + W Î W.
Nombre de cycle : 1.
STATUS : C, DC, Z.

L’instruction ADDWF : Additionner le registre W reg et un FILE, la somme est stockée


dans la destination (le W reg ou le FILE).
Syntaxe : ADDWF FILE, D
FILE + W Î 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 : C, DC, Z.

11
Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction SUBLW : Soustraction entre une valeur immédiate et le registre W reg.


Syntaxe : SUBLW k
0≤ k ≤255.
k - W Î W.
Nombre de cycle : 1.
STATUS : C, DC, Z.

L’instruction SUBWF : Soustraire le contenu du registre W reg du contenu du FILE, résultat


dans la destination (le W reg ou le FILE).
Syntaxe : SUBWF FILE, D
FILE - W Î 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 : C, DC, Z.

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.

L’instruction DECFSZ : Décrémente un FILE et sauter l’instruction suivante si la


destination = 0.
Syntaxe : DECFSZ FILE, D
FILE -1 Î Destination puis sauter l’instruction suivante si la destination = 0.
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 ou 2.
STATUS : rien.

12
Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction INCFSZ : Incrémente un FILE et sauter l’instruction suivante si la destination


= 0.
Syntaxe : INCFSZ FILE, D
FILE +1 Î Destination puis sauter l’instruction suivante si la destination = 0.
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 ou 2.
STATUS : rien.

L’instruction COMF : Stocke dans la destination le complément à 1 de FILE.


Syntaxe : COMF FILE, D
FILE\ Î Destination. (Inversion de tous les bits de FILE).
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 CLRW : Efface le contenu du registre W reg.


Syntaxe : CLRW
0 Î W reg.
Nombre de cycle : 1.
STATUS : Z = 1.

L’instruction CLRF : Efface le contenu du FILE.


Syntaxe : CLRF FILE
0 Î FILE.
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
Nombre de cycle : 1.
STATUS : Z = 1.

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 ANDWF : Opération "ET" entre le contenu du registre W et un FILE, le


résultat dans la destination.
Syntaxe : ANDWF FILE, D
FILE ‘ET’ W Î 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 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 IORWF : Opération "OU" entre le contenu du registre W et un FILE, le


résultat dans la destination.
Syntaxe : IORWF FILE, D
FILE ‘OU’ W Î 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 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.

L’instruction XORWF : Opération "XOR" entre le contenu du registre W et un FILE, le


résultat dans la destination.
Syntaxe : XORWF FILE, D
FILE ‘XOR’ W Î 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.

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

Les instruction Orienté bit :


Groupe : BCF, BSF, BTFSC, BTFSS.

L’instruction BCF : Efface le bit spécifié d’un FILE.


Syntaxe : BCF FILE, Bit
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
0≤ Bit ≤7.
FILE {bit} Í 0.
Nombre de cycle : 1.
STATUS : rien.

L’instruction BSF : Positionne le bit spécifié d’un FILE à 1


Syntaxe : BSF FILE, Bit
FILE est une adresse sur 7 bits (128 emplacements possible –banque-).
0≤ Bit ≤7.
FILE {bit} Í 1.
Nombre de cycle : 1.
STATUS : rien.

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

Les instructions de contrôle :


Groupe 1: GOTO, CALL, RETURN, RETLW, RETFIE.

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.

Dans la manipulation de PCL comme destination le « MID-RANGE » réalise l’opération


suivante :

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

L’instruction GOTO : Branchement inconditionnel à l’adresse présentée par l’instruction.


Syntaxe : GOTO ADR
ADR est une valeur immédiate sur 11bits.
Le PC sera modifie par la façon suivante :

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.

Mais, dans cette instruction le MID-RANGE exécute les opérations suivantes :


- sauvegarde l’adresse de retour (PC+1) dans le TOS (Top Of Stack) de la pile système
de 8 niveaux et le pointeur de la pile incrémente de 1.
- Puis sauter vers l’adresse indiquée par l’instruction.
Nombre de cycle : 2.
STATUS : rien.
TOS Í PC+1
Main Program L’adresse de retour
----------
SOMME
----------
----------
----------
----------
----------
----------
----------
----------
PC Î CALL SOMME
----------
PC+1 Î ----------
----------
----------
----------
----------
RETURN
----------

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

Groupe 2 : NOP, CLRWDT, SLEEP.

L’instruction NOP : aucune opération.


Syntaxe : NOP
Nombre de cycle : 1.
STATUS : rien.

L’instruction CLRWDT : Réinitialise le temporisateur du chien de garde.


Syntaxe : CLRWDT
Nombre de cycle : 1.
STATUS : TO\, PD\.

Après l’exécution de cette instruction le MID-RANGE fait le travail suivant :


- WDT Í 0.
- Prescaler WDT Í 0.
- TO\ Í 1.
- PD\ Í 1.

L’instruction SLEEP : Mise en veille du microcontrôleur (Power Down mode).


Syntaxe : SLEEP
Nombre de cycle : 1.
STATUS : TO\, PD\.

Après l’exécution de cette instruction le MID-RANGE fait le travail suivant :


- WDT Í 0.
- Prescaler WDT Í 0.
- TO\ Í 1.
- PD\ Í 0.
- Arrête l’oscillateur du microcontrôleur.

20
Formation sur les PIC 16Fxxx par : ATOUI Hamza

La série des exercices N° :1

But : manipulation des modes d’adressage & le jeu d’instructions du MID-RANGE.

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

Organisation de la zone CODE, STACK & gestion des interruptions :


Si on rappel bien l’architecture de MID-RANGE, la zone CODE est un bloc mémoire
relié à la CPU par un bus d’adresse de 13bits et un bus de données de 14bits (la taille d’une
instruction), et le zone STACK (la pile) est une mémoire de 8 niveaux, chaque niveau a une
taille de 13bits, la CPU utilise cette pile pour empiler et dépiler les adresses de retour a
chaque fois qu’on a un appel d’un sous programme ou un traitement d’une interruption, cette
zone est contrôler par la CPU seulement, on n’a pas d’instructions de manipulation de pile
comme le µP 8086 chez INTEL (PUSH, POP).

Microchip appel un emplacement mémoire dans la zone CODE par le nom


« vecteur », un vecteur porte une instruction complète (OPCODE & OPERANDES). Cette
zone est configurée par 2 vecteurs essentiels, le vecteur de RESET à l’adresse 0x000 (le
premier emplacement), et le vecteur d’interruption à l’adresse 0x004 (vecteur numéro 4).

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.

Le retour vers le programme interrompu précédemment se fait par l’instruction RETFIE


située à la fin de l’ ISR, cette instruction exécute le travail suivant :
- mettre GIEÍ 1 pour donne la main à une autre demande d’interruption.
- Dépiler l’adresse de retour à partir du TOS dans le PC.

Comme indique la figure suivante :

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 ?

Pour répondre à cette question, on revient à l’ensemble de registres d’interruptions dans le


MID-RANGE, leur nombre augmente et diminue selon le nombre de périphériques intégrés
dans le µC, ces registres contient les bits d’autorisation de la demande d’interruption et les
bits indicateurs d’interruptions (flag). Le registre le plus important est le INTCON, la
structure de ce dernier différent d’un µC à l’autre, et le bit le plus important dans ce registre
est le bit 7 GIE (Global Interrupt Enable).

24
Formation sur les PIC 16Fxxx par : ATOUI Hamza

On prend l’exemple de PIC16F84, ce µC gère 4 sources d’interruptions sont :


- débordement du TIMER0.
- Changement de l’état de la ligne RB0/INT.
- Fin de l’écriture dans l’EEPROM.
- Changement d’état des pins RB4ÎRB7.
Les 2 registres responsables sur les bits d’autorisation et flag sont : INTCON, EECON1. Dont
la synoptique de génération d’une demande d’interruption est la suivante :

Pour exécuter le ISR correspondant à la demande d’interruption d’un périphérique, on fait le


test des bits flag après le branchement vers le vecteur d’interruption (vecteur 4). Le premier
flag q’on va tester, c’est l’interruption de la plus haute priorité, la priorité sera fixée par le
programmeur lui-même, on appel cette gestion par la méthode de SOFTWARE POLLING.

Organigramme de gestion SOFTWARE POLLING pour le PIC16F84 :

Begin ISR

Yes ISR TIMER


T0IF=1

No

Yes ISR RB
RBIF=1

No

Yes ISR INT


INTF=1

No

Yes ISR EEPROM


EEIF=1

No

End ISR

25
Formation sur les PIC 16Fxxx par : ATOUI Hamza

La structure d’un fichier source en assembleur chez Microchip :


Dans cette partie du cours, on va étudier comment créer un projet sous
l’environnement MPLAB IDE de Microchip (ver 7.6 Î 8.03) ? Avant de commencer, il faut
connue la structure d’un fichier source en assembleur. Microchip propose une structure simple
pour écrire un fichier source, on commence par :
- Déclaration de µC.
- Inclusion des bibliothèques.
- Configuration des fusibles de µC.
- Définitions des constantes & les macro codes s’il existe.
- Déclaration des variables
- Rédaction de la partie CODE.
- Et finir le fichier source par l’étiquette « END ».
Exemple sur le PIC16F84 :

LIST P=16F84 ; déclaration de µC

#include <P16F84.INC> ; inclusion des bibliothèques

__CONFIG _CP_OFF & _PWRTE_OFF & … ; Config des fusibles

; Définition des constantes


#define ISR 0x004
#define Reset 0x000

; Déclaration des variables


CBLOCK 0x0C
Var1 :1
Var2 :1
Tab1 :5
ENDC

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

Synoptique de l’architecture PIC 16F84A :

CODE CPU RAM


1Kx14bits MID-RANGE 68 bytes

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

Organisation de la zone DATA :


La zone DATA du PIC 16F84A est divisée en 2 banques, composée de l’espace RAM (68
bytes) et les registres spéciaux de configuration et de manipulation de périphériques et le µC
lui-même.

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

Périphériques de PIC 16F84A :

Les ports d’E/S :


Le 16F84A possède 13 entrées/sorties (5 dans le port A et 8 dans le port B). Chaque E/S est
configurable individuellement (en entrée ou bien en sortie).

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 :

Schéma des pins RA0Î RA3 Schéma de la pin RA4/T0CKI

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 :

Les registres responsables de manipulation/configuration du PORTA sont :


- Le registre PORTA situé dans la banque 0, utilisé pour la lecture et l’écriture vers
leurs pins.
- Le registre TRISA situé dans la banque 1, utilisé pour la configuration de la direction
des pins.

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.

Schéma des pins RB0ÎRB3 Schéma des pins RB4ÎRB7

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.

Les registres responsables sur la manipulation/configuration du PORTB sont :


- Le registre PORTB situé dans la banque 0, pour la lecture et l’écriture.
- Le registre TRISB situé dans la banque 1, pour la configuration de la direction des
lignes.
- Le registre OPTION_REG situé dans la banque 1 (bit7 RBPU\ et bit6 INTEDG), pour
l’activation de PULL-UP et le type front (INTEDGÍ1 sur ↑, INTEDGÍ0 sur ↓).
- Le registre INTCON situé dans la banque 0 ou la banque 1(bit4 INTE, bit3 RBIE, bit1
INTF et bit0 RBIF), pour autoriser et indiquer les interruptions (INT, RB).

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 « EEDATA » est de 8bits utilisé pour la lecture/écriture de données dans


l’EEPROM.

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

L’opération de l’écriture se fait après une opération d’effacement automatique de


l’emplacement à écrire par la logique du contrôle. Le temps d’écriture dépend de la tension
d’alimentation (Vdd) et la température de CI, en général est une opération lente dépasse 4ms.

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

Bus interne de la zone DATA

34
Formation sur les PIC 16Fxxx par : ATOUI Hamza

La structure de registre EECON1 : c’est le registre de contrôle/état de l’EEPROM


(seulement les 5bits du poids faible sont utilisés).

Les bits 7Î5 : non utilisés.


EEIF : flag d’interruption pour l’opération d’écriture dans l’EEPROM.
- EEIF = 1 Î indique le fin de l’écriture dans l’EEPROM (Effacement Soft).
- EEIF = 0 Î l’opération de l’écriture n’est pas fini ou on a pas lancé.
WRERR : flag d’indication d’une erreur l’or d’une opération d’écriture.
- WRERR = 1 Î arrêt prématuré sur l’opération d’écriture (MCLR\, Time-out WDT).
- WRERR = 0 Î l’opération de l’écriture est terminé sans aucun problème.
WREN : bit d’autorisation de l’écriture dans l’EEPROM.
- WREN = 1 Î Ecriture autorisée.
- WREN = 1 Î Ecriture non autorisée.
WR : bit de contrôle de l’écriture.
- WR = 1 Î initialisation de cycle d’écriture, ce bit est effacé par le HARDWARE si
l’opération de l’écrite est terminée.
- WR = 0 Î l’opération de l’écriture dans l’EEPROM est terminée.
RD : bit de contrôle de la lecture.
- RD = 1 Î initialisation de cycle de lecture, ce bit est effacé par le HARDWARE si
l’opération de la lecture est terminée.
- RD = 0 Î rien.

Opération de lecture d’un byte de l’EEPROM : pour lire un emplacement EEPROM, il


faut passer par les étapes suivantes :

- mettre l’adresse à lire dans le registre « EEADR ».


- activer la lecture par RD Í 1.
- Finalement le contenue de cette case est située dans le registre « EEDATA ».

Exemple : mettre le contenue de l’adresse 0x10 dans l’EEPROM vers le PORTB.


N.B : n’oublie pas le basculement vers la banque de chaque registre à chaque accès.
Code :
; Basculer vers la banque 0
BCF STATUS, RP0
; mettre l’adresse 0x10 dans EEADR
MOVLW 0x10
MOVWF EEADR
; Basculer vers la banque 1 (EECON1)
BSF STATUS, RP0
; Lancer l’opération de lecture
BSF EECON1, RD
; Basculer vers la banque 0 (EEDATA & PORTB)
BCF STATUS, RP0
; PORTB Í EEDATA
MOVF EEDATA, W
MOVWF PORTB

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.

- Mettre l’adresse à écrire dans EEADR.


- Mettre la donnée à écrire dans EEDATA.
- Désactiver les interruptions GIE Í 0 (si le programme fonctionne sous interruption).
- Autoriser l’écriture par WREN Í 1.
- Ecrire la valeur 0x55 dans EECON2 puis la valeur 0xAA dans le même registre.
- Activer l’opération d’écriture par WR Í 1.
- Activer les interruptions GIE Í 1 (si le programme fonctionne sous interruption).

Exemple : mettre le contenue du PORTB dans l’adresse 0x20 EEPROM.


; Basculer vers la banque 0
BCF STATUS, RP0
; mettre l’adresse 0x20 dans EEADR
MOVLW 0x20
MOVWF EEADR
; mettre PORTB Î EEDATA
MOVF PORTB, W
MOVWF EEDATA
; Basculer vers la banque 1 (EECON1)
BSF STATUS, RP0
; Désactiver les interruptions
BCF INTCON, GIE
; Autoriser l’écriture
BSF EECON1, WREN
; Ecriture de la séquence 0x55, 0xAA dans EECON2
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
; Activer l’écriture par WR Í 1
BSF EECON1, WR
; Basculer vers la banque 0
BCF STATUS, RP0

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 :

Vous remarquez que ce module constitué de 3 entités sont :


- La logique de génération de l’horloge TMR0.
- Le registre TMR0.
- Le flag T0IF, indicateur de débordement.

Modes de fonctionnement :
Le module TME0 fonctionne en 2 modes, mode Temporisateur et mode Compteur.

Mode Temporisateur : Pour configurer ce mode, il faut mettre T0CS Í 0 le bit5 de


OPTION_REG. Dans ce mode le TMR0 compte les impulsions de l’horloge système
(Fosc/4).

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

Le Pré-diviseur (PRESCALER) : est une logique de division de fréquence constitué par un


compteur de 8 bascules et un MUX 8Î1 sélectionner par les bits PS2ÎPS0 dans
OPTION_REG, avec un autre bit PSA situé dans le même registre pour sélectionner l’attaque
du TMR0 (la source en direct, ou par le Pré-diviseur).

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

Les registres responsables à la manipulation/configuration du module TMR0 sont :


- Le registre « TMR0 » situé à la banque 0.
- Le registre « INTCON » contient les bits T0IE, T0IF.
- Le registre « OPTION_REG » situé à la banque 1, pour configurer le TMR0.
- Le registre « TRISA » pour mettre la ligne RA4 en entrée si le module fonctionne en
mode compteur (situé à la banque 1).

Structure de registre « OPTION_REG » : c’est le registre de configuration du mode TMR0


responsable à la sélection du mode de fonctionnement, type du front pour la source externe et
la configuration de pré-diviseur.

38
Formation sur les PIC 16Fxxx par : ATOUI Hamza

Le chien de garde (WDT) et le mode mise en vielle :

Le chien de garde (WDT) : est un TIMER libre démarre à l’instant de l’alimentation de µC


si le module est en service par le mot de configuration du µC. A cause de l’horloge RC
séparer de l’horloge système, le WDT après son débordement soit fait un reset de µC ou
réveille le µC après l’exécution de l’instruction « SLEEP », j’ai indiqué précédemment que le
pré-diviseur est un module commun entre le TMR0 et le WDT, pour associer le pré-diviseur
au WDT, on met PSA = 1, et le pré-diviseur devient un post-diviseur pour le WDT.

Le post-diviseur et le WDT sont effacés après l’exécution de l’instruction « CLRWDT », la


période de WDT est 18ms sans post-diviseur (min 7ms, max 33ms).

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.

Dans le cas de PIC 16F84A, les interruptions réveillent le µC sont :


- Evénement sur la ligne RB0/INT.
- Changement d’état des lignes RB4:RB7.
- Fin d’écriture dans l’EEPROM.
Vous remarquez que le débordement de TME0 ne réveille pas le µC, à cause du bloc de
synchronisation avant l’attaque de TMR0, par ce que cette partie utilise l’horloge système.

J’ai une question, qu’est ce qui se passe après le réveille de µC ?

D’après le DATA SHEET la réponse est la suivante :

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

On résumé, on donne la table suivante :


Evénement Branchement TO\ PD\
Mise sous tension 0x000 1 1
MCLR\ 0x000 1 1
MCLR\ (SLEEP) 0x000 1 0
Débordement WDT 0x000 0 1
Débordement WDT (SLEEP) PC+1 0 0
Interruption (SLEEP avec GIE=0) PC+1 U U
Interruption (SLEEP avec GIE=1) PC+1 puis 0x004 U U

U : il garde la valeur précédente.

40
Formation sur les PIC 16Fxxx par : ATOUI Hamza

La série de TP N° :1

But : manipulation de PIC 16F84A et leurs périphériques.

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 :

Ecrire un programme qui réalise le travail suivant :


- à chaque appuyer sur le BP (impulsion), afficher la séquence suivante les Leds relies
aux PORTB (0x81 Î 0x7E Î 0x55 Î 0xAA Î 0x3C Î C3 Î 0x0F Î 0xF0).

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

Soit le montage suivant :

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 :

M2M1 Fonction T2T1 Temporisation


00 Minuterie 00 1s
01 Retardateur 01 2s
10 Télé- rupteur 10 3s
11 Générateur 11 4s

Temporisation
Impulsion START
Minuterie

Temporisation
Impulsion START
Retardateur

Temporisation
Impulsion START Impulsion START
Télé- rupteur

Temporisation
Impulsion START
Générateur

Timing de chaque mode avec l’impulsion START

46