Skip to content

Programmation C Embarqué | Microcontrôleurs PIC18F | mikroC PRO (Compiler)

License

Notifications You must be signed in to change notification settings

t4lhawi/Embedded-C

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Plan du Contenu :




1. Introduction aux Systèmes Embarqués

Un système embarqué est un système électronique et informatique intégré dans un dispositif plus large, dédié à une tâche précise. Il combine : microcontrôleur, logiciel embarqué, interfaces, capteurs et actionneurs.

embededd

  • Architecture Générale

    • Microcontrôleur / Microprocesseur :

      • Unité centrale d’exécution (CPU)
      • Utilise mémoire RAM, Flash, EEPROM
    • Mémoire :

      • Programme (Flash)
      • Données (RAM)
      • Stockage non volatile (EEPROM)
    • Interfaces d’E/S :

      • GPIO, ADC, DAC
      • UART, SPI, I2C
      • Timers, PWM
    • Capteurs & Actionneurs :

      • Capteurs : température, lumière, mouvement…
      • Actionneurs : moteurs, relais, écrans, LEDs…
  • Caractéristiques d’un Système Embarqué

    • Temps réel : respecter des délais stricts
    • Contraintes de ressources : mémoire limitée, faible consommation
    • Fiabilité & robustesse : fonctionnement continu
    • Optimisation : code compact, énergie faible
    • Autonomie : batterie, capteurs intégrés
  • Cycle de Développement

    • Analyse du besoin
    • Conception (hardware + software)
    • Programmation (C, C++, assembleur, RTOS)
    • Tests & validation (unitaires, temps réel, consommation)
    • Déploiement
    • Maintenance / mises à jour
  • Domaines d’Application

    • Automobile (ESP, ABS, ECU)
    • Aéronautique
    • Domotique et IoT
    • Robotique
    • Médical
    • Télécommunications
    • Industrie 4.0

2. Manipulation des Bits

  • Représentation Binaire d’un Octet (char) :

    Un type char est codé sur 8 bits, numérotés de b0 à b7.

    b7 b6 b5 b4 b3 b2 b1 b0
    MSB LSB
    • LSB : bit de poids Faible
    • MSB : bit de poids Fort
  • Opérations bit à bit (bitwise)

    Opération Symbole Code Description
    AND bit à bit & a = x & y Compare bit par bit. Le résultat vaut 1 seulement si les deux bits = 1.
    OR bit à bit | a = x | y Compare bit par bit. Le résultat vaut 1 si au moins un bit = 1.
    XOR bit à bit ^ a = x ^ y Résultat vaut 1 si les bits sont différents.
    NOT (négation) ~ a = ~x Inverse tous les bits (0→1, 1→0).
  • Opérations courantes sur un bit précis

    Opération Code Description
    Mettre un bit à 1 (SET) x |= (1 << n) Active le bit n.
    Mettre un bit à 0 (CLEAR) x &= ~(1 << n) Désactive le bit n.
    Inversion d’un bit (TOGGLE) x ^= (1 << n) Complémente le bit n : 0 ↔ 1.
    Extraction d’un bit (x >> n) & 1 Extrait l’état du bit (0 ou 1).
    Test logique d’un bit (TEST) if (x & (1 << n)) Vrai si le bit n vaut 1.
    Copier la valeur d’un bit bit = (x & (1 << n)) != 0 Copie la valeur du bit n dans une variable.
    Échange de deux bits (SWAP) char bi = (x >> i) & 1;
    char bj = (x >> j) & 1;
    x = (x & ~((1 << i) | (1 << j))) | (bi << j) | (bj << i);
    Échange les valeurs des bits i et j.
  • Décalages de bits

    Opération Symbole Code Description
    Décalage à Gauche << x << n Décale les bits vers la gauche (≈ $x \times 2^{n}$).
    Décalage à Droite >> x >> n Décale les bits vers la droite (≈ $\left\lfloor \dfrac{x}{2^{n}} \right\rfloor$).
  • Rotations de bits

    Opération Code Description
    Rotation à Gauche (x << n) | (x >> (8 - n)) Décalage circulaire vers la gauche (valeur conservée modulo $2^8$)
    Rotation à Droite (x >> n) | (x << (8 - n)) Décalage circulaire vers la droite (valeur conservée modulo $2^8$)
    • Les rotations conservent tous les bits, contrairement aux décalages.
    • Pour un char, on considère 8 bits (adapter 8 selon la taille du type).
  • Masques de bits (bit masks)

    Opération Code Description
    Créer un masque mask = 1 << n Masque avec seulement le bit n actif.
    Garder seulement certains bits x & mask Filtre tout sauf les bits du masque.
    Mettre certains bits à 1 x | mask Force les bits du masque à 1.
    Mettre certains bits à 0 x & ~mask Force les bits du masque à 0.

    |= → mettre à 1

    &=~ → mettre à 0

    ^=toggle

    & → tester

    << / >> → décaler


