Académique Documents
Professionnel Documents
Culture Documents
1. Organisation de la mémoire
1
1.2. La mémoire EEPROM
La mémoire RAM (Random Access Memory) est celle qu’on utilise pour stocker des
données temporaires. Cette mémoire est partagée en deux parties. Un premier espace mémoire
pour les registres spéciaux ( SFR Special Function Register ) et un second comme RAM
statique pour les registres à usage général (GPR General Purpose Register ). Les SFRs sont
utilisés pour le control du PIC. Tout cet espace mémoire est organisé sous forme de quatre
banques pour les deux types de registres SFRs et GPRs. L’accès à l’une des deux banques
nécessite l’utilisation des bits de control RP0 et RP1qui font partie du registre STATUS
(tableau 1.1).
La zone libre (GPRs) est constitué de 368 octets ; pour les quatre banques (70h-7Fh), (F0h-
FFh), (170h-17Fh) ou (1F0h-1FFh) ne forment qu’un seul espace c’est à dire adresser 70h,
F0, 170 ou 1F0h entraîne une sélection de la même case mémoire.
La totalité de l’espace mémoire libre peut être adressé directement en utilisant une adresse
absolue pour chaque registre ou bien indirectement via le registre FSR (File Select Register).
2
Tableau 1.1 : architecture de la RAM
: les zones non utilisées.
3
La partie supérieure spécifie tous les registres spéciaux utilisés dans le PIC. Chaque registre
provoque un fonctionnement spécial du PIC ou la mise en service d’une fonction particulière.
Certains registres sont identiques dans les 2 banques (FSR par exemple). Cela signifie qu’y
accéder depuis les banques 0, 1, 2 ou 3 ne fait pas de différence.
Remarque : la banque 0 utilise les adresses de 0x20 à 0x7F, la banque 1 allant de 0xA0 à
0xFF, la banque 2 de 0x110 à 0x170 et la banque 3 de 0x190 à 0x1FF. Les zones grisées sont
des emplacements non utilisés (et non utilisables). L’emplacement 0x00 est un emplacement
auquel on ne peut pas accéder.
Pour la grande majorité des registres, chaque bit a une fonction spéciale. Le tableau 1.2
spécifie les noms des bits utilisés dans ces registres.
4
Tableau 1.2.a : Architecture détaillée des registres
5
Tableau 1.2.b : Architecture détaillée des registres
6
Tableau 1.2.c : Architecture détaillée des registres
7
Registre STATUS (Adresse 03h-83h-103h-183h)
RP1,RP0 : ( Register bank select ) bits de sélection de banques ( utilisé en adressage directe )
00 = banque 0 (00h-7Fh)
01 = banque 1 (80h-FFh)
10 = banque 2 (100h-17Fh)
11 = banque 3 (180h-1FFh)
chaque banque représente 128 octets.
TO : ( Time Out ) Ce bit indique (si 0), que la mise en service suit un arrêt provoqué
par un dépassement de temps ou une mise en sommeil. Dans ce cas, PD effectue
la distinction.
1 = après la mise sous tension, instructions CLRWDT ou SLEEP
0 = dépassement de temps du watch-dog
DC : ( Digit carry ) bit de retenue / emprunt ( pour les instructions ADDWF et ADDLW )
Ce bit indique une retenue avec des nombres au format BCD
1 = retenue à partir du bit 3
0 = pas de retenue à partir du bit 3
pour l’emprunt la polarité est inversé.
8
1.5. Le registre OPTION_REG (Adresse 81h-181h)
INTEDG: ( Interrupt Edge select ) bit de sélection du front pour la demande d’interruption
1 = interruption sur front montant sur l’entrée RB0 / INT
0 = interruption sur front descendant sur l’entrée RB0 / INT
TOCS : ( Timer Clock Source select )bit de sélection de la source d’horloge pour le
timer TMR0
1 = transition sur l’entrée RA4 / TOCKI
0 = instruction interne du cycle d’horloge (CLKOUT)
TOSE :( Timer Source Edge select ) bit de sélection du front de la source pour le TMR0
1 = incrémentation sur front descendant de l’entrée RA4 / TOCKI
0 = incrémentation sur front montant de l’entrée RA4 / TOCKI
PS2, PS1, PS0: ( Prescaler Rate select ) bits de sélection du taux du prédiviseur )
9
1.6. Le registre INTCON (Adresse 0Bh, 8Bh, 10Bh, 18Bh)
INTE : ( Interrupt Enable ) bit d’activation de l’interruption due une transition sur RB0 / INT
1 = active la demande d’interruption
0 = désactive la demande d’interruption
RBIE : ( RB port change Interrupt Enable ) bit d’activation de l’interruption due à des
transitions sur les
lignes RB.
1 = active la demande d’interruption
0 = désactive la demande d’interruption
RBIF: ( RB port change Interrupt Flag ) drapeau d’interruption du aux transitions sur
les lignes RB.
1= changement d’état sur au moins une ligne RB7-RB4
10
0 = aucun changement d’état sur les lignes RB7-RB4
11
0 = désactive la demande d’interruption
Ce registre inclus tous les drapeaux des demandes d’interruptions des périphériques
dont on a cité les masques d’autorisation dans le registre PIE.
12
Mode de capture :
1 = capture signalée par le registre TMR1 (doit être remis à 0 par programmation).
0 = aucune.
Mode de comparaison :
1 = comparaison avec le registre TMR1 correspond (doit être remis à 0 par
programmation).
0 = aucune correspondance.
TMR2IF: ( Timer2 to PR2 match Interrupt Flag )
1 = correspondance entre TMR2 et PR2 (doit être remis à 0 par programmation).
0 = pas de correspondance.
13
1.9. Le registre PIR2 (Adresse 0Dh)
Ce registre inclus tous les drapeaux des demandes d’interruptions des périphériques
dont on a cité les masques d’autorisation dans le registre PIE2.
Ce registre inclus tous les drapeaux qui permettent de différentier entre un reset
Power-on (POR), un reste Brown-out (BOR), un reset du au watchdog (WDT) ou bien un
reset externe MCLR .
POR BOR
bit 7 bit 0
14
POR : ( Power On Reset ) bit d’état.
1 = pas de reset power-on.
0 = un reset power-on.
BOR : ( Brown Out Reset ) bit d’état, ce bit doit être mis à un avant de vérifier s’il est
remis à 0 par un reset. Il est indifférent si le bit BODEN du registre de configuration
est désactivé.
1 = pas de reset brown-out.
0 = un reset brown_out.
Un processeur, quel qu’il soit est un composant qui exécute séquentiellement une série
d’instructions organisées selon un ensemble appelé programme.
Il existe donc dans le processeur un séquenceur, c’est à dire un compteur qui permet de
pointer sur la prochaine instruction à exécuter. Ce séquenceur est appelé compteur de
programme PC (Program Counter). Ce PC n’est pas accessible directement par l’utilisateur.
Dans les PICs, les registres ne font que 8 bits, on ne peut donc stocker qu’une adresse
maximale de 255. Il faudra donc 2 registres pour accéder à une adresse, un registre PCL
(PCLow) qui contient l’adresse basse du PC, c’est à dire les 8 bits de poids faibles et qui est
accessible en lecture et en écriture ; et un autre registre de 5 bits PCLATH (PC LATch
Counter High) accessible par l’utilisateur et qui participe au fonctionnement du séquenceur.
Le PC complet étant codé sur 13 bits, il faudra donc compléter PCL avec 5 bits
supplémentaires qui vont représenter l’octet haut du PC (PC<12 :8>) inaccessible en lecture et
écriture; son contenu est chargé à partir du PCLATCH. Il existe deux cas possibles :
- Lors d’un saut, par exemple l’exécution des instructions CALL ou GOTO (figure 1.2), le
contenu du PC est chargé directement avec les 11 bits de destination contenus dans
l’instruction en elle-même. Les 2 bits manquants sont extraits du registre PCLATH. Les
bits 3 et 4, qui doivent être positionnés par l’utilisateur, sont placés directement dans les
bits 11 et 12 du PC afin de compléter l’adresse de destination.
- En cas de modification du PCL directement par l’utilisateur, le registre PCL est chargé
dans PC et complétés par les 5 bits du registre PCLATH (figure 1.2).
Remarque : La limite du PC est de 13 bits, ce qui implique que les PICs de la famille mid-
range auront une capacité de mémoire programme de 8K mots maximum (soit 213).
15
Figure 1.2 : Chargement du PC
Le registre INDF n’est pas un registre physique. Quand on adresse le registre INDF, on adresse
la case mémoire dont l’adresse est stockée dans le FSR ; ce dernier joue le rôle d’un pointeur
c’est ce qu’on appelle l’adressage indirecte.
- La valeur 10h est contenue dans le registre 05h (case mémoire avec l’adresse 05h)
- Le registre 06h contient la valeur 0Ah
- On charge la valeur 05h dans le registre FSR
- Lecture du registre INDF retourne la valeur 10h
- On incrémente le contenu du FSR (FSR = 06h)
- Une autre lecture de INDf, nous donne la valeur 0Ah.
16
Figure 1.3 : Adressages directe et indirecte
1.14. Le registre W
Ce registre, appelé registre de travail, est utilisé par les pics pour réaliser des opérations
arithmétiques et logiques. C’est donc un registre fondamental.
2. Les ports A, B, C, D et E :
17
Après une remise à zéro (Reset) du PIC, toutes les pins sont mises en entrée, afin de ne
pas envoyer des signaux non désirés sur les pins. Les bits de TRISA seront donc mis à 1 lors
de chaque reset.
Le schéma interne des lignes RA0 à RA3et RA5 est de sorte qu’une sortie peut être placée
au niveau haut ou bas grâce aux deux transistors de sortie (montage push-pull). Quand ces
pins sont programmés en entrées, elles sont sensibles à des niveaux TTL.
Pour la ligne RA4, en sortie elle est de type drain ouvert, et en entrée elle comporte un trigger
de schmitt.
Les ports disposent d’une diode de protection vers le 0V et vers le 5V, de sorte qu’avec une
simple résistance série, ces lignes peuvent recevoir des signaux qui sortent de la gamme de
tension TTL. La ligne RA4 fait exception à cette règle, car elle dispose que d’une seule diode
tirée à la masse.
Remarque : Les lignes RA0 à RA3 et RA5 peuvent être utilisées en entrée avec des niveaux
0/5V ou en sortie en envoyant du 0V ou du 5V. Quand à la pin RA4, en sortie, elle ne peut pas
envoyer du 5V. Elle ne peut que mettre la sortie « en l’air » sur niveau 1 ou la forcer à la
masse sur niveau 0. Il faudrait tenir compte de ces spécificités, par exemple, si une led est
placée sur RA4, elle ne se serait jamais allumée. Le courant de sortie est de 20mA maximum
pour chacune des lignes (voir caractéristiques du PIC).
2.2. Les registres PORTB (Adresse 06h, 106h), TRISB (Adresse 86h, 186h)
et OPTION_REG (Adresse 81h, 181h)
18
Ces registres fonctionnent exactement de la même manière que PORTA et TRISA, mais
concernent bien entendu les 8 lignes RB. Les particularités du PORTB sont que les entrées du
PORTB peuvent être connectées à une résistance de tirage (pull-up) au +5V de manière interne, cette
sélection s’effectue par le bit 7 du registre OPTION_REG ; et que les lignes
RB0 et RB<7 : 4> peuvent être utilisés comme source d’interruption, la ligne RB0 peut de plus être
utilisée de manière autonome pour générer un autre type d’interruption.
OPTION
INTEDG TOCS TOSE PSA PS2 PS1 PS0
_REG RBPU
Bit7 bit0
Ces registres fonctionnent exactement de la même manière que PORTA et TRISA, mais
concernent bien entendu les 8 lignes RC. Quelques lignes du port C peuvent êtres utilisées
pour des fonctions spécifiques par exemple la communication I2C ; dans ce cas les lignes
PORTC<4:3> sont utilisées pour ce type de protocole.
Ces registres fonctionnent exactement de la même manière que PORTC et TRISC, mais
concernent bien entendu les 8 lignes RD. Ce port peut être configuré comme port esclave
parallèle en mettant à 1 le bit PSPMODE (bit 4 du registre TRISE).
19
TRISD TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
Bit7 bit0
TRISE IBF OBF IBOV PSPMODE TRISE2 TRISE1 TRISE0
20