Sciences de l'Ingénieur · Bac Sciences Mathématiques B

Les Microcontrôleurs (PIC) — Cours, Architecture et Exercices

L'architecture interne d'un microcontrôleur PIC, la configuration des ports d'entrée/sortie et les bases de la programmation d'un système embarqué.

Objectifs d'apprentissage

  • Distinguer un microcontrôleur (CPU + mémoires + E/S intégrés) d'un microprocesseur
  • Décrire les blocs fonctionnels internes d'un microcontrôleur PIC : CPU, mémoire programme (Flash), mémoire de données (RAM), mémoire EEPROM, périphériques
  • Configurer un port en entrée ou en sortie via le registre de direction (TRIS) et lire/écrire sa valeur via le registre de données (PORT)
  • Décrire le rôle de l'horloge interne/externe et du cycle d'instruction
  • Expliquer le principe d'une interruption et la différence avec une scrutation (polling)
  • Lire un organigramme (algorigramme) décrivant le fonctionnement d'un programme embarqué simple
  • Associer une instruction en langage évolué (affectation, test, boucle) à son effet sur les broches du microcontrôleur

Formules et résultats clés

Microcontrôleur vs microprocesseur

Un microcontrôleur (le PIC en est une famille très répandue) intègre sur une seule puce l'unité centrale de traitement (CPU), la mémoire programme (Flash, non volatile), la mémoire de données (RAM, volatile) et des ports d'entrée/sortie — c'est un système complet et autonome. Un microprocesseur ne contient que le CPU et nécessite des composants externes pour fonctionner.

