mcu 101

Introduction au coeur du micro-controlleur

Si vous avez déjà fait de la programmation avec un langage de haut-niveau comme le C ou le basic mais n'avez jamais étudier les microprocesseurs au niveau matériel, vous trouverez peut-être ici des informations intéressantes.

Qu'est-ce qu'un micro-controlleur
La différence entre un micro-controlleur et un micro-processeur d'usage général comme ceux qu'on retrouve dans les ordinateurs ne tiens pas seulement à la puissance de traitement. Contrairement aux micro-processeurs d'usage général comme le 6502 qu'on retrouvait dans le apple II par exemple, les micro-controlleurs n'ont pas de bus externe pour accéder de la mémoire ou serait stocké programme et données. La seule mémoire accessible est interne au MCU. Dans le cas des MCU PIC il s'agit de la mémoire programme d'un côté et de l'autre les registres de périphériques et de données. Mémoire de programme et mémoire de données sont séparés, c'est ce qu'on appelle une architecture Harvard.
que retrouve-ton à l'intérieur?

  • la mémoire flash pour stocker le programme.
  • les registres de contrôle des périphériques tel que timer, convertisseurs analogique-numérique, ports d'entré/sortie, etc.
  • les registres de donner pour stocker les variables.
  • les registres spéciaux pour vérifier ou contrôler les états machines comme le STATUS register ou l'OPTION register.
  • le compteur ordinal qui contient l'adresse de la prochaine instruction à exécuter.
  • La pile des retours qui garde les addresses ou doit retourner le compteur ordinal à la sortie d'une sous-routine.
  • L'unité arithmétique et logique (ALU) qui effectue toutes les opérations sur les données.




  • Le décodeur d'instruction, qui reçoit les instructions de la mémoire programme et effectue tout les branchements nécessaire à l'exécution de l'instruction. Dans le cas des PIC ça se fait en 4 cycle d'horloge.

MCU PIC de base

Les MCU de base comme le PIC10F202 (illustré ci-haut) ont un minimum d'éléments internes. L'exécution se déroule en 4 phases.

  1. l'instruction pointé par le compteur ordinal est extraite de la mémoire programme (en fait du pipeline).
  2. l'instruction est décodée.
  3. l'instruction est exécutée dans l'ALU ou s'il s'agit d'un mouvement de donnée le registre source est lue.
  4. le résultat est enregistré dans un registre destination.
Dans les MCU PIC le registre W joue un rôle central. toutes les opérations de l'ALU à 2 opérandes utilise ce registre comme opérande et peuvent optionnellement retourner le résultat dans ce registre. De plus tous les mouvements de données passe par ce registre. Par exemple si on veut enregistrer une constante dans une variable on doit d'abord la mettre dans W ensuite la tranférer de W vers la variable. Si on veut copier une donnée d'un registre à un autre on doit aussi passé par W.

Les opérations effectuées par un MCU de base sont réduites et simples, il y en a 5 types:

  • opérations logiques: COMPLÉMENT DE 1, OU, ET, OU EXLUSIF, rotation a gauche et rotation à droite, forcer un bit à une valeur.
  • opération arithmétique: ADDITION, SOUSTRACTION, INCRÉMENTER,DÉCRÉMENTER
  • déplacement de données: mettre une valeur dans W, transférer W dans un registre, transférer un registre dans W
  • contrôle de flux: aller à une adresse, appel de sous-routine, sortie de sous-routine, saut conditionnel
Toutes ces opérations sont élémentaires et il y en a 33 au total, donc facile à mémoriser. Si vous comprenez la logique Booléenne vous n'aurez pas de difficulter à apprendre la programmation assembleur. Mais c'est certain qu'écrire un programme en assembleur c'est plus long que de le faire dans un langage de haut niveau. Quand les briques sont petites il en faut beaucoup plus pour monter un mur mais le principe demeure le même. Et puis les macros et les librairies de procédures sont là pour faciliter la tâche.