Accueil🇫🇷Chercher

Intel 8051

Intel 8051 ou 8051 est un microcontrôleur (MC) développé par Intel en 1980 pour être utilisé dans des produits embarqués. C'est encore une architecture populaire ; de nombreux microcontrôleurs plus récents incorporent un cœur 8051, complété par un certain nombre de circuits périphériques intégrés sur la même puce, et dotés de mémoires de plus grande capacité.

Intel P8051.

La structure d'un système à microprocesseur (MP) est indiquée dans la figure ci-après.

Structure d'un système à microprocesseur
  • Le MP, parfois appelĂ© unitĂ© centrale, est le cĹ“ur du système, puisque c'est lui qui est chargĂ© d'exĂ©cuter les instructions du programme.
  • Le programme est inscrit dans la mĂ©moire ROM du système ; il s'agit d'une mĂ©moire non volatile, c’est-Ă -dire qui prĂ©serve les informations qu'elle contient mĂŞme en l'absence d'alimentation Ă©lectrique.
  • La mĂ©moire vive ou RAM sert Ă  stocker des informations durant le fonctionnement du programme : informations en provenance de l'extĂ©rieur, donnĂ©es intermĂ©diaires dans les calculs...
  • Les ports d'entrĂ©es/sorties permettent la communication du système avec le monde extĂ©rieur ; les pĂ©riphĂ©riques d'entrĂ©e seront par exemple des boutons-poussoirs, des interrupteurs, des commutateurs, des compteurs, des convertisseurs analogiques/numĂ©riques... ; les pĂ©riphĂ©riques de sortie seront des tĂ©moins Ă  leds, des relais, des moteurs, des convertisseurs numĂ©riques/analogiques... En gĂ©nĂ©ral, un circuit d'interface de puissance est placĂ© entre le port de sortie et le pĂ©riphĂ©rique commandĂ©.

Un microcontrĂ´leur (MC) rĂ©unit ces diffĂ©rentes fonctions Ă©lectroniques sur une mĂŞme puce. Dans les paragraphes qui suivent, nous allons dĂ©crire les principales parties du microcontrĂ´leur 8051. Le 8051 est un MC 8 bits car il traite des donnĂ©es sur 8 bits ; le bus de donnĂ©es comporte donc 8 lignes ; comme la plupart des MC 8 bits, le 8051 gère des adresses en 16 bits, ce qui donne un espace adressable de 216 octets soit 64 kio.

Structure de l'unité centrale

L'unité centrale est le cœur du MC. Elle est chargée d'exécuter les instructions du programme. On peut distinguer 3 parties : traitement des données, gestion des adresses, traitement des instructions.

Traitement des données

Cette partie comporte 3 registres et une unité arithmétique et logique (UAL). Les instructions du 8051 permettent d'agir sur 1 ou 2 données de 8 bits à la fois, pas plus. Le fonctionnement est le suivant : les registres de 8 bits TMP1 et TMP2 présentent à l'UAL la ou les données à traiter. Après traitement, le résultat est placé dans l'accumulateur (Acc). Il peut être utilisé pour un nouveau calcul, envoyé dans une mémoire (RAM ou registre de travail) ou vers un port de sortie.

L'UAL comporte les circuits suivants :

  • un additionneur pour 2 nombres de 8 bits ; le 9e bit de l'addition est placĂ© dans l'indicateur d'Ă©tat C (Carry) ;
  • un soustracteur pour 2 nombres de 8 bits ; l'emprunt Ă©ventuel gĂ©nĂ©rĂ© si le rĂ©sultat est nĂ©gatif est aussi placĂ© dans un indicateur d'Ă©tat ;
  • un circuit de multiplication pour 2 nombres de 8 bits ; ici, le rĂ©sultat peut nĂ©cessiter jusqu'Ă  16 bits ; les 8 bits les plus significatifs sont placĂ©s dans un registre B prĂ©vu Ă  cet effet ;
  • un circuit de division pour 2 nombres de 8 bits ; il s'agit ici d'une division entière : le quotient est placĂ© dans l'Acc, le reste dans le registre B ;
  • 8 circuits logiques de type inverseur, ET, OU, XOU ;
  • de nombreux tampons 3 Ă©tats pour permettre les communications entre les registres, l'UAL et le bus de donnĂ©es aux moments adĂ©quats.