Blocs fonctionnels internes

  • CPU : exécute les instructions séquentiellement, une par une, au rythme de l'horloge.
  • Mémoire programme (Flash) : non volatile, contient le code exécutable, conservé même hors tension.
  • Mémoire de données (RAM) : volatile, contient les variables pendant l'exécution du programme.
  • Ports d'entrée/sortie : broches physiques configurables individuellement en entrée (lecture d'un capteur) ou en sortie (commande d'un actionneur).

Configuration des ports

Chaque port est associé à un registre de direction (TRIS sur les PIC) qui fixe, bit par bit, si la broche correspondante est une entrée ou une sortie, et à un registre de données(PORT) qui contient l'état logique effectivement lu ou à écrire sur chaque broche. Cette configuration doit être faite avant toute utilisation du port.

Cycle d'instruction

Le CPU exécute les instructions au rythme imposé par une horloge (interne ou à quartz externe) : chaque instruction s'exécute en un ou plusieurs cycles d'horloge. La durée d'un cycle dépend directement de la fréquence de cette horloge, ce qui conditionne la durée de toute temporisation réalisée par une boucle logicielle.

Interruption vs scrutation

La scrutation (polling) consiste à tester répétitivement, dans le programme principal, l'état d'une entrée. L'interruptionlaisse le matériel signaler lui-même l'événement : le programme principal est automatiquement suspendu, la routine d'interruption s'exécute, puis le programme principal reprend exactement où il s'était arrêté — une solution plus réactive et plus économe en temps processeur.

Erreurs fréquentes

1

Oublier de configurer le registre de direction (TRIS) avant d'utiliser un port : une broche laissée par défaut peut ne pas se comporter comme prévu en entrée ou en sortie.

2

Confondre mémoire programme (Flash, non volatile, contient le code exécutable) et mémoire de données (RAM, volatile, contient les variables pendant l'exécution) : elles n'ont ni la même taille, ni la même persistance à la mise hors tension.

3

Croire qu'une routine d'interruption s'exécute « en plus » du programme principal en parallèle : en réalité elle suspend totalement l'exécution du programme principal le temps de son traitement, avant de lui rendre la main.

4

Négliger le temps de cycle d'instruction lors de l'estimation d'une temporisation logicielle : une boucle d'attente dépend directement de la fréquence de l'horloge du microcontrôleur.

5

Confondre scrutation (le programme vérifie lui-même et répétitivement l'état d'une entrée) et interruption (le matériel signale lui-même l'événement, sans que le programme ait besoin de vérifier en boucle).

6

Oublier qu'un microcontrôleur PIC n'exécute qu'une instruction à la fois de façon séquentielle (hors interruption) : un algorigramme doit donc respecter strictement l'ordre logique des tests et affectations.

Exemple corrigé — Clignotant de LED

Énoncé

Une LED est reliée à la broche RB2 d'un PIC. On souhaite qu'elle clignote indéfiniment (allumée puis éteinte à intervalles réguliers). Décrire la configuration nécessaire du port et l'algorigramme (organigramme) du programme.

Correction

Configuration : mettre le bit correspondant à RB2 du registre TRISB à 0 (sortie), puisque la LED est un actionneur commandé par le microcontrôleur.

Algorigramme : Début → Mettre RB2 à 1 (LED allumée) → Attendre une durée fixe (temporisation) → Mettre RB2 à 0 (LED éteinte) → Attendre la même durée → Revenir à l'étape « Mettre RB2 à 1 » (boucle infinie).

La durée de la temporisation détermine la fréquence de clignotement perçue ; elle est réalisée soit par une boucle logicielle dont la durée dépend du cycle d'instruction, soit par un temporisateur matériel interne au microcontrôleur.

3 exercices pour t'entraîner

Exercice 1

Facile

On veut relier un bouton-poussoir à la broche RB0 (entrée) et une LED à la broche RB1 (sortie) d'un même port B. Quelles valeurs faut-il donner aux bits correspondants du registre TRISB ?

Voir la correction

Le registre TRISB fixe la direction de chaque broche du port B : un bit à 1 configure la broche en entrée, un bit à 0 la configure en sortie (convention standard des PIC). Il faut donc TRISB.0 = 1 (RB0 en entrée, pour lire le bouton) et TRISB.1 = 0 (RB1 en sortie, pour commander la LED).

Exercice 2

Moyen

Un microcontrôleur doit allumer une LED tant qu'un bouton est appuyé, et l'éteindre sinon. Décrire, en langage évolué, la structure de contrôle nécessaire dans la boucle principale du programme.

Voir la correction

Il faut une boucle infinie (le programme embarqué ne s'arrête jamais) contenant un test conditionnel : « Si l'état du bouton (lu sur la broche d'entrée) est actif, alors mettre la broche de sortie de la LED à 1 ; sinon, la mettre à 0 ». Ce test doit être répété en continu (scrutation) pour que la LED reste synchronisée avec l'état du bouton en temps réel.

Exercice 3

Difficile

Comparer, pour la détection d'un appui bouton, une solution par scrutation (le programme principal teste l'entrée en boucle) et une solution par interruption (le changement d'état de la broche déclenche automatiquement une routine dédiée). Quel est l'avantage principal de l'interruption si le programme principal doit aussi effectuer un calcul long en parallèle ?

Voir la correction

En scrutation, le programme principal doit consacrer du temps à vérifier régulièrement l'entrée, ce qui peut retarder ou interrompre un calcul long en cours, ou au contraire manquer un appui bref si le test n'est pas fait au bon moment. Avec une interruption, le programme principal peut exécuter son calcul sans se soucier du bouton : dès que l'événement matériel se produit, le microcontrôleur suspend automatiquement l'exécution en cours, exécute la routine de traitement de l'interruption (par exemple mettre à jour une variable ou piloter la LED), puis reprend exactement le calcul principal là où il avait été interrompu. L'interruption garantit donc une réactivité immédiate sans gaspiller de temps processeur en vérifications inutiles.

3 exercices, c'est un début.

Orka en génère autant que tu veux sur ce chapitre, à ton niveau, avec correction détaillée étape par étape.

Continue gratuitement sur Orka

Va plus loin sur ce chapitre

Questions fréquentes

Quelle est la différence entre un microcontrôleur et un microprocesseur ?

Un microprocesseur ne contient que l'unité de traitement (CPU) et a besoin de composants externes (mémoire, ports E/S) pour fonctionner. Un microcontrôleur intègre sur une seule puce le CPU, la mémoire programme, la mémoire de données et les ports d'entrée/sortie — c'est un système complet et autonome, adapté aux systèmes embarqués comme ceux étudiés en Sciences de l'Ingénieur.

Pourquoi un port doit-il être configuré en entrée ou en sortie avant utilisation ?

Chaque broche d'un port peut électriquement fonctionner soit comme une entrée (lecture d'un signal externe : capteur, bouton) soit comme une sortie (commande d'un actionneur : LED, relais). Le registre de direction (TRIS sur les PIC) fixe ce sens pour chaque bit du port ; sans cette configuration préalable, le microcontrôleur ne sait pas comment interpréter ou piloter électriquement la broche.

Qu'est-ce qu'une interruption et pourquoi est-elle utile ?

Une interruption est un événement (matériel ou logiciel) qui suspend temporairement l'exécution du programme principal pour exécuter une routine de traitement dédiée, puis reprend le programme là où il s'était arrêté. Elle évite d'avoir à vérifier en permanence (scrutation, ou « polling ») si un événement s'est produit, ce qui rend le système plus réactif et plus économe en temps de calcul.