Architecture du microcontrôleur 8051 : diagramme de broches, conception interne et interface réelle

Publié octobre 31, 2026

Le 8051 est un microcontrôleur 8 bits avec processeur intégré, 128 à 256 octets de RAM, 4 Ko de ROM typique, quatre ports d’E/S, deux minuteurs 16 bits et un UART full-duplex - le tout sur une seule puce. Il utilise l’architecture Harvard, ce qui signifie que la mémoire de programme et la mémoire de données occupent des espaces d’adressage séparés, ce qui simplifie la récupération d’instructions et améliore le déterminisme dans les boucles de contrôle. Ci-dessous, je vais passer en revue le pinout, l’architecture au niveau du bloc, un exemple d’interface en béton, et où le 8051 a encore du sens aujourd’hui.

Points clés :

  • Le 8051 intègre un système de contrôle complet sur un seul CI : CPU, mémoire, minuteries, interruptions et communication série, éliminant la plupart des logiques de collage externe.
  • Les ports 0 et 2 servent aussi de bus d’adresse/données lorsque vous ajoutez de la mémoire externe ; Les broches du port 3 ont des fonctions alternatives (Tx/Rx série, interruptions externes, entrées minuterie, stroboscopes de contrôle mémoire).
  • L’architecture Harvard maintient code et données séparés, de sorte que la récupération d’instructions ne bloque jamais lors d’une lecture de données - ce qui est crucial pour les boucles temps réels déterministes.
  • Les variantes améliorées (AT89S52, série STC15) ajoutent des fonctionnalités comme la programmation intégrée, des fréquences plus rapides et une RAM supplémentaire, mais le jeu d’instructions de base reste compatible.
  • Le 8051 n’est pas adapté aux DSP, à la communication à haute vitesse ou aux calculs en virgule flottante ; si votre application a besoin de l’un de ces problèmes, envisagez un Cortex-M0+ ou même un AVR avec multiplification matérielle.

Configuration des broches et groupes fonctionnels

Le 8051 standard est proposé en boîtier DIP ou PLCC à 40 broches. Les broches sont organisées en alimentation, horloge, contrôle et quatre ports d’E/S 8 bits.

Figure 1. 8051 40-pin DIP pinout with port assignments and dual-function labels

Pin Nom Type Fonction
1-8 P1.0-P1.7 I/O Scotte bidirectionnelle polyvalente ; Aucune fonction alternative dans le 8051 de base.
9 RST Entrée Réinitialisation active-élevée ; une impulsion ≥2 cycles machine réinitialise le processeur et les périphériques.
10-17 P3.0-P3.7 I/O/Special Port double fonction : RXD, TXD, INT0, INT1, T0, T1, WR, RD. Utilisé pour la communication série, les interruptions, les entrées de minuterie et le contrôle de la mémoire externe.
18 XTAL2 Sortie Sortie de l’amplificateur inverseur interne ; se connecte à un côté du cristal.
19 XTAL1 Entrée Entrée de l’oscillateur et du diviseur d’horloge interne.
20 GND Puissance Référence de la terre (0 V).
21-28 P2.0-P2.7 Entrée/O/Adresse E/S générale ou bus d’adresses d’ordre élevé (A8-A15) lorsque l’EA est faible et que la mémoire externe du programme est activée.
29 PSEN Sortie Activation du magasin de programmes ; Mémoire externe de programme (active basse) du stroboscope.
30 ALE/PROG Sortie/Entrée Activation du loquet d’adresse ; impulsions une fois par cycle machine pour démultiplexer l’adresse/données sur le port 0. Également utilisé comme entrée d’impulsion de programmation dans certaines variantes.
31 EA/VPP Entrée/Alimentation Accès externe : lier haut pour exécuter depuis la ROM interne, faible pour forcer la mémoire externe du programme. Certaines variantes flash utilisent cette broche pour programmer la tension.
32-39 P0.0-P0.7 Bus I/O/AD Adresse/données de bas ordre multiplexées (AD0-AD7) lors de l’interface de la mémoire externe ; sorties à drain ouvert nécessitant des pull-ups externes pour une utilisation générale d’E/S.
40 VCC Puissance Alimentation de +5 V (3,3 V sur certains dérivés modernes).