3. Microcontrôleur PIC18F

Le PIC18F¹ fait partie de la famille des microcontrôleurs 8 bits de Microchip, conçus pour les systèmes embarqués nécessitant performance, faible consommation, et contrôle bas niveau.

  • Architecture du Microcontrôleur PIC18F45K22

    arch_pic

    • Architecture Harvard² (Au Niveau de la Mémoire) :
      • Séparation entre mémoire programme et mémoire données
      • Accès parallèles permettant plus de rapidité
      • Pipeline matériel pour exécuter certaines instructions en un seul cycle

    arch_mem_pic

    • Architecture RISC³ (Au Niveau du Processeur) :
      • Ensemble d’instructions réduit, simple et optimisé
      • Exécution rapide : la majorité des instructions en 1 cycle
      • Idéal pour le contrôle temps réel et les applications industrielles

Le PIC18F se distingue également par :

  • Des ports d’E/S configurables (digital/analogique)
  • Une gestion avancée des interruptions
  • Plusieurs Timers 8/16 bits
  • Interfaces intégrées : UART, SPI, I²C, PWM
  • Convertisseur ADC 10 ou 12 bits selon modèle
  • Pins du Microcontrôleur PIC18F45K22

    pic18f

    Pin Nom Fonction principale
    1 MCLR / Vpp / RE3 Reset + programmation
    2 RA0 / AN0 E/S digitale + ADC
    3 RA1 / AN1 E/S digitale + ADC
    4 RA2 / AN2 E/S digitale + ADC
    5 RA3 / AN3 E/S digitale + ADC
    6 RA4 E/S digitale (open-drain)
    7 RA5 / AN4 / SS ADC + SPI Slave Select
    8 RE0 / AN5 ADC
    9 RE1 / AN6 ADC
    10 RE2 / AN7 ADC
    11 Vdd Alimentation +5V
    12 Vss Masse
    13 RA7 Horloge externe (OSC1)
    14 RA6 Horloge externe (OSC2)
    15 RC0 Timer
    16 RC1 / CCP2 PWM
    17 RC2 / CCP1 PWM
    18 RC3 / SCL / SCK I²C / SPI Clock
    19 RD0 E/S digitale
    20 RD1 E/S digitale
    21 RD2 E/S digitale
    22 RD3 E/S digitale
    23 RC4 / SDA / SDI I²C / SPI data
    24 RC5 / SDO SPI
    25 RC6 / TX UART Transmission
    26 RC7 / RX UART Réception
    27 RD4 E/S digitale
    28 RD5 E/S digitale
    29 RD6 E/S digitale
    30 RD7 E/S digitale
    31 Vss Masse (-)
    32 Vdd Alimentation (+)
    33 RB0 / INT0 Interruption externe
    34 RB1 / INT1 Interruption
    35 RB2 / INT2 Interruption
    36 RB3 / CCP2 PWM / Capture
    37 RB4 E/S digitale
    38 RB5 E/S digitale
    39 RB6 / PGC Programmation ICSP
    40 RB7 / PGD Programmation ICSP

    ADC = “Analog Digital Converter”

    • Il sert à convertir une tension analogique (0 à 5 V) en une valeur numérique (0 à 1023 pour un ADC 10 bits).

    PGC = “Program Clock (Horloge de programmation)”

    • Donne le timing

    PGD = “Program Data (Données de programmation)”

    • Transporte les valeurs 0/1 pour programmer la mémoire Flash

    Rxx = “Registres / Pins (RA0, RB5, RC6, etc.)”

    • R = Register (PORT)
    • A/B/C/D/E = le port
    • numéro = le bit/pin

    CCP = “Capture / Compare / PWM”

    • Capture : Mesurer la durée d’un signal, une fréquence…
    • Compare : Déclencher un événement à un moment précis.
    • PWM : Générer un signal PWM (moteurs, servos, LED dimming…)

    MCLR = “Master Clear (Broche Reset)”

    • Réinitialiser (redémarrer) le PIC
    • Activer le mode programmation (Vpp ≈ 12 V)
    • Utilisé par Pickit/ICD

