Vous êtes sur la page 1sur 20

REGISTRES INTERNES

1. Organisation de la mémoire

La mémoire du PIC 16F877 est divisée en deux blocs, la mémoire programme et la


mémoire data, chaque bloc possède son propre bus d’adresse de telle sorte que l’accès à
chacun des deux blocs peut être réalisé pendant le même cycle d’horloge.

1.1 La mémoire programme de type FLASH


A
B Pour la mémoire programme de type flash, La famille PIC 16F87x est constitué d’un
compteur de programme à 13bits, capable d’adresser un espace mémoire de 8K x 14 mots.
Pour les PIC 16F873 et 16F874, les premiers 4K x 14 (0000h-0FFFh) sont physiquement
implémentés et pour les PIC 16F876 et 16F877, les 8K x 14 (0000h-1FFFh) sont
physiquement implémentés (figure 1.1). C’est dans cet espace mémoire que le programme
sera stocké. Cette mémoire peut être programmée et effacée plusieurs fois, ce qui est
intéressant pour développer des programmes. En effet une lecture d’un PIC vierge, donne des
0x3FFF (en binaire B’11111111111111’), soit 14 bits. Une instruction est codée sur 1 mot soit
14 bits.
Accéder à des adresses supérieures à l’espace physiquement implémenté entraîne une
redondance c’est à dire pour le 16F873, les adresses 20h et 1020h pointent à la même case
mémoire.
Le vecteur reset et le vecteur d’interruption sont respectivement casés dans les adresses 0000h
et 0004h.

Figure 1.1 : Architecture de la mémoire programme

1
1.2. La mémoire EEPROM

La mémoire EEPROM (Electrical Erasable Programmable Read Only Memory), est


constituée de 256 octets (00h-FFh) qui peuvent être lus ou écrits a partir du programme. Ces
octets sont conservés après une coupure de courant et sont très utiles pour conserver des
paramètres semi-permanents. Leur utilisation implique une procédure spéciale.

1.3 La mémoire RAM

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

1.4. Le registre STATUS

Le registre STATUS, appelé registre d’état, contient l’état arithmétique de l’unité


arithmétique et logique. Les bits de ce registre sont modifiés après chaque exécution d’une
instruction. Quelques bits peuvent être modifiés par programmation.

7
Registre STATUS (Adresse 03h-83h-103h-183h)

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x


IRP RP1 RP0 TO PD Z DC C
R : bit en lecture
W : bit en écriture
bit 7 bit 0
U : non utilisé
n : valeur après
IRP : ( Indirect RP ) bit de sélection de banque ( utilisé en adressage reset
indirecte )
0 = banques 0, 1 (00h-FFh)
1 = banques 2, 3 (100h-1FFh)
IRP est non utilisé par le PIC 16F8X ( maintenu toujours à 0 )

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

PD : ( Power Down ) Indique quel événement a entraîner le dernier arrêt du


PIC (instruction sleep ou dépassement du temps du watchdog).
1 = après la mise sous tension, ou l’instruction CLRWDT
0 = après l’exécution de l’instruction SLEEP

Z : ( Zéro ) bit d’indication d’un résultat nul


1 = résultat d’une opération arithmétique ou logique nul
0 = résultat d’une opération arithmétique ou logique est non nul

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

C : (Carry / Borrow) bit de retenue / emprunt ( pour les instructions ADDWF et


ADDLW ) ; ce bit est positionné à 1 si une addition de 2 bytes donne une
valeur >255. Pour l’emprunt la polarité est inversée.
1 = retenue à partir du bit de plus fort poids (bit 7)
0 = pas de retenue à partir du bit de plus fort poids (bit 7)

8
1.5. Le registre OPTION_REG (Adresse 81h-181h)

Ce registre est un registre accessible en lecture et écriture, il contient les bits de


contrôle pour configurer le prédiviseur du TMR0 / WDT, les demandes d’interruption et les
résistances de tirage ( pull-up ) des lignes du port B.

Registre OPTION_REG ( Adresse 81h -181h)

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1


RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
R : bit en lecture
W : bit en écriture
bit 7 bit 0
U : non utilisé
n : valeur après
RBPU : ( Port B Pull UP Enable ) bit d’activation des résistances de pull- un reset
up du port B
1 = les résistances de pull-up sont désactivées
0 = les résistances de pull-up sont activées

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

PSA : ( Prescaler Assignment ) bit d’affectation du prédiviseur (prescaler)