Une série de bascules, appelées indicateurs d'état, sont automatiquement positionnées lors des opérations arithmétiques. L'état de ces indicateurs peut être testé par les instructions de branchement conditionnel.

Le 8051 comporte 32 registres de travail, organisés en 4 groupes de 8 registres. Ces registres constituent des mémoires temporaires, où l'on place provisoirement des informations dont on sait qu'elles seront nécessaires peu de temps après. L'intérêt des registres de travail, c'est que le temps d'accès est plus court que pour une lecture ou écriture en RAM, et les instructions nécessaires pour y accéder plus courtes.

Gestion des adresses

L'espace mémoire d'un 8051 est partagé en 3 zones bien distinctes :

  • la zone programme ; pour assurer sa permanence en l'absence d'alimentation, le programme est mis en mĂ©moire ROM ; on peut Ă©galement placer dans la ROM, en mĂŞme temps que le programme, des donnĂ©es permanentes qui pourraient ĂŞtre utiles : facteurs de conversion pour des calculs, informations diverses tels que noms de jours de la semaine, des mois...
  • la zone donnĂ©es, en RAM ;
  • la pile : il s'agit d'une zone de RAM qui est utilisĂ©e principalement pour prĂ©server les adresses de retour des sous-programmes ; on peut Ă©galement l'utiliser comme zone de stockage temporaire (un peu comme les registres de travail) ou pour l'Ă©change de donnĂ©es entre programme principal et sous-programmes.

Le 8051 comporte donc très naturellement trois registres consacrés à la gestion des adresses.

  • Le pointeur de programme, aussi appelĂ© compteur ordinal (PC, Program Counter), est un registre de 16 bits qui contient Ă  tout moment l'adresse de la prochaine instruction Ă  exĂ©cuter. Il est mis Ă  0 au moment de la mise sous tension du système ; le programme doit donc impĂ©rativement commencer Ă  l'adresse 0000h (h signifiant code hexadĂ©cimal, c'est le code le plus couramment employĂ© pour dĂ©finir les zones d'adresse dans les MP et MC). La plupart du temps, ce pointeur est simplement incrĂ©mentĂ© chaque fois que l'on va chercher dans la ROM un octet du programme (une instruction comporte de 1 Ă  3 octets). Toutefois, le contenu du pointeur est complètement modifiĂ© lorsque l'on doit effectuer un branchement (saut ou sous-programme), puisque c'est alors l'adresse de l'endroit oĂą l'on veut aller qui y est introduite. Pour permettre au MP de revenir Ă  l'endroit de dĂ©part dans le cas des sous-programmes, on sauvegarde dans la pile l'adresse Ă  laquelle on Ă©tait avant d'effectuer le branchement.
  • Pour lire ou Ă©crire une donnĂ©e dans la RAM, l'adresse souhaitĂ©e doit se trouver dans le pointeur de donnĂ©es (DPTR, Data Pointer).
  • Enfin, le programmeur dĂ©finit la zone de RAM qu'il va attribuer Ă  la pile en introduisant, au dĂ©marrage du programme, l'adresse de dĂ©part de la pile dans le pointeur de pile (SP, Stack Pointer). Le pointeur indique Ă  chaque instant la plus haute adresse occupĂ©e dans la pile. Il est incrĂ©mentĂ© au moment oĂą l'on veut charger un nouvel octet dans la pile, et dĂ©crĂ©mentĂ© si l'on retire un octet. Par dĂ©faut, le pointeur est initialisĂ© Ă  07h au dĂ©marrage. Le pointeur peut aussi ĂŞtre modifiĂ© par le programme.

Traitement des instructions

Les instructions comportent de 1 à 3 octets. Le premier octet, appelé code opératoire, précise de quelle instruction il s'agit. Certaines instructions nécessitent une donnée (8 bits) ou une adresse restreinte (8 bits), voire une adresse absolue (16 bits).

Le code opératoire est placé dans le registre d'instructions, prévu à cet effet. Il est présenté à un décodeur qui détermine le type d'instruction et, le cas échéant, ira lire 1 ou 2 octets supplémentaires qui seront placés dans des registres ad hoc (donnée ou adresse).

Le bloc traitement des instructions est piloté par une horloge ; le 8051 contient tous les éléments de l'horloge, à l'exception des composants qui déterminent la fréquence d'oscillation : généralement un quartz, mais un circuit RC peut aussi être utilisé si une connaissance précise de la fréquence n'est pas nécessaire. Le bloc génère des signaux de contrôle (lecture, écriture) tant pour les autres blocs du MC que pour les circuits extérieurs éventuels (mémoires externes...).