4. Ports d’Entrée/Sortie (E/S)

  • Registres de Contrôle

    Registre Fonction Configuration
    PORTx Lecture/Écriture logique réel des broches Entrée / Sortie
    LATx Registre tampon (Latch) pour une écriture Stable Sortie Uniquement
    TRISx Direction du Port 1 = Entrée
    0 = Sortie
    ANSELx Sélection du Mode Analogique ou Numérique 1 = Entrée Analogique
    0 = Numérique (Digital)
    SLRCONx Contrôle du Slew Rate (réduction des EMI) Sortie (selon port / MCU)
    • Lire avec PORTx, Écrire avec LATx pour Évite Risque de Read-Modify-Write (RMW)
    • ANSELx = 1 ⇒ Entrée Analogique ⇒ TRISx = 1 Obligatoire !!
    • Pour toute E/S Digitale ⇒ ANSELx = 0
    • Manipulation des Sorties Toujours via LATx
  • Registres associés au PORTA

    Nom Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ANSELA ANSA5 ANSA3 ANSA2 ANSA1 ANSA0
    CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH<1:0>
    CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH<1:0>
    LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0
    VREFCON1 DACEN DACLPS DACOE DACPSS<1:0> DACNSS
    VREFCON2 DACR<4:0>
    HVLDCON VDRMAG BGVST IRVST HLVDEN HLVDL<3:0>
    PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
    SLRCON SLRE SLRD SLRC SLRB SLRA
    SRCON0 SRLEN SRCLK<2:0> SRQEN SRNQEN SRPS SRPR
    SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0>
    T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS<2:0>
    TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
    • — = emplacements non implémentés, lus comme ‘0’.
    • <n:m> → on prend tous les bits du bit n jusqu’au bit m, inclus.
  • Registres associés au PORTB

    Nom Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ANSELB ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0
    ECCP2AS CCP2ASE CCP2AS<2:0> PSS2AC<1:0> PSS2BD<1:0>
    CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0>
    ECCP3AS CCP3ASE CCP3AS<2:0> PSS3AC<1:0> PSS3BD<1:0>
    CCP3CON P3M<1:0> DC3B<1:0> CCP3M<3:0>
    INTCON GIE / GIEH PEIE / GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
    INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBIP
    INTCON3 INT2IP INT1IP INT2IE INT1IE INT2IF INT1IF
    IOCB IOCB7 IOCB6 IOCB5 IOCB4
    LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
    PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
    SLRCON SLRE SLRD SLRC SLRB SLRA
    T1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO / ¬DONE T1GVAL T1GSS<1:0>
    T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN ¬T3SYNC T3RD16 TMR3ON
    T5CON TMR5GE T5GPOL T5GTM T5GSPM T5GGO / ¬DONE T5GVAL T5GSS<1:0>
    TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
    WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0
    • — = emplacements non implémentés, lus comme ‘0’.
    • Les bits grisés ne sont pas utilisés pour PORTB.
    • <n:m> → on prend tous les bits du bit n jusqu’au bit m, inclus.
  • Registres associés au PORTC

    Nom Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ANSELC ANSC7 ANSC6 ANSC5 ANSC4 ANSC3 ANSC2
    ECCP1AS CCP1ASE CCP1AS<2:0> PSS1AC<1:0> PSS1BD<1:0>
    CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0>
    ECCP2AS CCP2ASE CCP2AS<2:0> PSS2AC<1:0> PSS2BD<1:0>
    CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0>
    CTMUCONH CTMUEN CTMUSIDL TGEN EDGEN EDGSEQEN IDISSEN CTTRIG
    LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0
    PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
    RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
    SLRCON SLRE SLRD SLRC SLRB SLRA
    SSP1CON1 WCOL SSPOV SSPEN CKP SSPM<3:0>
    T1CON TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN ¬T1SYNC T1RD16 TMR1ON
    T3CON TMR3CS<1:0> T3CKPS<1:0> T3SOSCEN ¬T3SYNC T3RD16 TMR3ON
    T3GCON TMR3GE T3GPOL T3GTM T3GSPM T3GGO / ¬DONE T3GVAL T3GSS<1:0>
    T5CON TMR5CS<1:0> T5CKPS<1:0> T5SOSCEN ¬T5SYNC T5RD16 TMR5ON
    TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
    TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
    • — = emplacements non implémentés, lus comme ‘0’.
    • Les bits grisés ne sont pas utilisés pour PORTC.
    • <n:m> → on prend tous les bits du bit n jusqu’au bit m, inclus.
  • Registres associés au PORTD

    Nom Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ANSELD ANSD7 ANSD6 ANSD5 ANSD4 ANSD3 ANSD2 ANSD1 ANSD0
    BAUDCON2 ABDOVF RCIDL DTRXP CKTXP BRG16 WUE ABDEN
    CCP1CON P1M<1:0> DC1B<1:0> CCP1M<3:0>
    CCP2CON P2M<1:0> DC2B<1:0> CCP2M<3:0>
    CCP4CON DC4B<1:0> CCP4M<3:0>
    LATD LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0
    PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
    RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
    SLRCON SLRE SLRD SLRC SLRB SLRA
    SSP2CON1 WCOL SSPOV SSPEN CKP SSPM<3:0>
    TRISD TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0
    • — = emplacements non implémentés, lus comme ‘0’.
    • <n:m> → on prend tous les bits du bit n jusqu’au bit m, inclus.
  • Registres associés au PORTE

    Nom Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    ANSELE ANSE2 ANSE1 ANSE0
    INTCON2 ¬RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBIP
    LATE LATE2 LATE1 LATE0
    PORTE RE3 RE2 RE1 RE0
    SLRCON SLRE SLRD SLRC SLRB SLRA
    TRISE WPUE3 TRISE2 TRISE1 TRISE0
    • — = emplacements non implémentés, lus comme ‘0’.
    • Les bits grisés ne sont pas utilisés pour PORTC.