1 = affecté au watch-dog WDT
0 = affecté au timer TMR0

PS2, PS1, PS0: ( Prescaler Rate select ) bits de sélection du taux du prédiviseur )

PS2 PS1 PS0 Taux de TMR0 Taux de WDT


0 0 0 1/2 1/1
0 0 1 1/4 1/2
0 1 0 1/8 1/4
0 1 1 1 / 16 1/8
1 0 0 1 / 32 1 / 16
1 0 1 1 / 64 1 / 32
1 1 0 1 / 128 1 / 64
1 1 1 1 / 256 1 / 128

9
1.6. Le registre INTCON (Adresse 0Bh, 8Bh, 10Bh, 18Bh)

Le registre INTCON est un registre accessible en lecture et écriture, il permet la


configuration des différentes sources d’interruption.

Registre INTCON (Adresse 0Bh, 8Bh, 10Bh, 18Bh)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x


GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
R : bit en lecture
W : bit en écriture
bit 7 bit 0
U : non utilisé
n : valeur après
GIE : ( Global Interrupt Enable ) bit d’activation de toutes les demandes un reset
d’interruption
1 = les interruptions non masquées sont activées
0 = désactiver toutes les interruptions

PEIE : ( Peripheral Interrupt Enable ) bit d’activation des interruptions des


Périphériques (ex : la mémoire EEROM)
1 = active toutes les interruptions provenant des périphériques.
0 = désactive ces interruptions.
TOIE : ( TMR0 Overflow Interrupt Enable )bit d’activation de l’interruption du
dépassement du TMR0
1 = active l’interruption du TMR0
0 = désactive l’interruption du TMR0

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

TOIF: ( TMR0 Interrupt Flag ) drapeau d’interruption du dépassement du TMR0


1 = dépassement sur TMR0 ( ce bit doit être effacé par programmation )
0 = pas de dépassement sur TMR0

INTF: ( Interrupt Flag ) drapeau d’interruption de RB0 /INT


1 = interruption généré par RB0 / INT
0 = pas 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

1.7. Le registre PIE1 (Adresse 8Ch)


Ce registre contient les différents bits d’autorisation (masques) des demandes
d’interruptions provenant des périphériques. Le bit PEIE du registre INTCON devra être
programmé à un pour que les demandes d’interruption des périphériques soient prises en
compte.

Registre PIE1 (Adresse 8Ch)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


PSPIE ADIE RCIE TXIE SSPIE CCP1I TMR2I TMR1I
E E E R : bit en lecture
W : bit en écriture
U : non utilisé
bit 7 bit 0 n : valeur après
un reset
PSPIE : ( Parallel Slave Port Interrupt Enable ) bit d’activation
de l’interruption du port parallèle esclave.
1 = autorise la demande d’interruption du PSP en mode read/write.
0 = désactive la demande d’interruption.

ADIE : ( A/D converter Interrupt Enable ) bit d’activation de l’interruption du


Convertisseur analogique / numérique.
1 = autorise la demande d’interruption.
0 = désactive la demande d’interruption.
.
RCIE : ( USART Receive Interrupt Enable ) bit d’activation de l’interruption du
module reception de l’USART.
1 = active la demande d’interruption.
0 = désactive la demande d’interruption.

TXIE : ( USART Trasmit Interrupt Enable ) bit d’activation de l’interruption du module


de transmition de l’USART.
1 = active la demande d’interruption
0 = désactive la demande d’interruption

SSPIE : ( Synchronuous Serila Port Interrupt Enable ) bit d’activation de l’interruption du


Module SSP.
1 = active la demande d’interruption
0 = désactive la demande d’interruption

CCP1IE: (Capture / Compare / PWM 1 Interrupt Enable )


1 = active la demande d’interruption
0 = désactive la demande d’interruption

TMR2IE: ( Timer2 to PR2 match Interrupt Enable )


1 = active la demande d’interruption de la correspondance entre TMR2 et PR2.

11
0 = désactive la demande d’interruption

TMR1IE: ( Timer1 Interrupt Enable ) bit d’activation de l’interruption du


dépassement du TMR1
1 = active la demande d’interruption du dépassement du TMR1.
0 = désactive la demande d’interruption du dépassement du TMR1.

1.7. Le registre PIR1 (Adresse 0Ch)

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.

Registre PIE1 (Adresse 0Ch)

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