MĂ©moires

  • Le 8051 comporte une mĂ©moire ROM de 4Ko ; cette mĂ©moire doit ĂŞtre programmĂ©e par le constructeur, au moment de la fabrication du composant. D'autres membres de la famille du 8051, tels le 8751 remplacent la ROM par une EPROM, qui peut ĂŞtre programmĂ©e (et effacĂ©e) par l'utilisateur. Le coĂ»t est plus Ă©levĂ©, mais ce composant est fort utile dans la phase de mise au point du programme puisqu'il permet de modifier le programme.
  • Le 8051 comporte une mĂ©moire RAM de 128 octets. Celle-ci comporte 3 zones :
    • les 32 octets de 00h Ă  1Fh peuvent ĂŞtre utilisĂ©s comme 4 groupes de 8 registres de travail ;
    • les 16 octets de 20h et 2Fh sont utilisĂ©s pour les variables boolĂ©ennes, c’est-Ă -dire des variables d'un bit ;
    • les octets 80 qui restent, de 30h Ă  7Fh, constituent la RAM proprement dite ; rappelons qu'il faudra rĂ©server une zone de RAM pour la pile, en gĂ©nĂ©ral quelques octets dans le haut de la mĂ©moire.

Remarque : les octets qui ne sont pas utilisés comme registres de travail ou pour les variables booléennes peuvent être utilisés comme RAM conventionnelle.

  • Le 8051 comporte aussi un certain nombre de registres appelĂ©s SFR (Special Function Registers). Ces registres contrĂ´lent le fonctionnement des divers pĂ©riphĂ©riques intĂ©grĂ©s : ports d'entrĂ©es/sorties, compteurs/temporisateurs etc.

La tendance, dans les systèmes utilisant un MC, est de choisir un composant disposant d'une ROM et d'une RAM de capacité suffisantes pour stocker l'entièreté du programme et l'ensemble des données. Toutefois, si nécessaire, on peut adjoindre au MC des mémoires externes. Le MC se comporte alors comme un microprocesseur. Des lignes qui sont normalement utilisées comme ports d'entrées/sorties sont converties en bus d'adresses et de données. Dans ce type d'applications, on choisira généralement des MC sans ROM interne, tels le 8031.

Modes d'adressage

Le 8051 admet 6 modes d'adressage :

  • l'adressage implicite ;
  • l'adressage registre, qui est utilisĂ© pour spĂ©cifier un des 8 registres de travail du groupe actif (le groupe actif est spĂ©cifiĂ© par 2 bits dans un des SFR ; Ă  la mise sous tension, c'est le groupe 0 qui est spĂ©cifiĂ© ;
  • l'adressage direct restreint : utilisĂ© pour accĂ©der Ă  la RAM et aux SFR ;
  • l'adressage indirect Ă  registre : utilisĂ© pour accĂ©der Ă  la RAM interne, externe et aux ports d'E/S ; pour les adresses en 8 bits, c'est le registre de travail R0 ou R1 qui joue le rĂ´le de pointeur de donnĂ©es ; pour les adresses en 16 bits, c'est le DPTR (Data Pointer) ;
  • l'adressage immĂ©diat, oĂą la donnĂ©e suit le code opĂ©ratoire ;
  • l'adressage indexĂ© : c'est une variante de l'adressage indirect Ă  registre : l'adresse de la donnĂ©e est calculĂ©e en additionnant les contenus de l'Acc et du pointeur de programme (Acc + PC) ou du pointeur de donnĂ©es (Acc + DPTR).

Jeu d'instructions

Dans cette section, nous donnons un aperçu du jeu d'instructions du 8051 en employant la syntaxe du constructeur, Intel :

  • Rr : registre de travail R0 Ă  R7 du groupe sĂ©lectionnĂ©
  • direct : adresse directe (RAM ou SFR)
  • @Ri : case de RAM pointĂ©e par R0 ou R1
  • @DPTR : case mĂ©moire pointĂ©e par le DPTR
  • #data : donnĂ©e immĂ©diate 8 bits
  • #data16 : donnĂ©e immĂ©diate 16 bits
  • bit : adresse bit (dans les 16 octets pour variables boolĂ©ennes et les SFR)
  • addr16 : adresse de destination pour les branchements
  • rel : adresse relative pour les branchements ; l'adresse est indiquĂ©e en complĂ©ment Ă  2, de façon Ă  pouvoir effectuer des sauts en avant ou en arrière (les nombres de 128 Ă  255 sont considĂ©rĂ©s comme des nombres nĂ©gatifs)