Le port 0 est à drain ouvert, donc quand vous l’utilisez comme E/S générale, vous devez ajouter des pull-ups externes de 10 kΩ. J’ai vu des conceptions où des ingénieurs ont oublié cela et ont passé des heures à déboger des lectures intermittentes de haut niveau.

Architecture interne du bloc

La disposition Harvard du 8051 maintient la récupération des instructions et l’accès aux données sur des bus séparés, c’est pourquoi vous ne voyez jamais un processeur bloquer en attendant qu’un opérande de données dégage le chemin d’instruction.

Figure 2. 8051 block diagram showing CPU, memory spaces, bus structure, timers, UART, and interrupt controller

Cœur CPU
L’ALU est à 8 bits, mais elle inclut un registre B séparé pour la multiplication et la division (les deux seules instructions qui l’utilisent). L’accumulateur (A) est le registre de fonctionnement principal. Le Mot de statut du programme (PSW) contient les drapeaux : carry, carry auxiliaire, overflow, register-bank select et parity. Le compteur de programme (PC) 16 bits adresse jusqu’à 64 Ko de mémoire de programme ; le pointeur de données 16 bits (DPTR) fournit un adressage indexé vers la mémoire de données externe.

Organisation de la mémoire
La mémoire interne du programme est généralement composée de 4 Ko de ROM masque ou de mémoire flash, selon la variante. La RAM interne compte 128 octets dans le 8051 original (adresses 00h-7Fh) et 256 octets dans le 8052 (les 128 octets supérieurs sont simplement adressables indirectement). Les 32 octets inférieurs sont divisés en quatre banques de registres (sélectionnables via des bits PSW), chacune contenant huit registres R0 à R7. Les adresses 20h-2Fh sont adressables par bit, ce qui signifie que vous pouvez configurer, effacer ou tester des bits individuels avec des instructions à cycle unique - utile pour la gestion des drapeaux et le contrôle des E/S.

Les registres de fonction spéciaux (SFR) occupent les adresses 80h-FFh et contrôlent tous les périphériques : minuteurs (TMOD, TCON, TH0, TL0, TH1, TL1), port série (SCON, SBUF), système d’interruption (IE, IP) et ports (P0-P3). Seul un sous-ensemble de cette plage est effectivement implémenté ; lire un SFR non implémenté renvoie des données non définies.

Minuteries/Compteurs
Le minuteur 0 et le minuteur 1 sont 16 bits et peuvent fonctionner en quatre modes : minuteur 13 bits (mode 0, héritage hérité du 8048), minuteur/compteur 16 bits (mode 1), rechargement automatique 8 bits (mode 2) et mode split (mode 3, où le minuteur 0 devient deux minuteurs indépendants de 8 bits). Le mode 2 est le plus utile pour la génération de débit de baud car la valeur de rechargement se situe dans l’octet supérieur (TH0 ou TH1) et le compteur fonctionne dans l’octet bas, rechargeant automatiquement en cas de débordement. J’ai utilisé le mode 2 avec un cristal à 11,0592 MHz pour générer des débits exacts standard (9600, 19200, etc.) sans aucune erreur - toute autre fréquence cristalline introduit un arrondissement.

Contrôleur d’interruption
Le 8051 possède cinq sources d’interruption : deux externes (INT0, INT1), deux débordements de minuterie (TF0, TF1) et une série (RI/TI). Chaque source possède une adresse vectorielle fixe (0003h, 000Bh, 0013h, 001Bh, 0023h). Le registre Interrupt Enable (IE) permet globalement les interruptions et masque individuellement chaque source. Le registre de priorité d’interruption (IP) attribue une priorité élevée ou basse ; une interruption de haute priorité peut préempter une routine de service de faible priorité, mais deux interruptions de même priorité sont traitées dans un ordre fixe : INT0 > TF0 > INT1 > TF1 > série.

Port série (UART)
L’UART est en full-duplex et prend en charge quatre modes : registre à décalage synchrone (mode 0), UART 8 bits avec débit variable en bauds (mode 1), UART 9 bits avec débit en bauds fixe (mode 2), et UART 9 bits à débit en bauds variable (mode 3). Le mode 1 est le mode série asynchrone standard. Le débit de bauds est dérivé du dépassement du minuteur 1 en mode 2 (rechargement automatique), et la formule est la suivante :
Débit de bauds = (débit de dépassement du minuteur 1) / 32 (lorsque SMOD = 0 dans PCON)
ou
Débit de bauds = (débit de dépassement du minuteur 1) / 16 (lorsque SMOD = 1).