PSPIF ADIF RCIF TXIF SSPIF CCP1I TMR2I TMR1I
F F F R : bit en lecture
W : bit en écriture
U : non utilisé
bit 7 bit 0 n : valeur après
un reset

PSPIF : ( Parallel Slave Port Interrupt Flag ) drapeau de l’interruption


du port parallèle esclave.
1 = une lecture/écriture du PSP achevée (doit etre remis à 0 par programmation).
0 = pas de lecture/écriture du PSP.

ADIF : ( A/D converter Interrupt Flag ) drapeau de l’interruption du


Convertisseur analogique / numérique.
1 = conversion A/D terminée.
0 = conversion A/D en cours.
.
RCIF : ( USART Receive Interrupt Flag ) drapeau de l’interruption du
module reception de l’USART.
1 = registre de réception de l’USART plein.
0 = registre de réception de l’USART vide.

TXIF : ( USART Trasmit Interrupt Flag) drapeau de l’interruption du module


de transmition de l’USART.
1 = registre d’émission de l’USART vide.
0 = registre d’émission de l’USART plein.

SSPIF : ( Synchronuous Serila Port Interrupt Flag ) drapeau du module SSP


1 = demande d’interruption signalée par le module SSP (transmission / recéption
des module SPI, I2C esclave ou I2C maitre), doit etre remis à 0 par
programmation.
0 = aucune demande d’interruption.

CCP1IF: ( Capture / Compare / PWM 1 Interrupt Flag)

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.

TMR1IF: ( Timer1 Interrupt Flag )


1 = dépassement du TMR1 (doit être remis à 0 par programmation)..
0 = pas de dépassement du TMR1.

1.8. Le registre PIE2 (Adresse 8Dh)

Ce registre contient les masques d’interruptions des périphériques du CCP2, du bus de


collision SSP et de la mémoire EEPROM.

Registre PIE2 (Adresse 8Dh)

U-0 R/W-0 U-0 R/W-0 R/W-0 U -0 U-0 R/W-0


reserved EEIE BCLIE CCP2IE
bit 7 bit 0

EEIE : ( EEPROM Interrupt Enable ) bit d’activation


de l’interruption de la mémoire EEPROM.
1 = autorise la demande d’interruption en ecriture de l’EEPROM.
0 = désactive la demande d’interruption.

BCLIE : ( Bus Collision Interrupt Enable ) bit d’activation de l’interruption du


de la collision du bus.
1 = autorise la demande d’interruption.
0 = désactive la demande d’interruption.
.
CCP2IE: (Capture / Compare / PWM 2 Interrupt Enable )
1 = active la demande d’interruption.
0 = désactive la demande d’interruption.

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.

Registre PIR2 (Adresse 0Dh)

U-0 R/W-0 U-0 R/W-0 R/W-0 U -0 U-0 R/W-0


reservée EEIF BCLIF CCP2IF
bit 7 bit 0

EEIF : ( EEPROM Interrupt Flag ) drapeau d’une opération d’écriture en EEPROM.


1 = opération d’écriture terminée (doit être remis à 0 par programmation).
0 = opération d’écriture en cours.

BCLIF : ( Bus Collision Interrupt Flag )


1 = une collision dans le bus signalée dans le SSP (I2C en mode master).
0 = pas de collision signalée.

CCP2IF: (Capture / Compare / PWM 2 Interrupt Flag)


Mode de capture :
1 = capture signalée par le registre TMR1 (doit être remis à 0 par programmation).
0 = aucune.
Mode de comparaison :
1 = comparaison adéquate vac le registre TMR1 (doit être remis à 0 par
programmation).
0 = différente.

1.10. Le registre PCON (Adresse 8Eh)

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 .

Registre PCON (Adresse 8Eh)

U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-1

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.

1.11. Le registre PC : PCL (Adresse 02h, 82h, 102h, 182h),


PCLATCH (Adresse 0Ah, 8Ah, 10Ah, 18Ah)

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

1.12. Le registre STACK


Ce registre à 13bits est indépendant des espaces mémoire programme et donnée, et le
pointeur de pile (stack) est inaccessible en écriture et lecture. Les 13 bits du PC seront stockés
(push) dans la pile lorsque l’instruction CALL est exécutée ou une demande d’interruption a été
signalée.. Cette valeur du PC est restituée (pull) après l’exécution des instructions RETURN,
RETLW ou RETFIE. Dans ces conditions le PCLATCH n’est pas affecté.

1.13. Les registres INDF (Adresse 00h, 80h, 100h, 180h)