Instructions de transfert

Les adresses de source et de destination peuvent ĂŞtre l'Acc, un registre de travail, une case de RAM interne ou externe, un port d'E/S ; la ROM ne peut servir que de source.

  • Transferts en RAM interne

La structure des instructions est : MOV destination, source copie l'octet de l'adresse source Ă  l'adresse de destination

    • MOV A,R7 copie le contenu de R7 dans l'Acc
    • MOV 70h,A copie le contenu de l'Acc dans la case de RAM interne Ă  l'adresse 70h
    • MOV A, @R1 copie le contenu de la case dont l'adresse est en R1 dans l'Acc
    • MOV 20h, 71h copie le contenu de la case 71h de RAM interne dans la case 20h
  • Transferts de et vers la RAM externe

La structure des instructions est : MOVX destination, source

    • MOVX A, @DPTR copie le contenu de la case dont l'adresse se trouve dans le DPTR dans l'Acc
    • MOVX @DPTR, A copie le contenu de l'Acc dans la case dont l'adresse se trouve dans le DPTR

Instructions arithmétiques

D'une façon générale, elles utilisent l'Acc pour stocker une des deux données de départ, ainsi que le résultat de l'opération après exécution de l'instruction. Des indicateurs d'état sont positionnés automatiquement en fonction du résultat de l'opération :

  • l'indicateur de dĂ©passement (Carry) est mis Ă  1 si l'addition provoque un report au 9e bit ;
  • l'indicateur de semi-dĂ©passement (Half-Carry) est mis Ă  1 si une addition provoque un report au 5e bit (cet indicateur est utilisĂ© par l'instruction DA A, qui permet de faire l'addition de deux nombres en code DCB, dĂ©cimal codĂ© binaire) ;
  • l'indicateur de paritĂ© est mis Ă  1 si la paritĂ© du nombre dans l'Acc est impaire ;
  • l'indicateur d'overflow est positionnĂ© lors de certaines opĂ©rations arithmĂ©tiques.

Exemples

    • ADD A, R5 : ajoute le contenu de R5 Ă  l'Acc
    • ADD A,#17h : ajoute 17h au contenu de l'Acc
    • SUBB A,R2 : soustrait Ă  l'Acc le contenu de R2
    • MUL AB : effectue la multiplication des nombres placĂ©s dans l'Acc et dans le registre B ; les 8 bits les moins significatifs sont placĂ©s dans l'Acc, les plus significatifs dans B
    • DIV AB divise le contenu de l'Acc par le contenu de B, place le quotient en A et le reste en B
    • INC R0 incrĂ©mente le contenu de R0 sans modifier l'Acc

Instructions logiques

Les opérations logiques sont effectuées entre bits de même poids, il n'y a pas d'interaction entre bits de poids différent et les indicateurs d'état ne sont pas modifiés. Les opérations ET, OU et XOU sont disponibles, ainsi que l'inversion ; pour NON-ET, NON-OU, NON-XOU, il faut agir en deux étapes : d'abord l'opération directe, puis inverser tous les bits.

Exemples

    • CPL A : complĂ©mente tous les bits de l'Acc
    • ANL A, 35h : rĂ©alise une fonction ET entre les bits de l'Acc et ceux de la case 35h

CLR A : met l'Acc Ă  0

Instructions booléennes

Il s'agit ici d'une innovation par rapport aux microprocesseurs, qui traitent toujours les données par octets. Le 8051 contient un processeur complet agissant sur des données d'1 bit, aussi appelées variables booléennes. C'est le Carry qui joue le rôle d'Acc pour ces opérations.

Le RAM interne du 8051 contient 128 cases pouvant être adressées individuellement. Un certain nombre de bits des SFR sont aussi adressables individuellement, en particulier les bits correspondant aux ports de sortie.

    • SETB 38h : positionne Ă  1 le bit 38h
    • CLR C : met Ă  0 le Carry
    • ORL C,20h : rĂ©alise un OU logique entre C et le bit 20h
    • MOV C,45h : copie le contenu du bit 45h dans C.