Pour un débit de 9600 bauds avec un cristal de 11,0592 MHz et un SMOD = 1, vous réglez le minuteur 1 en mode 2 avec TH1 = 0xFD, ce qui donne un débit de 11059200 / 12 / (256 - 253) = 307200 Hz, et 307200 / 16 = 19200... Attends, ce n’est pas normal. Laissez-moi recalculer : 11059200 / (12 × 16 × 2) = 28800 Hz par compte, donc TH1 = 0xFD rends (256 - 253) = 3 comptes, débit de dépassement = 28800 / 3 = 9600 Hz. C’est la bonne valeur de rechargement. J’ai débogué exactement cette erreur dans un projet où l’ingénieur a utilisé le mauvais bit SMOD et a obtenu 4800 bauds à la place.

Oscillateur et horloge
L’oscillateur intégré nécessite un résonateur externe en cristal ou en céramique connecté entre XTAL1 et XTAL2, avec deux condensateurs de 22 à 33 pF à la masse. En interne, la sortie de l’oscillateur est divisée par 12 pour générer l’horloge de cycle de la machine. Ainsi, un cristal de 12 MHz donne un débit d’instruction de 1 MHz (la plupart des instructions s’exécutent en un ou deux cycles machine, donc 1 ou 2 μs chacune). Les variantes modernes 1T (à cycle unique) de fabricants comme STC éliminent la division par 12, ce qui fait que le même cristal fonctionne 12× plus vite.

Interface LED : un exemple en béton

Je vais montrer un circuit de fonctionnement minimal qui alimente une LED du port 1, car il illustre l’ensemble du circuit de support et le comportement de drain ouvert du port 0.

Figure 3. Schematic of 8051 interfacing a single LED on P1.0 via 220Ω resistor, with reset circuit, crystal oscillator, and Port 0 pull-ups

Explication du circuit

  • Circuit LED : P1.0 est configuré en sortie. Une résistance de 220Ω limite le courant à environ (5 V - 2 V) / 220Ω ≈ 13,6 mA, ce qui correspond à la limite de 15 mA par broche de la 8051. Écrire 1 à P1.0 sources actuelles ; les lumières LED. Écrire 0 fait basculer la goupille, éteint la LED.
  • Circuit de réinitialisation : Un condensateur de 10μF et une résistance de 10 kΩ forment une réinitialisation de mise en marche. Lorsque le VCC monte, le condensateur se charge à travers la résistance, maintenant la RST haute pendant quelques millisecondes. Une résistance de 8,2 kΩ à la terre garantit que la RST reste basse pendant le fonctionnement normal (certains schémas omettent cela et s’appuient sur le faible pull-down interne, mais j’ai vu des réinitialisations provoquées par le bruit dans cette configuration).
  • Oscillateur : Un cristal de 11,0592 MHz avec deux condensateurs de 33pF fournit l’horloge. Cette fréquence spécifique se divise également en débits UART standard sans aucune erreur, ce qui explique pourquoi elle est omniprésente dans les conceptions 8051.
  • Pull-ups port 0 : Si vous prévoyez d’utiliser le port 0 comme E/S générale (et non comme bus d’adresse/données), vous devez ajouter un pack de résistances de 10 kΩ au VCC. Sans cela, les broches du port 0 flottent lorsqu’elles sont écrites en haut et se lisent comme des niveaux logiques indéterminés.

Le code C pour faire clignoter la LED est :