5. Gestion des Interruptions

Une interruption est un événement qui provoque l'arrêt immédiat du programme principal pour exécuter une fonction spécifique appelée ISR (Interrupt Service Routine). Une fois le traitement terminé, le microcontrôleur reprend l'exécution du programme principal exactement là où il s'était arrêté.

  • Logique des Interruptions du PIC18

    interrupt_diag

    (1) : L’interruption RBIF nécessite également l’activation individuelle des broches IOCB.

  • Types des Interruptions (Sources)

    • Interruptions Externes

      Source Broche Description
      INT0 RB0 Interruption sur front externe
      INT1 RB1 Interruption sur front externe
      INT2 RB2 Interruption sur front externe
      RBIF RB4 à RB7 Changement d’état des broches PORTB
    • Interruptions Internes

      Catégorie Source Description
      Timers Timer0 Débordement du Timer0
      Timer1 Débordement du Timer1
      Timer2 Débordement du Timer2
      Timer3 Débordement du Timer3
      Analogiques ADC Fin de conversion A/N
      Comparateurs Interruption comparateur
      HLVD Détection basse tension
      Communication USART RX Réception série
      USART TX Fin d’émission
      SSP SPI / I²C
      Contrôle CCP1 Capture / Compare / PWM
      CCP2 Capture / Compare / PWM
      Mémoire / Bus EEPROM / FLASH Fin d’écriture
      Bus Collision Collision sur le bus
  • Mécanisme de Contrôle

    • Registres de Contrôle

      Catégorie Registres Fonction Description
      Contrôle Global INTCON, INTCON2, INTCON3 Interruptions de Base et Contrôle Global Bits GIE/PEIE :
      0 = Interruptions désactivées
      1 = Interruptions activées

      Bits IE :
      0 = Source désactivée
      1 = Source activée

      Bits IF :
      0 = Pas d'événement
      1 = Événement détecté
      Priorité IPR1 à IPR5 Niveaux de Priorité (si IPEN=1) Bits IPx :
      0 = Priorité basse
      1 = Priorité haute (uniquement valide si IPEN=1)
      Activation PIE1 à PIE5 Masques d'Activation Individuelle Bits IEx :
      0 = Interruption masquée
      1 = Interruption autorisée
      Flags PIR1 à PIR5 Indicateurs d'Événements Périphériques Bits IFx :
      0 = Événement non survenu
      1 = Événement survenu (à effacer manuellement)
      Configuration RCON Choix du Mode Bit IPEN :
      0 = Mode Priorité Unique (GIE/PEIE)
      1 = Mode Deux Priorités (GIEH/GIEL)
      • INTCON = INTerrupt CONtrol
      • IPR = Interrupt Priority Register
      • PIE = Peripheral Interrupt Enable
      • PIR = Peripheral Interrupt Request
      • RCON = Reset CONtrol
    • Contrôle Global (Bits Système)

      Bit Registre Nom Fonction Description
      IPEN RCON<7> Interrupt Priority Enable Définit l'architecture d'interruption 0 = Mode priorité unique
      1 = Mode deux priorités
      GIEH/GIE INTCON<7> Global Interrupt Enable (High) Gardien principal (nom change selon IPEN) 0 = Interruptions désactivées
      1 = Interruptions activées
      GIEL/PEIE INTCON<6> Global Interrupt Enable Low Contrôle secondaire (nom change selon IPEN) 0 = Périphériques désactivés
      1 = Périphériques activés
    • Contrôle par Source (Bits Spécifiques)

      Bit Symbole Localisation Fonction Description
      IE PIE1<bit> Registres PIE1-PIE5 Autorise l'interruption pour ce périphérique spécifique 0 = Source masquée
      1 = Source autorisée
      IF PIR1<bit> Registres PIR1-PIR5 Indicateur matériel d'événement (set automatiquement) 0 = Pas d'événement
      1 = Événement détecté (à effacer)
      IP IPR1<bit> Registres IPR1-IPR5 Définit la priorité (seulement si IPEN=1) 0 = Priorité basse
      1 = Priorité haute
  • Priorité des interruptions

    • Niveaux de Priorité

      Priorité Adresse vecteur Routine
      Haute priorité 0008h void interrupt()
      Basse priorité 0018h void interrupt_low()
      • La gestion des priorités est assurée par les registres IPRx.
      • Exception : l’interruption INT0 ne possède pas de bit de priorité → toujours haute priorité.
    • Modes de Fonctionnement

      Bit IPEN = 0 (Mode Simple) IPEN = 1 (Mode Priorité)
      INTCON<7> : (GIE/GIEH) GIE = 1 : Active Tout
      GIE = 0 : Désactive Tout
      GIEH = 1 : Active Haute Priorité
      GIEH = 0 : Désactive Tout
      INTCON<6> : (PEIE/GIEL) PEIE = 1 : Active Périphériques
      PEIE = 0 : Désactive Périphériques
      GIEL = 1 : Active Basse Priorité
      GIEL = 0 : Désactive Basse Priorité
  • Registres de Gestion d'Interruption

    • Registres de Contrôle Global

      • INTCON - Contrôle Interruptions de Base

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
        • Bits 7-6 : Contrôle global (noms changent selon IPEN)
        • Bits 5-3 : Activation des interruptions de base
        • Bits 2-0 : Flags d'interruption de base
      • INTCON2 - Configuration Interruptions Externes

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBIP
      • INTCON3 - Interruptions Externes 1 & 2

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        INT2IP INT1IP INT2IE INT1IE INT2IF INT1IF
    • Registres de Priorité (IPR1 à IPR5)

      • IPR1 - Priorités Périphériques (Groupe 1)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP
      • IPR2 - Priorités Périphériques (Groupe 2)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IP
      • IPR3 - Priorités Périphériques (Groupe 3)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIP
      • IPR4 - Priorités Périphériques (Groupe 4)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        CCP5IP CCP4IP CCP3IP
      • IPR5 - Priorités Périphériques (Groupe 5)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        TMR6IP TMR5IP TMR4IP

      Valeurs IP bits : 0 = Basse priorité, 1 = Haute priorité (si IPEN=1)

    • Registres d'Activation (PIE1 à PIE5)

      • PIE1 - Activation Périphériques (Groupe 1)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IE
      • PIE2 - Activation Périphériques (Groupe 2)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IE
      • PIE3 à PIE5 - Structure identique à IPR3-IPR5 mais avec suffixe IE

      Valeurs IE bits : 0 = Désactivé, 1 = Activé

    • Registres de Flags (PIR1 à PIR5)

      • PIR1 - Flags Périphériques (Groupe 1)

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF
      • PIR2 à PIR5 - Structure identique à PIE2-PIE5 mais avec suffixe IF

      Valeurs IF bits : 0 = Pas d'événement, 1 = Événement détecté (à effacer manuellement)

    • Registres de Configuration

      • ANSELB - Configuration Analogique/Digital

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        ANSB5 ANSB4 ANSB3 ANSB2 ANSB1 ANSB0
      • IOCB - Interrupt-on-Change Port B

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        IOCB7 IOCB6 IOCB5 IOCB4
      • RCON - Registre de Contrôle Système

        Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
        IPEN SBOREN RI TO PD POR BOR
        • Bit 7 (IPEN) : 0=Mode simple, 1=Mode deux priorités
        • Bits 4-0 : Indicateurs de reset (Power-on, Brown-out, etc.)