Instructions de branchement

Rappelons que les instructions de branchement permettent de rompre la séquence normale d'exécution d'un programme. On distingue :

  • les sauts : on saute d'un endroit du programme Ă  un autre, sans espoir de retour ;
  • les sous-routines ou sous-programmes : on part exĂ©cuter un sous-programme, puis on revient Ă  l'endroit d'oĂą l'on Ă©tait parti (l'adresse de retour est sauvegardĂ©e dans la pile).
    • LJMP addr16 : provoque un saut Ă  l'adresse indiquĂ©e
    • LCALL addr16 : provoque l'exĂ©cution du sous-programme qui commence Ă  addr16
    • JZ F8h : recule dans le programme de 8 pas si le contenu de l'Acc est nul (Jump if Zero)
    • CJNE A,#20h,F8h : il s'agit ici d'une opĂ©ration double : on compare les contenus de l'Acc et de la valeur 20h ; on recule de 8 pas dans le programme s'ils ne sont pas Ă©gaux (Compare and Jump if Not Equal).

Remarque : seuls les sauts peuvent ĂŞtre conditionnels dans le 8051.

Ports d'E/S

Les ports d'E/S permettent aux systèmes à microprocesseur ou microcontrôleur de communiquer avec le monde extérieur : recevoir des informations, qu'il va ensuite traiter et piloter les périphériques : témoins lumineux, moteurs, relais, convertisseurs N/A etc.

La famille 8051 a été conçue pour des applications nécessitant peu de mémoire ROM et RAM. Ainsi, le 8051 lui-même comporte une ROM de 4Ko et seulement 128 octets de RAM ; et encore faut-il tenir compte que la RAM est utilisée par les registres de travail, la pile et les 16 octets (de 20h à 2Fh) adressables par bit.

Lorsque l'application peut se satisfaire de ces tailles mémoire, 32 lignes d'E/S sont disponibles, organisées en 4 ports de 8 lignes ; les adresses sont les suivantes : port 0 : 80h ; port 1 : 90h ; port 2 ; A0h ; port 3 : B0h. Les circuits internes associés aux différentes lignes sont légèrement différents. Prenons l'exemple du port 1.

Structure d'une ligne du port 1 d'un ÎśC 8051.

Pour utiliser une ligne en ligne de sortie, on écrit le bit désiré dans la bascule D. La sortie Q/ (inverse de Q) pilote la grille d'un mosfet à enrichissement. Si Q est à 0, Q/ est à 1, le mosfet conduit et la ligne de sortie est tirée à 0. Si Q est à 1, Q/ est à 0, le mosfet est bloqué et la ligne de sortie est tirée vers Vcc par la résistance de rappel (pull-up).

Pour utiliser la ligne en ligne d'entrée, il faut écrire un 1 dans la bascule D (c'est d'ailleurs l'état par défaut à la mise sous tension). Le circuit extérieur peut tirer la ligne à 0 ; l'état de la ligne apparaît sur le bus de données interne lorsqu'on fait une lecture du port.

Lorsque le système nécessite une plus grande taille mémoire, deux solutions :

  • utiliser un membre de la famille dotĂ© d'une plus grande capacitĂ© mĂ©moire, ou carrĂ©ment un autre microcontrĂ´leur ;
  • adjoindre au 8051 des boĂ®tiers-mĂ©moire externes ; le système accepte des mĂ©moires ROM jusqu'Ă  64Ko, et des mĂ©moires RAM jusqu'Ă  64Ko.

