Un microcontrôleur est un circuit intégré rassemblant dans un même boitier un microprocesseur, plusieurs types de mémoires et des périphériques de communication (Entrées-Sorties).
Selon un arrêté français du 14 septembre 1990 relatif à la terminologie des composants électroniques[1] : " Circuit intégré comprenant essentiellement un microprocesseur (Un microprocesseur est un processeur dont les composants ont été suffisamment...), ses mémoires, et des éléments personnalisés selon l'application ".
Un microprocesseur a besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est...) de certains éléments pour fonctionner :
Ces différents blocs sont reliés par 3 bus :
Le fonctionnement est le suivant :
Traditionnellement, ces composants sont intégrés dans des circuits distincts. Le développement d'un tel système à base de microprocesseur se trouve donc pénalisé par (liste non exhaustive) :
Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de microprocesseur en rassemblant ces éléments essentiels dans un seul circuit intégré (Le circuit intégré (CI), aussi appelé puce électronique, est un composant électronique...). On parle alors de " système sur une puce " (en anglais : " System on Chip "). Dans la suite, nous nous intéressons plus particulièrement aux microcontrôleurs 8 bits, c’est-à-dire ceux dont le bus de données comportent 8 bits et le bus d'adresses 16 bits.
Les périphériques sont des circuits électroniques intégrés au microcontrôleur capables d'effectuer des tâches spécifiques. On peut mentionner entre autres :
Le fonctionnement des périphériques peut être paramétré et commandé par le programme et/ou les entrées-sorties (Dans un système à base d'un processeur, d'un microprocesseur, d'un microcontrôleur...). Les périphériques peuvent générer une interruption qui contraint le processeur (Le processeur, ou CPU (de l'anglais Central Processing Unit, « Unité centrale de...) à quitter le programme principal pour effectuer une routine d'interruption.
On peut classer les instructions qu'un microcontrôleur est capable d'effectuer en quelques groupes.
Le microcontrôleur passe une grande partie de son temps à transférer des octets d'un endroit à l'autre du système : d'un périphérique vers un registre interne ou vice-versa, d'un registre interne vers la mémoire RAM ou vice-versa. Ce qui ne peut en général pas être fait directement, c'est un transfert direct d'une case mémoire vers une autre ou vers un périphérique, ou une écriture en mémoire ROM, la structure du microcontrôleur rend obligatoire le passage des informations par un de ses registres internes. Remarquons que, sauf exceptions, il s'agit plutôt d'une copie que d'un transfert puisque la case mémoire d'origine garde son information (tant qu'on n'a pas écrit autre chose à la place).
Un microcontrôleur 8 bits n'est pas un grand mathématicien (Un mathématicien est au sens restreint un chercheur en mathématiques, par extension toute...). Tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou...) au plus est-il capable d'effectuer des additions, des soustractions, des multiplications et des divisions sur des nombres binaires de 8 bits. Toutes les opérations mathématiques (Les mathématiques constituent un domaine de connaissances abstraites construites à l'aide...) complexes telles que le traitement des grands nombres, des nombres fractionnaires, des puissances, des racines carrées, des fonctions trigonométriques, logarithmiques et exponentielles doivent être ramenées à une succession d'opérations simples portant seulement sur des octets. Des routines mathématiques (petits programmes permettant de réaliser les calculs complexes) ont été développées pour la plupart des microcontrôleurs populaires.
Les microcontrôleurs sont capables d'effectuer des opérations logiques : ET, OU, XOU (XOR), NON (inverseur), rotations, décalages. Les opérations sont opérées simultanément sur les bits correspondant des deux registres.
La comparaison des octets A et B, qui est considérée comme une opération logique (La logique (du grec logikê, dérivé de logos (λόγος),...), est réalisée comme une soustraction (La soustraction est l'une des opérations basiques de l'arithmétique. La soustraction...) dont on néglige le résultat ; on s'intéresse simplement au fait de savoir s'il est nul (ce qui signifie que A = B), positif (A > B) ou négatif (A < B). Ces indications sont inscrites dans des indicateurs d'états (petites mémoires d'1 bit situées dans le processeur).
Ces instructions sont utilisées pour :
Signalons que dans certains microcontrôleurs les périphériques sont considérés simplement comme des cases de mémoire et ils sont gérés par les instructions de transfert (entrées/sorties intégrées mémoire). D'autres microcontrôleurs disposent d'instructions spécifiques pour les entrées/sorties (entrées/sorties indépendantes).
Il s'agit d'instructions qui altèrent le déroulement normal du programme. On distingue les sauts et les sous-routines.
Tant les sauts que les sous-routines peuvent être :
On trouve dans ce groupe :
Ces instructions varient fort selon les familles des microcontrôleurs.
De nombreuses instructions font référence à des données se trouvant à différents endroits du microcontrôleur : registres internes du processeur, ROM, RAM, ports d'E/S. On appelle modes d'adressage les différentes façons de spécifier les endroits où se trouvent les données dont on a besoin.
Certaines opérations ne peuvent être réalisées que sur une donnée (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent...) se trouvant en un endroit bien précis du processeur (par exemple, l'accumulateur ou la pile). Dans ce cas, il n'est pas nécessaire de spécifier l'adresse du registre en question et on parle d'adressage implicite.
Le processeur dispose d'un certain nombre de registres de travail. De nombreuses instructions y font référence ; vu leur nombre peu élevé (8, par exemple), il suffit d'un petit nombre de bits pour spécifier le registre désiré (3 dans notre cas). On parle dans ce cas d'adressage registre ou inhérent.
Dans ce mode d'adressage, on donne l'adresse (généralement en 16 bits) de la donnée (Dans les technologies de l'information, une donnée est une description élémentaire,...) en mémoire (RAM, ROM ou port d'E/S s'il est intégré à la mémoire). Ce mode d'adressage permet d'indiquer n'importe quel endroit dans la mémoire, le prix à payer étant que l'on doit spécifier l'adresse concernée dans son intégralité (2 à 4 octets).
Certains processeurs implémentent aussi, pour réduire l'encombrement du programme, l'adressage direct restreint : l'adresse ne comporte qu'un octet (L’octet est une unité de mesure en informatique mesurant la quantité de...), et ce mode ne permet d'accéder qu'aux données se trouvant sur la page courante (adresses ayant donc les mêmes bits de poids (Le poids est la force de pesanteur, d'origine gravitationnelle et inertielle, exercée par la...) fort) ou sur la page 0 (adresses ayant donc les bits de poids fort à 0).
Dans ce mode d'adressage, l'adresse de la donnée se trouve dans un registre spécial du processeur (du même nombre de bits que son bus d'adresses), le pointeur de données. L'avantage, par rapport à l'adressage direct, est que l'adresse peut être manipulée commodément, par exemple pour accéder à une suite de données consécutives en mémoire. Ceci est particulièrement utile lorsqu'on manipule des données stockées dans un tableau (Tableau peut avoir plusieurs sens suivant le contexte employé :).
C'est un peu un abus de langage que de parler d'adressage dans ce cas-ci. En effet, la donnée suit tout simplement l'instruction.
Ce mode est assez semblable à l'adressage indirect à registre. Il fait appel à un registre spécial appelé " registre d'index ". Certains microcontrôleurs ne supportent pas ce mode, d'autres au contraire ont 1 ou même 2 registres d'index. Deux registres d'index sont particulièrement bienvenus lorsqu'il s'agit de déplacer un bloc de données dans la mémoire RAM.
Une instruction comporte généralement de 1 à 3 octets. Le premier octet est appelé code opératoire, il spécifie ce que l'on veut faire.
Le ou les octets suivants spécifient la donnée (adressage immédiat), une adresse restreinte, une adresse absolue (L'absolue est un extrait obtenu à partir d’une concrète ou d’un...) (16 bits) ou une donnée 16 bits (peu utilisé).
Une instruction traite au maximum deux données, si l'on se limite à 3 octets pour l'instruction, une seule des données peut être en RAM.
L'adresse de la prochaine instruction à exécuter est contenue dans un registre spécial du processeur, appelé pointeur de programme ou compteur de programme.
Comme de nombreux branchements s'effectuent vers des adresses mémoire proches de l'endroit où l'on se trouve au moment d'exécuter le branchement, on a prévu deux modes d'adressage plus compacts, ne nécessitant qu'un octet pour l'adresse :
Les microcontrôleurs sont souvent utilisés dans l'élaboration de systèmes embarqués, nécessitant des traitements spécialisés (autoradios, téléphones portables, lecteur mp3, GPS, etc.).
Ces circuits intégrés sont également très prisés en robotique amateur et permettent de réaliser de nombreuses applications, y compris des robots autonomes, les automatismes en modélisme (maquettes de réseau (Un réseau informatique est un ensemble d'équipements reliés entre eux pour échanger des...) ferroviaire).
Le langage C est le langage de prédilection (avec l'assembleur) du développement sur microcontrôleurs. Une fois le programme compilé, le fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce, un...) binaire doit être envoyé au microcontrôleur. On utilise soit :
On peut alors utiliser le système. Toutefois, le programme qui a été envoyé peut comporter des bogues, aussi, pour parvenir à les détecter on utilisera par exemple un émulateur in-circuit.