8.1. Tableau des registres :
Adresse
|
Registre
|
Registre
|
Adresse
|
00
|
INDF
|
INDF
|
80
|
01
|
TMR0
|
OPTION
|
81
|
02
|
PCL
|
PCL
|
82
|
03
|
STATUS
|
STATUS
|
83
|
04
|
FSR
|
FSR
|
84
|
05
|
PORTA
|
TRISA
|
85
|
06
|
PORTB
|
TRISB
|
86
|
07
|
|
|
87
|
08
|
EEDATA
|
EECON1
|
88
|
09
|
EEADR
|
EECON2
|
89
|
0A
|
PCLATH
|
PCLATH
|
8A
|
0B
|
INTCON
|
INTCON
|
8B
|
0C à 4F
|
68 mémoires
disponibles
|
Accès aux même Mémoires que page 0
|
8C à CF
|
Page 0
|
|
|
Page 1
|
( Tableau : 2 ) , Les registres internes du PIC 16F84 [3]
?8.1.1. Les registres PCL (h'02' et h'82')
et PCLATH (h'0A' et h'8A' )
- Le compteur de programme ou compteur ordinal nommé PC
permet de pointer sur la prochaine instruction a exécuter, le PC complet
étant d'office sur 13 bits .Il faut 2 registres , le premier accessible
en lecture et écriture contient l'adresse basse du PC sur 8 bits , il
est appelé PCL (PC Low ), le deuxième s'appelle : PCLATH (PC
LATch counter High ).
-Le compteur PC pour PIC 16F84 travaille sur 10 bits , les 6 bits
forts du PCLATH maintenus a 0 . [3]
? 8.1.2. Le registre STATUS (h'03' et h'83' )
ou registre d'état
-Est en relation avec l'UAL et permet de tester le
résultat de la dernière opération effectuée par le
microcontrôleur . Selon la dernière opération
effectuée des bits sont positionnes dans le registre d'état et
ceux-ci peuvent être tester a l'aide d'une instruction de bronchement
pour effectuer des sauts conditionnels .
7 0
IRP
RP1
RP0
TO
PD
Z
DC
C
BIT 0 : C ( Carry ) , retenue ou report .
Il passe a "1" lorsque le résultat d'une opération
dépasse la valeur FF. BIT 1 : DC ( Digit Carry ).
Il indique un report ou retenue du bit 3 ver le bit 4 .
BIT 2 : Z (Zéro ).
Quand il est a "1", il indique que le résultat de
l'opération est nul. BIT 3 : PD ( Power-down ).
Ce bit est actif au niveau zéro . Il est mis a 1 a la mis
sous tension.
PD est mis a 0 par l'instruction SLEEP ( état de basse
consommation ). PD est mis a 1 par l'instruction CLRWDT ( mise a 0 du chien de
garde). BIT 4 : TO (Time-out bit ).
Ce bit est actif au niveau zéro. Ce bit est mis a 1 a la
mise sou tension. Ce bit est mis a 0 par le débordement du chien de
garde.
BIT 5 : RP0 ( Registre Bank Select ).
Ce bit permet d'indiquer dans quel bloc de RAM on veut
travailler. RP0 mis a 0 on utilise le bloc 0 .
RP0 mis a 1 on utilise le bloc 1 .
BIT 6 : RP1 ( Registre Bank Select ).
Ce bit est inutilisé pour le PIC 16F84 , il doit
être laissé a 0 .
BIT 7 : IRP ( Indirect RP ).
Ce bit n'est pas utilisé dans le PIC 16F84 , il faut
maintenu a 0 .
[3]
? 8.1.3. Les registres INDF (h'00' et h'80' )
et FSR (h'04' et h'84' ).
-Le registre INDF ainsi que FSR permettent l'adressage
INDIRECTE.
-Le principe est d'utiliser deux registres intermédiaires
pour accéder aux données: -Dans le premier appelé FSR , on
inscrit l'adresse (en fait , il est utilisé comme un pointeur).L'autre
registre INDF contient la valeur qui se trouve à l'adresse
définie dans le FSR. . [1]
? 8.1.4. Le registre OPTION ( h'81' )
-Le registre OPTION est un registre utilisable en lecture et
en écriture. Il permet de configurer le pré diviseur du compteur,
l'interruption externe INT et de mettre en place des rappels de potentiel sur
le port B. Après le RESET
Tous ses bits sont à 1.
7 0
RBPU
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
BIT 7 : RBPU ( pull up du port B).
Une résistance de rappel est relié au +5 volt sur
chaque connexion du PORTB, quand le bit RBPU est mis à0 (actif au niveau
bas ).
Ce bit valide simultanément les résistances sur
toutes les connexion du PORTB. BIT 6 : INTEDG ( INTerrupt
EDGe).
Sélection du front du signal de demande d'interruption.
Si INTEDG =1 alors la broche RBO/INT génère une
interruption sur un front montant.
Si INTEDG =0 alors la broche RBO/INT génère une
interruption sur un front descendant.
BIT 5 : TOCS ( Timer zero Clock Source )
Sélection de la source d'horloge du compteur . Le
timer0 es t incrémenté par l'horloge interne Fosc/4 (
synchronisé au programme) si TOCS = 0 , sinon .Il compte les impulsions
reçues sur la connexion RA4/TOCKI.
BIT 4 : TOSE (Timer zero Signal Edge ).
Ce bit détermine sur quel front ( montant ou descendant)
l'entrée RA4
incrémentera le registre TMR0.
TOSE=1 Front descendant.
TOSE=0 Front montant.
BIT 3 : PSA (Pre-Scaler Assignement).
Si PSA = 1 alors le pré diviseur est associé avec
le WD .
Si PSA = 0 alors le pré diviseur est associé avec
le TIMER
BIT 2-1-0 : PS2 - PS1 - PS0 (Pre-Scaler rate
).
Réglage de la pré division . Ces trios bits
déterminant la valeur de pré division pou le registre
détermine par le bit PSA . La pré division est différente
pour le compteur timer0 ( TMR0 ) et pour chien de garde (Watch Dog ). Voir
tableau suivant (tableau : 3) .
PSA
|
PS2
|
PS1
|
PS0
|
TMR0
|
Watch Dog
|
0
|
0
|
0
|
0
|
2
|
1
|
0
|
0
|
0
|
1
|
4
|
1
|
0
|
0
|
1
|
0
|
8
|
1
|
0
|
0
|
1
|
1
|
16
|
1
|
0
|
1
|
0
|
0
|
32
|
1
|
0
|
1
|
0
|
1
|
64
|
1
|
0
|
1
|
1
|
0
|
128
|
1
|
0
|
1
|
1
|
1
|
256
|
1
|
1
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
1
|
2
|
1
|
0
|
1
|
0
|
1
|
4
|
1
|
0
|
1
|
1
|
1
|
8
|
1
|
1
|
0
|
0
|
1
|
16
|
1
|
1
|
0
|
1
|
1
|
32
|
1
|
1
|
1
|
0
|
1
|
64
|
1
|
1
|
1
|
1
|
1
|
128
|
(tableau : 3 ), de la pré division [3]
? 8.1.5. Le registre PORTA (h'05').
- Ce registre est un port d'entrée / sortie de 5
bits,reprisant image des pins RA0 à RA4 . - La configuration de chaque
bit du port est déterminée avec le registre TRIS A.
7 0
|
|
|
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
|
|
|
EEIF
|
WRERR
|
WREN
|
WR
|
RD
|
[1]
|
GIE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
? 8.1.6. Le registre TRISA ( h'85' ).
-C'est le registre de configuration du registre port A .Seuls
les cinq bits de poids faible son utilisés. Si le bit = 1, le bit
correspondant du port A est en entrée, s'il est égale à 0,
le bit correspondant du port A est en sortie .
7 0
|
|
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
|
|
|
TrisA4
|
TrisA3
|
TrisA2
|
TrisA1
|
TrisA0
|
[1]
? 8.1.7. Le registre PORTB (h'06' ).
-Le PORTB est un port bidirectionnel de 8 bits, reprisant image
des pins RB0 à RB7 . -La configuration du PORTB est
réalisée avec le registre TRISB .
7 0
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
RB7
|
RB6
|
RB5
|
RB4
|
RB3
|
RB2
|
RB1
|
RB0
|
[1]
? 8.1.8. Le registre TRISB ( h'86' ).
-C'est le registre de configuration du registre port B . Si le
bit = 1, le bit correspondant du port B est en entrée, s'il est
égale à 0,le bit correspondant du port B est en sortie.
7 0
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
R / W
|
TrisB7
|
TrisB6
|
TrisB5
|
TrisB4
|
TrisB3
|
TrisB2
|
TrisB1
|
TrisB0
|
[1]
? 8.1.9. Le registre INTCON : INTerrupt CONtrol
(h'0B' et h'8B' ). -C'est le registre qui préside au fonctionnement des
interruptions .
-Ces bit passent à 1 quand une demande est apparue.
-Dans le pic 16f84 il y a quatre source possibles
d'interruptions.
1) La fin d'une programmation de l'EEPROM de données .
2) Le débordement du (timer ) interne .
3) Une commande externe appliquée sur la pin 6 (RB0/INT)
.
4) Un changement d'état sur l'une des pins 10 , 11 , 12
ou 13 .
7 0
BIT 0: RBIF ( RB port change Interrupt Flag)
-C'est un drapeau d'interruption qui indique un changement
d'état du PORT (RB4àRB7).
RBIF=1 une broche (RB4 à RB7) à changé
d'état.
RBIF=0 pas de changement d'état. BIT 1:
INTF (INT interrupt Flag). Drapeau d'interruption de l'entrée
RB0. RBIF=1 une interruption est apparue. RBIF=0 pas d'interruption.
BIT 2: TOIF ( TMRO Overflow Interrupt Flag).
Ce drapeau indique un dépassement du registre TMRO
(passage de FF à 00).
TOIF= 1 dépassement de TMR0. TOIF= 0 pas de
dépassement.
BIT 3: RBIE (RB Interrupt Enable).
Bit de validation qui autorise une interruption lors d'un
changement d'état du
PORT B (RB4 à RB7).
RBIE =1 Autorise l'interruption.
RBIE =0 Les changement d'état du PORT B (RB4 à RB7)
ne générant pas d'interruption. BIT 4: INTE (
INT interrupt Enable).
Valide ou non l'interruption généré par la
broche RB0/INT
INTE = 1 Valide l'interruption INT.
INTE = 0 Pas d'interruption provenant de INT.
BIT 5: TOIE (TMRO Overflow Interrupt Enable).
- Autorise ou non l'interruption provoqué par le
dépassement du registre TMRO (passage de FF à 00)
TOIE = 1 Valide l'interruption.
TOIE = 0 Pas d'interruption provenant du registre TMR0.
BIT 6 : EEIE (EE write Interrupt Enable).
-Ce bit autorise ou non une interruption lorsqu'un cycle
d'écriture dans L'EEPROM c'est déroulé normalement.
EEIE=1 Génère une interruption lorsqu'une cycle
d'écriture c'est déroulé normalement. EEIE=0 Pas
d'interruption.
BIT 7: GIE (Global Interrupt Enable).
-Ce bit autorise ou non toutes les interruptions.
GIE=1 Toutes les interruptions sont prises en compte par le
microcontrôleur.
GIE=0 Aucune interruption ne sera validée .
[3]
? 8.1.10. Le registre EEDATA : EEprom DATA (
h'08' ) .
-Ce registre de 8 bits permet de lire ou d'écrire une
donnée dans la mémoire non
volatile (EEPROM).
[1]
? 8.1.11. Le registre EEADR : EEprom ADRess (
h'09' ) .
Registre de 8 bits qui contient l'adresse de la donnée se
trouvant dans l'EEPROM. [1]
? 8.1.12. Le registre EECON 1 : EEprom CONtrol (
h'88' ) .
Registre de contrôle permettant de définir le
mode de fonctionnement (écriture et l'écriture ) de la
mémoire de donnée EEPROM ,Seuls les 5 bits de poids faible sont
utilisés .
7 0
EEIF
WRERR
WREN
WR
RD
BIT 0 : RD ( RaeD).
-Lorsque ce bit est mis à "1", il indique au
microcontrôleur que l'on souhaite une lecture de l'EEPROM. Apres le cycle
de lecture, il est mis automatiquement à 0. BIT 1 : WR
( WRite ).
-Lorsque ce bit est mis à "1", il indique au
microcontrôleur que l'on souhaite une écriture de l'EEPROM; Apres
le cycle d'écriture, il est mis automatique à 0.
BIT 2 : WREN ( WRite ENable ).
Mis à 0 , interdit toute écriture en mémoire
.
Mis à 1 , autorise une écriture en mémoire
.
BIT 3 : WRERR ( WRite ERRor ) .
C'est un bit d'erreur. Il passe à 1 s i une
opération d'écriture en EEprom à été
interrompue , par exemple par un reset
BIT 4 : EEIF ( EEprom Interrupt Flag ). Flag
d'interruption .
C'est le flag qui est en liaison avec l'interruption EEPROM .Il
passe à 1 une fois l'écriture en EEprom terminée.
Si le bit EEIE du registre INTCON est à 1, une
interruption sera alors générée. [1]
? 8.1.13. Le registre EECON 2 : EEprom CONtrol (
h'89' ) .
Registre n'ayant aucune consistance physique , et dont le seul
rôle consiste à obliger le programmeur à vérifier
les données qu'il envoie dans l'EEPROM. il compte jusqu'à 256
[ 1 ]
? 8.1.14. Le registre TMR0 ( TiMeR zero).
- Ce registre de 8 bits s'incrémente de "1" a chaque
impulsion de l'horloge (externe ou interne)Ce timer peut soit fonctionner seul,
soit être précédé par un pré diviseur
programmable à 8 bits dont la programmation se fait par
l'intermédiaire du registre OPTION .
Programmation de PIC 16F84
1. INTRODUCTION
- Maintenant que nous avons acquis les rudiments du
microcontrôleur .Il est le temps de passer à pratique.
- Au début on a créer un programme qui
répond au cahier des charges de notre projet.
pour créer le programme source il faut uniquement un
éditeur de texte,un logiciel spécifique permet de compiler le
programme . ( le plus connu MPLAB chez microchip) c'est - à - dire la
transformation du programme source en un programme dit hexadécimal ou
Binaire , suite de 0 et 1 . - Une fois compilé le fichier sousce est
transféré via un logiciel approprié vers la mémoire
de programme du PIC, Cette logiciel appelé « ic-prog ».
- Ce dernier opération de transformation du programme
à mémoire de PIC , elle est faite à l'aide d'un outil
appelé «programmateur des PICs » .
2. Le langage assembleur
- Le langage assembleur est une interface entre l'homme et le
microcontrôleur pour la compréhension d'un programme .
- En effet , il est difficile pour l'homme d'écrire ou
de comprendre une représentation binaire d'une suite d'instructions
.Quant au microcontrôleur, il ne reconnaît qu'une suite de 0 et de
1 (langage binaire ).
- Pour une représentation plus explicite d'un langage
binaire on utilise le langage assembleur ou les instructions sont
représentées par leur mnémonique .un fichier source
contient le programme écrit dans un langage compréhensible pour
l'homme . Edité sous le format ASCII , il décrit sous une forme
le plus souvent mnémonique les instructions que doit exécuter le
microcontrôleur .
3. Règles de rédaction en langage
d'assemblage
|