Lorsque l'on utilise des boîtiers de mémoire externe :

  • on peut choisir un membre de la famille sans ROM interne, comme le 8031 (version du 8051 sans ROM) ;
  • le nombre de ports d'E/S disponibles est rĂ©duit Ă  2 (si l'on place uniquement de la ROM en externe), voire 1 (si on place des boĂ®tiers externes de ROM et de RAM ; en effet, les lignes de ports sont utilisĂ©es dans cette configuration comme bus d'adresses et de donnĂ©es multiplexĂ©s ;
  • il faudra donc en gĂ©nĂ©ral placer des boĂ®tiers de ports d'E/S externes, et leur rĂ©server des adresses pour pouvoir communiquer avec eux.

Remarquons que l'on peut gérer les ports :

  • comme des registres 8 bits, en Ă©crivant ou lisant l'Ă©tat de toutes les lignes d'un port simultanĂ©ment par les instructions de transfert ;
  • comme un ensemble de bascules gĂ©rant chacune 1 bit, grâce aux instructions boolĂ©ennes.

Signalons encore que certaines lignes du port 3 ont une double fonction puisqu'elles peuvent être utilisées comme lignes de demande d'interruption (voir plus bas), comme entrées des compteurs (voir plus bas), comme entrée et sortie du port série (voir plus bas) et comme lignes Read et Write du bus de commande lorsqu'on fait appel à de la RAM externe.

Interruptions

Lorsqu'un périphérique (clavier, convertisseur A/N, port série...) souhaite communiquer une information au MC, il peut :

  • attendre que le MC vienne l'interroger ; on parle alors d'E/S programmĂ©es ;
  • demander au MC que celui-ci s'occupe de lui ; on parle alors de demande d'interruption ; le MC interrompt la tâche en cours et exĂ©cute le sous-programme de gestion de l'interruption ; puis, il reprend la tâche interrompue.

Lorsque le périphérique en question est extérieur au MC, il faut prévoir des broches pour connecter la ou les lignes de demandes d'interruption.

Le 8051 dispose de 5 sources d'interruption :

  • deux broches d'interruption externes Int0 et Int1 (broches 2 et 3 du port 3) ;
  • deux compteurs/temporisateurs (C/T, voir plus bas) ;
  • le port sĂ©rie (voir plus bas).

Chaque interruption peut être masquée ou démasquée en positionnant à 1 ou 0 le bit approprié du registre IE (Interrupt Enable). Une interruption masquée n'est pas prise en compte. On peut aussi masquer l'ensemble des interruptions par le bit 7 de IE.

On peut attribuer à chaque type d'interruption une priorité basse ou haute en positionnant le bit approprié du registre IP (Interrupt Priority). Une interruption de priorité haute peut interrompre le sous-programme de gestion d'une interruption de priorité basse. Lorsque le MC reçoit simultanément (càd. pendant le même cycle machine) deux demandes d'interruption de même niveau de priorité, celles-ci sont traitées dans l'ordre suivant : Int0, C/T0, Int1, C/T1, port série.

Lorsqu'une demande d'interruption est acceptée, le MC effectue un branchement vers une des adresses suivantes : 0003h pour Int0, 000Bh pour C/T1, 0013h pour Int1, 001Bh pour C/T1 et 0023h pour le port série. Généralement, on place à ces adresses une instruction d'appel de sous-programme pour gérer l'interruption ; à la fin du sous-programme, on revient à l'adresse de départ, qui a été automatiquement mémorisée dans la pile.

Chaque sous-programme d'interruption comporte généralement les parties suivantes :

  • sauvegarde des registres de travail qui seront utilisĂ©s par le sous-programme ;
  • gestion de l'interruption ;
  • rechargement des registres sauvegardĂ©s ;
  • retour au programme principal par l'instruction RETI.

Comme le 8051 comporte 4 blocs de 8 registres de travail, une méthode rapide et élégante pour sauvegarder les registres de travail consiste à simplement changer de bloc actif (celui-ci est déterminé par les bits 3 et 4 du registre d'état, SR, Status Register)

À la mise sous tension, les registres IE et IP sont initialisés à 0. Le programmeur doit donc préciser quelles sources d'interruption il veut autoriser, et leur niveau de priorité. Les choix peuvent être modifiés en cours de programme.

Compteurs/Temporisateurs

Le 8051 comporte deux compteurs/temporisateurs. Ces périphériques sont appelés ainsi car ils peuvent être utilisés :

  • pour compter les impulsions appliquĂ©es Ă  une broche du MC ; on parle alors de compteur (counter) ;
  • pour compter des impulsions provenant de l'horloge du MC ; on parle alors de temporisateur (timer) puisque dans ce mode le MC peut mesurer des intervalles de temps ou gĂ©nĂ©rer des dĂ©lais prĂ©cis.

Chaque C/T comporte deux compteurs binaires de 8 bits. Différents modes de fonctionnement sont possibles : les plus utilisés sont :

  • le mode 1 : les compteurs sont mis en cascade pour former un compteur 16 bits ; une demande d'interruption a lieu lorsqu'il y a dĂ©passement de la capacitĂ© du compteur, cĂ d. lorsque le compteur passe de FFFFh Ă  0000h ;
  • le mode 2 : l'un des compteurs est utilisĂ© comme compteur, l'autre comme registre dans lequel on peut Ă©crire un nombre de 8 bits quelconque ; lorsqu'il y a dĂ©passement de capacitĂ© du compteur, on charge dans celui-ci le contenu du registre; cette technique permet donc d'obtenir des demandes d'interruption rĂ©gulièrement espacĂ©es si le compteur reçoit des impulsions d'horloge.

On peut choisir (bits appropriés de Tcon) d'appliquer à chaque compteur :

  • soit des impulsions provenant d'une broche externe T0 ou T1 ;
  • soit des impulsions provenant du circuit d'horloge, après passage par un diviseur de frĂ©quence par 12.

Le fonctionnement des compteurs est contrôlé par :

  • un bit du registre Tmod ;
  • si dĂ©sirĂ©, l'Ă©tat d'une broche externe (Int0 ou Int1).

Port série

Pour certaines applications (transfert de données à distance, commande de modems,...), il est utile de disposer en plus des ports d'E/S parallèles, d'un port d'entrée/sortie série ou sériel (Serial Input/Output Port).

Le principe des liaisons série est très simple : plutôt que d'envoyer simultanément 8 bits en parallèle sur 8 lignes, on envoie les 8 bits l'un après l'autre sur une seule ligne.

Le 8051 dispose d'un port série bidirectionnel utilisant une ligne pour l'envoi des données, TxD, et une ligne pour la réception des données, RxD.

Plusieurs modes de fonctionnement sont possibles. Le mode le plus utilisĂ© emploie le temporisateur 1 en mode de rechargement automatique pour dĂ©finir la cadence d'envoi des bits (baud rate). Les cadences standard vont de 300 bit/s Ă  19 200 bit/s.

Pour envoyer un caractère, il suffit de l'écrire dans le registre Sbuf d'émission ; cela enclenche automatiquement la procédure d'envoi du caractère :

  • le premier bit s'appelle le bit Start, toujours Ă  0 ;
  • il est suivi par les 8 bits de l'octet Ă  transmettre ;
  • on termine par le bit Stop, toujours Ă  1 ; la prĂ©sence des bits Start et Stop assure qu'il y a toujours un flanc descendant en dĂ©but de transmission d'un octet ; la ligne reste Ă  1 jusqu'Ă  l'octet suivant ;
  • lorsque Sbuf est vide, on dĂ©clenche une demande d'interruption ; le processeur enverra alors l'octet suivant, si nĂ©cessaire ;
  • il est possible d'envoyer des mots de 9 bits plutĂ´t que 8 ; ceci permet d'accoler aux 8 bits un bit de paritĂ© pour le contrĂ´le des erreurs, ou de crĂ©er un petit rĂ©seau avec plusieurs processeurs.

Lors de la réception d'un caractère, la procédure est enclenchée par la détection d'un flanc descendant à la broche RxD. Les 8 ou 9 bits sont placés dans le registre Sbuf de réception (curieusement, on utilise le même nom et la même adresse, 99h, pour les deux registres Sbuf ; quand on écrit à cette adresse, l'octet est stocké dans le registre d'émission, quand on lit, c'est le contenu du registre de réception). Lorsque tous les bits sont présents, on déclenche une demande d'interruption. Il faut que le MC vienne lire l'octet reçu avant la fin de la réception de l'octet suivant, sinon le premier est perdu.

L'émetteur et le récepteur peuvent travailler simultanément. Les demandes d'interruption sont combinées. Donc, lorsque l'on envoie et reçoit simultanément des octets, le processeur doit déterminer lors de chaque demande d'interruption si elle émane de l'émetteur ou du récepteur. Cela se fait en allant lire les bits TI et RI du registre Scon (Serial Port Control Register).

Programmation

Outre l'assembleur, il est possible d'utiliser des compilateurs de langages de haut niveau.

RĂ©duction de la consommation

De nombreuses applications ne nécessitent pas que le MC soit en permanence actif. Par exemple, un système d'acquisition de données peut parfaitement être "endormi" entre les moments où il fait les lectures de données, afin d'économiser l'énergie ; ceci est particulièrement intéressant lorsque les équipements sont alimentés par batterie.

Le 8051 en technologie NMOS ne possédait qu'un seul mode d'économie d'énergie, le mode Idle. Dans ce mode, l'horloge n'est plus appliquée au microprocesseur, qui n'exécute donc plus d'instructions ; les registres internes préservent leurs informations ; le port série, la gestion des interruptions et les compteurs/temporisateurs fonctionnent normalement. On entre en mode Idle en mettant à 1 le bit IDL du registre Pcon (Power Condition).Le MC sort du mode Idle en cas d'interruption ou de Reset externe.

Le 8051 en technologie CMOS, la plus courante de nos jours, possède, outre le mode Idle, un mode Power Down. Ici, c'est carrément l'oscillateur générant le signal d'horloge qui est bloqué. Toutes les fonctions sont bloquées. La différence avec une coupure d'alimentation, c'est que tous les registres préservent leurs informations, en particulier les ports d'E/S qui sont liés à des registres. On entre dans le mode Power Down en mettant à 1 le bit PD du registre Pcon. Le seul moyen de sortie du mode Power Down, c'est par un Reset externe, qui provoque aussi une réinitialisation du pointeur de programme. On recommence donc le programme à l'adresse 0000h et les SFR (dont les registres des ports) sont réinitialisés.

Famille du 8051

La famille du 8051 a connu un succès remarquable, malgré son jeu d'instructions passablement "exotique". C'est donc très naturellement qu'Intel d'abord, de nombreux autres constructeurs ensuite, ont mis au point des MC basés sur l'architecture 8051 mais dotés de divers perfectionnements : mémoire programme effaçable et reprogrammable (8751), troisième compteur/temporisateur (8052), capacités des mémoires ROM et RAM plus grandes, ports d'E/S plus nombreux, convertisseurs A/N et N/A intégrés, C/T supplémentaires (9 au total dans le 80251)...

Le 8052

Le 8052 est une version améliorée du 8051, le 8032 est une version améliorée du 8031, qui est un 8051 sans ROM interne.

Les principales améliorations apportées sont :

  • la ROM interne comporte 8Ko
  • la RAM interne comporte 256 octets au lieu de 128 ; toutefois, pour ne pas entraĂ®ner de conflit avec les SFR (registres de fonctions spĂ©ciales, qui occupent les adresses 80h Ă  FFh), les 128 octets supĂ©rieurs de la RAM interne ne sont accessibles que par adressage indirect Ă  registre, c'est-Ă -dire que l'adresse du registre auquel on veut accĂ©der doit ĂŞtre placĂ©e dans un des registres de travail R0 ou R1 avant d'envoyer l'instruction utilisant le registre ;
  • un troisième compteur/temporisateur 16 bits est prĂ©vu ; ce C/T possède trois modes de fonctionnement :

- Mode capture : le compteur compte les impulsions en provenance d'une entrée externe ou d'un diviseur de fréquence interne ; une impulsion appliquée à la broche T2EX copie l'état du compteur au moment de cette impulsion dans deux SFR (RCAP2H et RCAP2L) ; une demande d'interruption est générée ; le compteur continue à compter normalement.

- Mode rechargement automatique : le contenu des SFR RCAP2H et RCAP2L est copié dans le compteur soit automatiquement, lors d'un dépassement de capacité du compteur, soit lorsqu'une impulsion externe est appliquée à la broche T2EX.

- Mode horloge de transmission : ce mode est destiné à faciliter la réalisation de l'interface série.

Le 8052 Basic

Il s'agit d'une version spéciale du 8052. La mémoire ROM interne de 8Ko est occupée par un interpréteur Basic. Il est donc possible, en utilisant un terminal et l'interface série du 8052, de travailler en mode interactif, en envoyant au 8052 des commandes en langage Basic à partir du terminal.

Le Basic 8052 :

  • traite des nombres en code DCB (dĂ©cimal codĂ© binaire) de 8 chiffres + exposant ;
  • permet, outre les 4 opĂ©rations arithmĂ©tiques de base, de calculer la racine carrĂ©e d'un nombre, ainsi que son sinus, cosinus, tangente, arc tangente, logarithme et exponentielle ;
  • permet la commande directe des pĂ©riphĂ©riques ;
  • opère la conversion dĂ©cimal-hexadĂ©cimal et inversement ;
  • permet la gestion des ressources du microcontrĂ´leur : compteurs, interface sĂ©rie, interruptions...
  • gĂ©nère les signaux nĂ©cessaires pour programmer des EPROM, EEPROM...;
  • simule une horloge temps rĂ©el.

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.