Tutoriel XC8 (MPLAB X) : câblage DIP-8 + fuses + code GPIO/TRISIO
Faire clignoter une LED connectée sur la broche GP2 du PIC12F683 :
C’est le « Hello World » des microcontrôleurs PIC : idéal pour valider ton programmateur, ta config MPLAB X/XC8
et comprendre la direction des broches (TRISIO) et l’écriture sur le port (GPIO).
Composants nécessaires :
Connexions :
💡 Astuce : si tu veux éviter le câblage MCLR, mets MCLRE = OFF dans les fuses (la broche 4 devient une entrée GP3).
/* * Projet : LED Clignotante sur PIC12F683 (DIP-8) * Auteur : JLQDeveloppement * Microcontrôleur : PIC12F683 * Compilateur : XC8 * Sortie LED : GP2 */ // Configuration des fuses (PIC12F683) #pragma config FOSC = INTRCIO // Oscillateur interne, GP4/GP5 en I/O #pragma config WDTE = OFF // Watchdog désactivé #pragma config PWRTE = ON // Power-up Timer activé #pragma config MCLRE = ON // MCLR activé (GP3 = MCLR) #pragma config CP = OFF // Protection code OFF #pragma config CPD = OFF // Protection données OFF #pragma config BOREN = ON // Brown-out Reset ON #pragma config IESO = ON // Switchover activé #pragma config FCMEN = ON // Fail-Safe Clock ON #include <xc.h> #include <stdint.h> #define _XTAL_FREQ 4000000 // 4 MHz void main(void) { // ÉTAPE 1 : Oscillateur interne à 4 MHz (IRCF = 110) OSCCON = 0b01100000; // ÉTAPE 2 : Tout en numérique ANSEL = 0b00000000; // ÉTAPE 3 : Désactiver les comparateurs (recommandé) CMCON0 = 0b00000111; // ÉTAPE 4 : Direction des broches // GP2 en sortie (0), le reste en entrée (1) TRISIO = 0b00111011; // GP5..GP0 = 1 1 1 0 1 1 // ÉTAPE 5 : Tout à 0 GPIO = 0b00000000; // Boucle infinie while(1) { GPIObits.GP2 = 1; // LED ON __delay_ms(1000); GPIObits.GP2 = 0; // LED OFF __delay_ms(1000); } }
while(1) { GPIObits.GP2 = !GPIObits.GP2; __delay_ms(1000); }
// Masque GP2 = 0b00000100 while(1) { GPIO |= 0b00000100; // GP2 = 1 __delay_ms(1000); GPIO &= 0b11111011; // GP2 = 0 __delay_ms(1000); }
while(1) { GPIO ^= 0b00000100; // Toggle GP2 __delay_ms(500); }
MCLRE = ON et la broche 4 flotte, le PIC reset en boucle.__delay_ms est faux.