6. Gestion des Timers

Un Timer est un périphérique matériel qui agit comme un chronomètre ou un compteur indépendant du processeur. Il permet d'exécuter des tâches répétitives avec une précision temporelle parfaite sans bloquer le programme principal.

  • Caractéristique des Timers

    Caractéristique Timer 0 Timer 1/3/5 Timer 2/4/6
    Taille 8/16-bit 16-bit (TMRxH:TMRxL) 8-bit (TMRx et PRx)
    Mode Timer / Compteur Timer / Compteur Timer
    Prédiviseur (Prescaler) 8-bit Programmable Software Prédiviseur 2-bit Programmable Software (1:1, 1:4, 1:16)
    Post-diviseur (Postscaler) Non Non Programmable (1:1 à 1:16)
    Source Horloge Interne (Système) / Externe Interne / Externe / 32kHz Interne
    Interruption Overflow Overflow Sur match TMRx=PRx
    Applications Délais, Comptage Mesure, RTC, CCP PWM, Timing
    • Prédiviseur : Diviseur de Fréquence AVANT le Compteur.
      • Sans Prédiviseur : 1 tic = 1s
      • Prédiviseur 1:8 : 8 tics = 1s → (1:8 = 1:2ᵇⁱᵗ)
    • Post-diviseur : Diviseur de Fréquence APRÈS le Compteur, sur l'interruption.
      • Sans Post-diviseur : Interruption à Chaque Overflow
      • Post-diviseur 1:10 : Interruption Tous les 10 Overflows
  • Timer 0 (TMR0)

    • Registre de Contrôle

      Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
      TMR0ON T08BIT T0CS T0SE PSA T0PS<2:0>
      • Bit 7 : TMR0ON - Timer0 Activation

        • 0 = Désactivé
        • 1 = Activé
      • Bit 6 : T08BIT - Mode Timer0

        • 0 = Mode 16-bit
        • 1 = Mode 8-bit
      • Bit 5 : T0CS - Source d'Horloge

        • 0 = Horloge Interne (Cycle d'Instruction Fosc/4)
        • 1 = Horloge Externe (Broche RA4 / T0CKI)
      • Bit 4 : T0SE - Front d'Horloge Externe

        • 0 = Front Montant (LOW→HIGH)
        • 1 = Front Descendant (HIGH→LOW)
      • Bit 3 : PSA - Attribution du Prédiviseur

        • 0 = Attribué
        • 1 = NON Attribué
      • Bits 2-0 : T0PS<2:0> - Sélection du Prédiviseur

        T0PS2 T0PS1 T0PS0 Valeur Prédiviseur
        0 0 0 1:2
        0 0 1 1:4
        0 1 0 1:8
        0 1 1 1:16
        1 0 0 1:32
        1 0 1 1:64
        1 1 0 1:128
        1 1 1 1:256
    • Mode Fonctionnement

      Champ / Bit Mode Timer (T0CS = 0) Mode Compteur (T0CS = 1)
      T0CON<5> : T0CS 0 : Source Interne (Fosc/4) 1 : Source Externe (Broche RA4 / T0CKI)
      T0CON<4> : T0SE Ignoré (Sans Effet) 0 : Comptage sur Front Montant
      1 : Comptage sur Front Descendant
    • Registres Associés

      Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
      INTCON GIE / GIEH PEIE / GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
      INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 TMR0IP RBIP
      T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS<2:0>
      TMR0H Timer0 Register, High Byte <15:8>
      TMR0L Timer0 Register, Low Byte <7:0>
      TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
      • Si T08BIT = 1 (8-bit) :
        • TMR0H est Ignoré
        • Seul TMR0L est Utilisé
    • Période de Débordement (Overflow)

      • Période d’Horloge du Timer

        En mode Timer (T0CS = 0) :

        $T_H = \frac{4}{F_{osc}}$
      • Temps Avant Débordement
        $T_0 = \text{Iteration} \times \text{Prediv} \times T_H$
        • Iteration = nombre d’incréments du Timer
        • Prediv = prescaler
        • $T_H$ = période d’horloge
      • Valeur initiale du Timer0
        $\text{TMR0}_{init} = \text{Max}_{Timer0} - \text{Iteration} + 1$
      • Valeur maximale du Timer0
        Mode Max
        8-bits 255
        16-bits 65535
      • Valeurs Possibles du Prédiviseur
        $\text{Prediv} \in \{1, 2, 4, 8, 16, 32, 64, 128, 256\}$
  • Timer 1/3/5 (TMR1/3/5)

  • Timer 2/4/6 (TMR2/4/6)


7. Gestion de CAN


🧑🏻‍💻 | Made By : Mohamed Talhaoui