et FSR (Adresse 04h, 84h ; 104h, 184h)

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.

Exemple d’adressage indirect

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

Se sont des registres qui permettent la connexion entre le microcontrôleur et le monde


extérieur. Le port A est constitué de 6 lignes, les ports B, Cet D de 8 lignes chacun et le port E
de 3 lignes dont chaque ligne peut être séparément configurée, soit en entrée soit en sortie.

2.1. Les registres PORTA (Adresse 05h), TRISA (Adresse 85h)


et ADCON1 ( Adresse 9Fh)

Le registre PORTA (Adresse 05h) est constitué de 6 lignes programmables en entrées


ou sorties ; la direction de chaque ligne peut être indépendamment configurée en
programmant le bit correspondant dans le registre de direction des données TRISA. Ce
registre est situé à la même adresse que PORTA, mais dans la banque 1. Son adresse complète
sur 8 bits est donc 0x85. Programmer à 1 le bit x du registre TRISA configure l’entrée
correspondante à x en entrée (figure 2.1). Pour une configuration en sortie, le bit x doit être
programmé à 0. La ligne RA4 est multiplexée avec l’entrée horloge du timer TMR0 et les
autres lignes sont multiplexées avec des entrées analogiques.
Les bits PCFGx du registre ADCON1 permettent de configurer les lignes des ports A ou E
comme entrées numérique ou analogiques.

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.

RA5/AN4/ RA4/T0CKI RA3/AN3 RA2/AN2 RA1/AN1 RA0/AN0


PORTA
SS /VREF
TRISA TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0

ADCON1 ADFM PCFG3 PCFG2 PCFG1 PCFG0


Bit7 bit0
: non implémenté.

Figure 2.1 : Registres PORTA et TRISA

Exemple d’initialisation du PORT A

clrf PORTA ; chargement de 00h dans PORTA


bsf STATUS , RP0 ; on passe en banque 1
movlw 0x0F ; donnée 0Fh dans W
mowf TRISA ; stocker le contenu de W dans TRISA
; RA<3 :0> configurés comme entrées et
; RA<4-5> comme sortie
molw 0x06 ; configuration des entrées comme entrées
movwf ADCON1 ; numériques
bcf STATUS , RP0 ; on repasse en banque 0

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.

PORTB RB7/PGD RB6/PGC RB5 RB4 RB3/PGM RB2 RB 1 RB0/INT


TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
Bit7 bit0

OPTION
INTEDG TOCS TOSE PSA PS2 PS1 PS0
_REG RBPU
Bit7 bit0

: non utilisé par le port B.

Figure 2.2 : Registres PORTB, TRISB et OPTION_REG

Exemple d’initialisation du port B

bsf STATUS , RP0 ; on passe en banque 1


bcf OPTION_REG, RBPU ; résistance de rappel en service
movlw 0xF0 ; on charge la valeur F0h dans W
movwf TRISB ; configuration de RB<7 :4> en entrées et
; RB<3 :0> en sorties
bcf STATUS , RP0 ; on repasse en banque 0

2.3. Les registres PORTC (Adresse 07h), TRISC (Adresse 87h)

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.

RC7/RX RC6/TX RC5/SDO RC4/SDI RC3/SCK RC2/CCP1 RC1/T1OSI RC0/T1OSO


PORTC
/DT /CK /SDA /SCL /CCP2 T1CK1
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
Bit7 bit0

2.4. Les registres PORTD (Adresse 08h), TRISD (Adresse 88h)


et TRISE (Adresse 89h)

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

PORTD RD7/PSP7 RD6/PSP6 RD5/PSP5 RD4/PSP4 RD3/PSP3 RD2/PSP2 RD1/PSP1 RD0/PSP0

19
TRISD TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
Bit7 bit0
TRISE IBF OBF IBOV PSPMODE TRISE2 TRISE1 TRISE0

: non utilisé par le port D.

2.5. Les registres PORTE (Adresse 09h), TRISE (Adresse 89h)

Le port E possède trois lignes configurables séparément (numérique / analogique). Ces


lignes peuvent être utilisées comme entrées de contrôle pour le module PSP.

RE2/ AN7 RE1/ AN6 RE0/ AN5


PORTE
/ CS / WR / RD
TRISE IBF OBF IBOV PSPMODE TRISE2 TRISE1 TRISE0
Bit7
bit0
ADCON1 ADFM PCFG3 PCFG2 PCFG1 PCFG0

: non utilisé par le port E.

20