Comprendre les bits pour configurer TRISIO et piloter GPIO
Sur un PIC, les registres sont des blocs de bits. Chaque bit contrôle (ou représente) une broche. Sur le PIC12F683, on manipule principalement :
Le préfixe 0b suivi de bits (0/1) représente une valeur en binaire.
Exemple : 0b00000001
Exemple : mettre GP0 à 1, et laisser les autres bits à 0.
0b00000001 = seul GP0 est à 1
Sur PIC12F683, GP3 est souvent une entrée uniquement (et peut être MCLR selon la configuration). On l’utilise rarement comme sortie dans les exemples débutants.
| Code binaire | Hex | Description |
|---|---|---|
| 0b00000000 | 0x00 | Toutes les broches en SORTIE (si autorisées) |
| 0b00101000 | 0x28 | Exemple typique : GP3 entrée + autres selon besoin |
| 0b00000001 | 0x01 | GP0 en entrée, le reste en sortie |
| 0b00001000 | 0x08 | GP3 en entrée (courant si MCLR/entrée) |
| 0b00111111 | 0x3F | Toutes les broches GP0–GP5 en entrée |
TRISIO : 1 = entrée / 0 = sortie.
GPIO : 1 = HIGH / 0 = LOW.
#include <xc.h> #define _XTAL_FREQ 4000000 // 1) Désactiver l'analogique (sinon certaines broches restent en mode ADC) ANSEL = 0b00000000; // 2) Désactiver les comparateurs (recommandé) CMCON0 = 0b00000111; // 3) Direction : GP0 en sortie, GP3 en entrée (souvent), le reste au choix TRISIO = 0b00001000; // 4) État initial GPIO = 0b00000000;
GPIO |= 0b00000001; // met GP0 à 1 sans toucher aux autres // ou GPIObits.GP0 = 1;
GPIO &= 0b11111110; // met GP0 à 0 sans toucher aux autres // ou GPIObits.GP0 = 0;
Les opérations bit à bit permettent de modifier une seule broche sans casser les autres sorties. C’est indispensable en vrai projet.
// OR (|=) : force un bit à 1 GPIO |= 0b00000001; // GP0 = 1 // AND (&=) : force un bit à 0 (avec un masque) GPIO &= 0b11111110; // GP0 = 0 // XOR (^=) : inverse un bit (toggle) GPIO ^= 0b00000001; // toggle GP0 // Exemple : allumer GP0 + GP1 + GP2 GPIO |= 0b00000111;
Si tu fais GPIO = 0bxxxxxx, tu écrases tout le registre.
Pour modifier une seule broche, préfère GPIObits.GPx ou des masques (|=, &=, ^=).
| Binaire | Hex | Décimal | Broches actives |
|---|---|---|---|
| 0b00000000 | 0x00 | 0 | Aucune |
| 0b00000001 | 0x01 | 1 | GP0 |
| 0b00000010 | 0x02 | 2 | GP1 |
| 0b00000100 | 0x04 | 4 | GP2 |
| 0b00001000 | 0x08 | 8 | GP3 |
| 0b00010000 | 0x10 | 16 | GP4 |
| 0b00100000 | 0x20 | 32 | GP5 |
| 0b00111111 | 0x3F | 63 | GP0 à GP5 |