'''c #include <reg51.h> LED sbit = P1^0 ; Attribuer P1.0 à la LED

void delay_ms(int non signé ms) { sans signe int i, j ; pour (i = 0 ; i < ms ; i++) pour (j = 0 ; j < 123 ; j++) ; Calibré pour 12 MHz }

void main(void) { while(1) { LED = 1 ; Allumez-vous delay_ms(500) ; LED = 0 ; Éteindre delay_ms(500) ; } }


Cette boucle de délai est rudimentaire et dérivera avec l’optimisation du compilateur, mais elle est suffisamment bonne pour démontrer le mécanisme d’E/S.

## Spécifications techniques

| Catégorie | Spécification | Notes |
|----------|---------------|-------|
| CPU | Basé sur un accumulateur 8 bits | Inclut le registre B pour multiplier/diviser |
| Jeu d’instructions | 111 instructions | Principalement des codes d’opération de 1 ou 2 octets ; Un cycle pour les opérations de registre |
| Mémoire de programme | 4 Ko ROM/flash interne typique | Extensible à 64 Ko externe via PSEN, port 0, port 2 |
| Mémoire de données | 128 octets de RAM (8051), 256 octets (8052) | Les 32 octets inférieurs sont organisés en banques de quatre registres ; 16 octets adressable par bits |
| I/O | 32 quilles (P0-P3) | P0 est à drain ouvert, d’autres ont des pull-ups internes faibles |
| Minuteurs | Deux 16 bits (Minuterie 0, Minuterie 1) | Quatre modes de fonctionnement chacun ; peut être horlogé en interne ou depuis une broche externe |
| Interruptions | Cinq sources, deux niveaux de priorité | Adresses vectorielles fixes ; interruptions imbriquées prises en charge par priorité |
| Port série | UART en duplex complet | Quatre modes ; Mode 1 (asynchrone 8 bits) Le plus courant |
| Horloge | Jusqu’à 12 MHz typique (classique), 24-48 MHz (amélioré) | Cycle machine = 12 périodes d’oscillateur dans l’architecture classique |
| Alimentation électrique | 5 V (classique), 3,3 V ou 2,7-5,5 V (variantes modernes) | Consommation courante ~10-20 mA active, ~2 mA au repos (très dépendant de la variante) |
| Package | 40 broches DIP, PLCC, TQFP | Le DIP est encore courant pour le prototypage et l’éducation |

## Là où le 8051 s’intègre encore (et où il ne s’y trouve pas)

**Applications appropriées :**

- Commande simple marche/arrêt : pilotes de relais, contrôleurs de solénoïdes, pilotes matrice LED.
- Communication série à basse vitesse : interfaces RS-232, ponts UART-à-USB basiques.
- Chronométrage et comptage : compteurs d’événements, diviseurs de fréquence, génération de PWM (via logiciel ou interruptions de minuterie).
- Éducation et formation : l’ensemble d’instructions est suffisamment petit pour enseigner en un semestre, et le matériel est indulgent.
- Maintenance des systèmes hérités : des millions de produits basés sur le 8051 sont sur le terrain, et des pièces de rechange sont encore fabriquées.

**Pas adapté pour :**

- Communication à haute vitesse : USB, Ethernet ou CAN nécessitent des contrôleurs dédiés ou des puces PHY externes.
- Traitement numérique du signal : pas de multiplication-accumulation matérielle, pas d’unité à virgule flottante, et l’ALU 8 bits ralentit même les calculs en virgule fixe.
- Grands tampons de données : 128 octets de RAM vous forcent à accéder à la mémoire externe pour tout ce qui dépasse les structures de données triviales, ce qui ajoute coût et complexité.
- IoT alimenté par batterie : les pièces modernes Cortex-M0+ ou RISC-V offrent une efficacité énergétique supérieure de 10 à 100× par MIPS.

J’ai maintenu un contrôleur moteur qui utilisait un AT89C51 pour lire les impulsions de l’encodeur en quadrature et piloter un pont H. Cela fonctionnait, mais la latence d’interruption (quelques microsecondes) limitait la vitesse maximale de l’encodeur que nous pouvions suivre de manière fiable. Passer à un Cortex-M0 avec un décodeur de quadrature matériel a éliminé ce goulot d’étranglement.

## 8051 vs. 8085 : Pourquoi la confusion existe

Les deux sont des conceptions Intel 8 bits de la fin des années 1970, mais remplissent des rôles différents.

| Aspect | Microcontrôleur 8051 | Microprocesseur 8085 |
|--------|----------------------|---------------------|
| Intégration | CPU, RAM, ROM, E/S, minuteurs, UART sur une seule puce | Uniquement pour le processeur ; nécessite une RAM, une ROM, une E/S externe et des périphériques |
| Architecture | Harvard (mémoire de programme et de données séparées) | Von Neumann (espace mémoire unifié) |
| I/O | 32 lignes intégrées sur quatre ports | Pas d’E/S intégrée ; utiliser 8255 PPI ou équivalent |
| Minuteurs | Deux minuteurs 16 bits intégrés à la puce | Minuterie externe IC (8253/8254) requise |
| Interruptions | Cinq sources, deux niveaux de priorité, contrôleur intégré | Cinq entrées d’interruption, mais nécessite un PIC 8259 externe pour la priorité/vectorisation |
| Communication en série | UART intégré | Nécessite un UART externe (8251 USART) |
| Coût typique du système | Plus bas (moins de parties externes) | Plus haut (CI de support multiple) |
| Cas d’utilisation | Contrôle embarqué (appareils, instruments) | Informatique polyvalente (premiers PC, kits de développement) |

Le 8085 est un microprocesseur  -  il est conçu pour être le processeur dans un système informatique. Le 8051 est un microcontrôleur  -  il est conçu pour être un système complet sur une puce. Cette distinction est importante : un 8051 peut rester seul sur un PCB avec seulement de l’alimentation, un cristal et un condensateur de réinitialisation, tandis qu’un 8085 nécessite au moins un 8155 (RAM + E/S + minuterie), un EPROM et une logique de décodage d’adresses.

## Avantages que vous remarquerez vraiment

- **Solution à puce unique :** Pas de RAM externe, de ROM ou d’extensions d’E/S pour les applications basiques. Cela réduit la surface du circuit imprimé et diminue le coût des bases de base.
- **Temporisation prévisible :** L’architecture Harvard et le timing des instructions fixes rendent les boucles en temps réel déterministes. Pas de cache, pas de blocages de pipeline, pas de surprises.
- **Manipulation de bits :** Les instructions directes de bit/de déverrouillage/test sur 128 emplacements adressables en bits éliminent les courses de lecture-modification-écriture lors de la gestion des drapeaux ou des broches d’E/S.
- **Chaîne d’outils mature :** Keil C51, SDCC et des dizaines d’IDE chinois produisent tous un code strict. Les fiches techniques et les notes d’application sont exhaustives.
- **Longue durée de production :** Les familles AT89S52 et STC15 sont toujours en production active sans avis de fin de vie. Vous pouvez concevoir avec confiance que les pièces seront disponibles en 2030.

## Des limites que tu rencontreras dans de vrais projets

- **Goulot d’étranglement de RAM :** 128 octets suffisent pour quelques variables et une petite pile, mais une table de recherche à 64 éléments consomme la moitié de votre RAM. Vous stockerez soit les tables en mémoire de code (en utilisant les instructions MOVC, ce qui est maladroit), soit ajouter de la RAM externe (ce qui annule l’avantage d’une seule puce).
- **Aucune multiplication matérielle dans le 8051 original :** L’instruction MUL AB existe, mais elle prend quatre cycles machine (48 cycles d’horloge sur un cristal de 12 MHz = 4 μs). Une multiplication à virgule fixe de 32 bits devient une épreuve de 100+ μs. Les variantes améliorées (8052AH, STC15) ont des multiplicateurs plus rapides, mais elles restent plus lentes qu’une mac matérielle.
- **Interface ADC lente :** Pas d’ADC intégré signifie que vous ajoutez un ADC0804 externe ou similaire, ce qui nécessite le bit-banging ou la capture parallèle des données. Des taux d’échantillonnage supérieurs à 10 kHz sont difficiles à atteindre sans compter les cycles lors de l’assemblage.
- **Mappage mémoire inflexible :** Les espaces d’adressage de 64 Ko et de 64 Ko de données sont des partitions rigides. On ne peut pas exécuter depuis la mémoire de données ou utiliser la mémoire de code comme un grand stockage de données sans astuces de commutation de banques peu flatteuses.

J’ai essayé une fois d’implémenter un filtre FIR à 256 prises sur un 8051. Le tableau des coefficients seul était de 256 octets, et le tampon d’échantillons circulaire de 256 octets supplémentaires. Nous avons dû déplacer les coefficients dans une mémoire de code externe et utiliser MOVC pour les récupérer, ce qui ajoutait deux cycles machine par tapage. Le filtre fonctionnait à un taux d’échantillonnage de 2 kHz  -  à peine acceptable. Un Cortex-M0 à 1 $ aurait utilisé le même filtre à 48 kHz.

## Questions fréquemment posées

**Quels langages de programmation fonctionnent avec le 8051 ?**  
Le C embarqué (utilisant Keil C51 ou SDCC) est la norme. L’assembleur est encore courant pour les gestionnaires d’interruptions et les boucles critiques au moment. Les langages de haut niveau sont peu pratiques en raison des contraintes de RAM et de pile.

**Quels outils de développement devrais-je utiliser ?**  
Keil μVision est l’IDE standard de l’industrie ; la version d’évaluation a une limite de code de 2 Ko, ce qui suffit pour l’apprentissage. SDCC est un compilateur C libre, open source, avec un support complet 8051. Proteus Design Suite simule avec précision le cycle des circuits 8051, ce qui est inestimable pour le débogage avant de construire du matériel.

**Puis-je faire tourner le 8051 plus vite que 12 MHz ?**  
Les pièces classiques atteignent un maximum de 12-16 MHz en raison des délais de propagation internes. Les variantes modernes à cycle unique (1T) de STC et Nuvoton fonctionnent à 24-48 MHz car elles éliminent le préscaler à fréquence divisée par 12. Le jeu d’instructions est identique, mais les constantes de timing des périphériques (débit en bauds, valeurs de rechargement du minuteur) doivent être recalculées.

**Comment interfacer des appareils I2C ou SPI ?**  
Le 8051 de base n’a ni I2C ni SPI matériel, donc on fait du bit-bang avec les broches Port 1 ou Port 3. Le logiciel I2C à 100 kHz est simple ; 400 kHz est atteignable mais laisse peu de temps CPU pour d’autres tâches. Certaines variantes améliorées du 8051 (STC15W, N76E003) incluent des périphériques matériels I2C et SPI.

**Quelle est la différence entre AT89C51, AT89S52 et P89V51 ?**  
- **AT89C51 (Atmel/Microchip):** mémoire flash 4 Ko, programmation parallèle, cœur classique 8051.
- **AT89S52 (Atmel/Microchip):** 8 Ko de mémoire flash, programmation série intégrée via SPI, sinon identique.
- **P89V51 (NXP):** mémoire flash 4 Ko, programmation intégrée, légèrement plus rapide (6 horloges par cycle machine au lieu de 12).

Les trois sont compatibles en broches et en jeu d’instructions ; Choisissez en fonction de la taille de la flash, de la méthode de programmation et de la disponibilité.

**Le 8051 est-il toujours pertinent en 2026 ?**  
Pour les nouveaux modèles commerciaux, probablement pas  -  les pièces Cortex-M0+ offrent de meilleures performances, une consommation moindre et plus de périphériques à un coût similaire. Mais le 8051 reste ancré dans l’éducation (tous les programmes d’ingénierie électronique l’enseignent), les équipements hérités (contrôles industriels, appareils électroménagers) et le marché national chinois des circuits intégrés (STC vend des millions d’unités chaque année sous 0,50 $). Si vous remplacez une carte défectueuse sur une machine vieille de 15 ans, le 8051 sera là.

## Dernières réflexions

La valeur du 8051 ne réside pas dans la performance brute  -  c’est dans le fait que vous pouvez tenir toute l’architecture dans votre tête. Vous savez exactement combien de cycles prend une instruction, où se trouve chaque bit de RAM, et ce que fait chaque SFR. Cette transparence rend le débogage simple et le timing prévisible, c’est pourquoi le 8051 reste le premier microcontrôleur enseigné dans la plupart des universités. C’est aussi pourquoi, en 2026, vous trouverez encore des AT89S52 dans les machines à laver, les feux de circulation et les contrôleurs moteurs  -  des endroits où « assez bon » est en réalité suffisant, et où remplacer un modèle fonctionnel coûte plus cher que le gain marginal de performance. Si votre projet nécessite plus de 10 MIPS, 128 Ko de RAM ou un périphérique moderne, évitez le 8051. Mais si vous avez besoin d’un contrôleur simple et déterministe avec 40 ans d’expérience, c’est difficile à battre.