Registre TRIS Microchip PIC : Contrôle Direction Données
Dans l'architecture des microcontrôleurs **PIC® de Microchip Technology** (familles PIC10/12/16/18/24/32), le **Registre TRIS** (Registre Tri-State) est le **Registre Direction Données** pour un port E/S. Il configure chaque broche comme **Entrée** ou **Sortie**.
Origine du Nom
TRIS = **TRI**-State (Entrée, Sortie Haut, Sortie Bas / Haute-Impédance). La broche peut être pilotée Haut, pilotée Bas, ou Haute-Impédance (Entrée).
Logique Bit à Bit (La Règle d'Or)
| Valeur Bit TRISx | Direction Broche | État Broche | Driver Sortie | Buffer Entrée |
|---|---|---|---|---|
| 1 | Entrée | Haute-Z (Hi-Z) | Désactivé (Off) | Activé (Trigger Schmitt / TTL) |
| 0 | Sortie | Piloté Haut / Bas | Activé (Push-Pull / Open-Drain*) | Activé (Lit état broche) |
*Open-Drain (registre ODCON) désactive P-FET ; nécessite pull-up externe.
Mnémotechnique : **« 1 = Entrée (I) », « 0 = Sortie (O) »**. Penser : **1** ressemble à **I** (Input). **0** ressemble à **O** (Output).
Correspondance Registres (Exemples)
- PIC16F877A (Milieu gamme) : TRISA (5 bits), TRISB (8 bits), TRISC, TRISD, TRISE. Banque 1 (RP0=1).
- PIC18F4550 (Haut gamme 8-bit) : TRISA–TRISE. Banque Accès (Banque 15 / BSR).
- PIC24 / dsPIC33 (16-bit) : TRISA–TRISG. Espace SFR. Registres 16 bits.
- PIC32 (MIPS32) : TRISA–TRISG. Mappés mémoire. **TRISxSET / TRISxCLR / TRISxINV** registres manipulation bit atomique.
Interaction Critique : LATx vs PORTx
- Écriture Sortie : Écrire dans registre **LATx (Latch)**. Évite problèmes Lecture-Modification-Écriture (RMW) sur broches fortement chargées.
LATBbits.LATB5 = 1; - Lecture Entrée : Lire registre **PORTx**. Échantillonne tension broche.
if (PORTBbits.RB4) ... - Lecture Sortie : Lire **LATx** (valeur dernière écrite garantie). Lire PORTx lit *tension broche réelle* (peut différer par charge).
Séquence Configuration (Bonne Pratique)
// 1. Configurer Analogique/Numérique (ANSELx = 0 pour E/S numérique) ANSELB = 0x00;
// 2. Définir Niveaux Sortie Initiaux (LATx) *avant* de passer en sortie LATB = 0x00; // Tous bas initialement
// 3. Définir Direction Données (TRISx) TRISB = 0b00010000; // RB4 = Entrée (1), Autres = Sortie (0)
// 4. Activer Pull-ups Faibles (si nécessaire, pour entrées) WPUBbits.WPUB4 = 1; // Pull-up sur RB4
INTCON2bits.nRBPU = 0; // Activer Pull-ups PORTB globalement
Substitutions Fonctions Spéciales
Modules périphériques (UART, SPI, I2C, PWM, ADC, Comparateur) **écrasent contrôle TRIS** quand activés.
- UART TX → Force Sortie. RX → Force Entrée.
- ADC → Force Entrée (Analogique), désactive buffer numérique (ANSEL=1).
- Bit TRIS devient « sans importance » pour cette broche. Vérifier fiche technique « Diagramme Broches » / « Description E/S Broches ».
Pièges Courants
- Oublié ANSEL : Broche défaut Entrée Analogique au POR. Lecture numérique retourne 0. TRIS=1 mais ANSEL=1 → Analogique. **Toujours effacer ANSEL en premier.**
- RMW sur PORTx :
PORTB |= 0x01;lit broche (peut être bas par charge), modifie, réécrit → efface autres sorties. **Utiliser LATx.** - Sélection Banque (PIC16) : TRIS en Banque 1. PORT en Banque 0.
BANKSEL TRISBmanquant → écrit dans mauvais registre (PORTB).
Le registre TRIS est le **gardien de la direction broches**. Maîtriser sa logique « 1=Entrée, 0=Sortie », son partenariat avec LATx/PORTx/ANSELx, et substitutions périphériques, et vous maîtrisez E/S PIC.
