Menu Général                                        Une autre présentation du 68HC11

68HC11

  1. Présentation générale

  2. Les circuits de la famille 68HC11 sont construits à partir du même noyau de base. Ce noyau contenant toutes les fonctionnalités de ces circuits, il suffit de l'étudier complètement pour pouvoir ensuite être capable de mettre en œuvre n'importe quel 68HC11.

    1. Synoptique interne
La figure 1.1 présente le synoptique du microcontrôleur 68HC11 dérivé du microprocesseur 6801. Nous allons détailler ci-dessous succinctement la structure interne.

La mémoire se subdivise au maximum en trois blocs distincts dont la taille et la présence varient selon les références exactes du circuit.

Les ports parallèles baptisés port A, B, C, D et E qui peuvent être bidirectionnels ou unidirectionnels selon le cas. Certaines lignes de ces ports sont également partagées avec d'autres ressources internes et ne sont donc pas nécessairement accessibles directement en permanence. Par exemple le port E est en commun avec le convertisseur analogique/numérique.

Des entrées / sorties séries sont aussi disponibles et peuvent fonctionner en mode synchrone ou asynchrone selon que l'on utilise la SPI (Serial Peripheral Interface) de type asynchrone ou la SCI (Serial Communication Interface) de type asynchrone.

Un timer divisé en quatre blocs fonctionnels distincts :

Un convertisseur analogique / digital à huit entrées complète cette panoplie de ressources internes déjà bien riche.

Toute la logique nécessaire, tant au traitement des interruptions qu'à la génération de l'horloge est évidemment intégrée dans le 68HC11 dont la mise en œuvre matérielle est ainsi fort simple puisque dans de nombreux cas, un quartz et une cellule R C pour le Reset sont les seuls composants externes indispensables pour le pilotage de cette logique. Le circuit peut fonctionner selon deux modes : un mode "single chip" ou circuit seul et un mode "expanded" (étendu) qui lui permet alors d'adresser des circuits externes comme n'importe quel microprocesseur ordinaire. Dans ce dernier cas, les lignes des ports B et C se transforment en lignes d'adresses et de données comme nous le verrons au moment opportun.
 
 

    1. La famille HC11

    2. La famille 68HC11 contient plus de 44 versions différentes. Précisons que toutes sont bâties à partir du noyau de base que nous venons de décrire rapidement.

      Elles diffèrent essentiellement les unes des autres par les tailles des mémoires, le nombre d'entrées analogiques disponibles et parfois le nombre de SCI présentes.

    3. Les signaux disponibles

    4. Nous allons voir maintenant quels sont les noms et les fonctions des diverses broches que l'on peut rencontrer sur les boîtiers des circuits de la famille HC11 étant entendu que certaines pourront être absentes sur certaines versions de circuits.

      La description qui suit est une présentation générale des fonctions de ces broches. Certaines d'entre-elles pourront êtres étudiées ensuite plus en détail selon les applications et l'utilisation des ressources internes.

      VDD (+V) et VSS (masse) (Alimentation du boîtier)

      Bien qu'il soit réalisé en technologie HCMOS, le 68HC11 s'alimente typiquement sous cinq volts, Dans ces conditions, ses entrées / sorties sont compatibles TTL LS ou CMOS alimentés sous la même tension. Du fait de la rapidité des transitions des signaux logiques inhérente à la technologie HCMOS, cette alimentation doit être parfaitement découplée et au plus près du boîtier pour éviter tout problème. La meilleure solution est de faire appel à un condensateur de 1 µF (tantale) en parallèle sur un condensateur de 10 nF.

      MODA/LIR et MODB/Vstby (Sélection du mode)

      Lors d'un Reset du circuit, les broches sont des entrées appelées MODA et MODB et permettent de sélectionner un mode de fonctionnement du circuit comme présenté dans le tableau 1.3.

      EXTAL, XTAL et E (broches de l'horloge)

      Connexion d'un quartz ou d'une horloge externe.

      La fréquence du quartz est 4 fois la fréquence interne du 68hc11.
       
       

      E (Sortie d'horloge bus)

      L'état haut ou bas permet de savoir si des données ou des adresses valides sont présentes sur le bus du 68HC11. Parfois indispensable en mode étendu pour dialoguer correctement avec certains périphériques.

      RESET (Remise à l'état initial)

      Contrairement à de nombreux circuits, c'est une ligne bidirectionnelle. Utilisée en entrée et forcée à la masse, elle provoque une initialisation du circuit. Si par contre un événement interne anormal survient tel que par exemple la détection par le chien de garde ou COP d'une anomalie, ce dernier provoque un Reset interne du 68HC11 mais fait aussi générer un niveau bas à cette patte afin que cette information puisse le cas échéant, être exploitée par des boîtiers externes. Afin d'éviter l'altération du contenu de l’EEPROM mais aussi de certains registres réalisés selon la même technologie, il est fortement conseillé de piloter cette broche par un circuit détectant automatiquement toute baisse de VDD en dessous de la valeur limite autorisée et générant alors un Reset dans ce cas.

      /IRQ et /XIRQ (Entrées d'interruptions externes)

      /IRQ est une entrée d'interruption masquable alors que /XIRQ est non masquable. Les circuits générant un niveau bas sur ces entrées doivent être conçus de telle façon que le niveau soit maintenu jusqu'à ce que le 68HC11 l'ait pris en compte, sauf éventuellement pour l'entrée /IRQ qu'il est possible de programmer sur un front descendant. Chacune de ces entrées doit être ramenée à VDD par une résistance de 4,7 kW placée près de la patte correspondante du boîtier. Si plusieurs circuits sont connectés ensembles sur l'une ou l'autre de ces entrées, ils travaillent en "OU" câblé en forçant /IRQ ou /XIRQ à la masse. C'est au logiciel de reconnaître ensuite le circuit interrupteur en procédant à une interrogation systématique des circuits concernés (technique de "polling"). L'interruption ne prend fin qu'en présence de l'instruction RTI pour récupérer tous les registres internes et continuer le programme interrompu.
       
       
       
       

      VRL et VRH (Tensions de référence pour le convertisseur)

      Sont respectivement les entrées de référence basse et haute du convertisseur analogique / numérique. Le convertisseur étant du type à redistribution de charge, la consommation de courant sur ces broches est quasi nulle. Afin de conserver une bonne précision au convertisseur l'écart entre VRL et VRH doit être au moins de 2,5 V. Par ailleurs ces tensions ne doivent pas devenir supérieures (pour VRH) et inférieures (pour VRL) aux alimentations du circuit.

      PE0 à PE7 (entrées du port parallèle E)

      Ces lignes sont unidirectionnelles et ne fonctionnent qu'en entrée. De plus elles sont partagées avec les entrées du convertisseur analogique / numérique mais malgré cela, il est possible de les utiliser simultanément dans les deux modes. En effet, lors d'une entrée de donnée numérique (pendant une phase d'échantillonnage), le buffer interne correspondant n'est mis en fonction qu'un très court instant ce qui peut introduire à ce moment une légère perturbation.

      PD0 à PD5 (entrées / sorties parallèles du port D)

      Elles sont communes avec les lignes des ports série de la SPI et de la SCI. La figure 1.1 (Synoptique) précise l'affectation relative de ces pattes aux différentes lignes spécifiques de ces interfaces. Il est évident qu'ici aussi toute simultanéité de fonction est impossible sauf quelques cas particuliers.

      PC0 à PC7 (entrées / sorties parallèles du port C en mode circuit seul)

      En mode étendu, elles deviennent les lignes où circulent les données et les huit bits de poids faibles des adresses en mode multiplexé. La ligne AS (Address Strobe) dont le rôle est alors tenu par la patte STRA indique si le port C véhicule des adresses (AS au niveau haut) ou si ce sont des données (AS au niveau bas). Le rôle de la ligne lecture écriture est tenu quant à lui par la patte STRB.

      PB0 à PB7 (sorties parallèles du port B en mode circuit seul)

      En mode étendu, elles deviennent les adresses comme pour le port C. Il est évident que, si le circuit est utilisé en mode étendu, les sorties PBO à PB7 et les entrées / sorties PCO à PC7 sont perdues. Il est toutefois possible de les "récupérer" en plaçant sur le bus externe du 68HC11 un boîtier appelé 68HC24 ou PRU (Port Replacement Unit) qui présente alors le même aspect vu du logiciel, que les ports B et C "perdus".

      STRA et STRB

      Sont respectivement AS et R/W en mode étendu. En mode circuit seul, ces lignes peuvent être utilisées pour divers protocoles de dialogue via les ports B et C.

      STRA est sensible à un front et permet de mémoriser dans un registre spécial associé au port C les données appliquées sur celles des lignes de PCO à PC7 qui ont été placées en entrées. Le sens du front actif est programmable par logiciel. Si elle n'est pas utilisée pour provoquer cette mémorisation, STRA peut toujours servir à provoquer une interruption lors de la réception d'un front actif. Attention, si elle n'est pas utilisée en mode circuit seul, STRA doit être ramenée au VDD par une résistance de rappel de 4,7 à 10 kW .

      STRB quant à elle est une sortie indiquant lorsque des données valides sont présentes sur les lignes des ports B et C qui ont été placées en sorties (fonction "strobe"). Si STRB n'est pas utilisée en tant que telle, elle peut servir de sortie à usage général mais sa manipulation est moins simple que celle d'une classique ligne de port. Tout cela est précisé en détail au chapitre consacré aux ports parallèles.

      Le port A (Partagé avec le Timer et l'accumulateur d'impulsions)

      PA0, PA1, PA2 sont figées en entrées (entrées de capture IC3 à IC1 du timer).

      PA3, PA4, PA5, PA6 sont figées en sorties (comparaison OCI à OC5 du timer)

      PA7 est bidirectionnelle et peut être configurée comme entrée de capture ou sortie de comparaison. Si le timer à accumulation d'impulsions est utilisé, c'est également PA7 qui lui sert d'entrée. Dans le cas ou le timer n'est pas utilisé, les sorties peuvent servir en tant que sorties parallèles à usage général.

    5. Schémas types de mise en œuvre
      1. Mode "single chip" ou circuit seul

      2. Le circuit est monté tout seul, avec aucun circuit périphérique.

      3. Mode étendu

      4. Le circuit est monté avec des périphériques (mémoires, interfaces …). Le démultiplexage des adresses de poids faibles et des données est assuré par un octuple latch 74HC373 grâce à la ligne AS dont les temps de fonctionnement ont été spécialement prévus pour cela.

        Les lignes E et R/W sont ensuite utilisées pour valider les différents circuits en présence.
         
         

      5. Mode bootstrap (Mode de mise au point)
Dans ce mode, le 68HC11 n'exécute pas le programme contenu dans sa ROM et pointé par son vecteur de Reset normal mais un "bootloader" contenu à une adresse particulière d'une ROM interne inaltérable. Il initialise alors l'interface SCI de façon à ce qu'elle puisse recevoir un programme de 256 octets de long qui est chargé en RAM à partir de l'adresse $0000. Lorsque ce chargement est terminé, le 68HC11 saute automatiquement à l'adresse $0000 et exécute donc le programme qui y commence.
 
 
  1. L'unité centrale

  2. L'unité centrale du 68HCll est un modèle 8 bits disposant de fonctionnalités particulières lui permettant d'exécuter avec un maximum de souplesse certaines instructions, y compris arithmétiques et logiques sur 16 bits. Elle est issue de l'unité centrale qui équipait les 6801 mais enrichie de nouvelles instructions.

    Nous vous proposons de découvrir dans ce chapitre, la structure de cette unité centrale ainsi que son comportement lors d'un Reset ou d'interruptions.

    1. Les registres internes du 68hc11

    2. Les 7 registres internes vous sont présentés figure 2.1. C'est une architecture classique chez Motorola avec des registres aux fonctions bien définies contrairement à certaines familles de microcontrôleurs où tous les registres sont parfois polyvalents.

      Accumulateurs A et B (registres 8 bits)

      Ces accumulateurs supportent toutes les instructions arithmétiques et logiques que connaît le 68HC11. Ils peuvent être utilisés de façon totalement indépendante l'un de l'autre sans restriction. Ils peuvent également être concaténés pour former un seul accumulateur 16 bits qui s'appelle alors D (Double accumulateur).. Attention, cet accumulateur n’est pas indépendant de A et B ce qui signifie que si vous avez utilisé A et B puis que vous fassiez appel ensuite à D, D sera, constitué par la mise bout à bout de A et B (A étant l'octet de poids forts).

      Registres d'index X et Y (16 bits)

      Ces registres correspondent à la capacité d'adressage du 68HCll soit 16 lignes d’adresses ou de 65536 octets. Leur rôle premier est d'être utilisé pour l'adressage indexé où leur double présence facilite énormément le balayage simultané de tables pour faire du transcodage par exemple. Quelques opérations arithmétiques élémentaires peuvent également être réalisées sur ces index. En outre, si l'adressage indexé ne les utilise pas, ils peuvent bien sûr servir de registres de stockage temporaire de données.

      Pointeur de pile S ou SP (Stack Pointer) (16 bits)

      Ce registre pointe sur la première adresse libre de la zone mémoire définie pour ranger la pile. Il est donc indispensable que très rapidement suite à la sortie du Reset, ce registre soit initialisé avec une adresse de RAM valide faute de quoi, à la première interruption ou au premier appel de sous-programme toute adresse de retour sera perdue. Le 68HCll gère automatiquement ce registre c'est-à-dire qu'en cas d'appel de sous-programme ou d'interruption, il range sur la pile le contenu de certains registres internes et décrémente le registre S d'autant d'unités que nécessaire de façon à ce qu'il pointe toujours sur la prochaine adresse de pile disponible. Réciproquement, au retour de sous-programme ou d'interruption, il recharge les registres internes qui avaient été sauvegardés avec les informations reprises sur la pile et incrémente le registre S d'autant d'unités que nécessaire. Il n'existe pas de limite physique à l'évolution de ce registre et donc au nombre de sous-programmes ou d'interruptions qu'il est possible d'imbriquer. Seule la taille de la zone de RAM utilisée pour la pile vient concrétiser cette limitation.

      Registre PC (Program Counter) (16 bits)

      Il pointe la prochaine instruction à exécuter et sa taille est donc nécessairement de 16 bits pour pouvoir accéder à tout l'espace mémoire adressable. Son contenu peut être modifié lors des instructions de saut et de branchement ou lors des appels de sous-programmes ou d'interruptions.

      Registre d'état ou CCR (Condition Code Register) (8 bits)

      Bien qu'étant un registre 8 bits, ce CCR doit être examiné bit par bit, chacun ayant une signification particulière. Précisons que même si certains de ses bits sont positionnés automatiquement par l'unité centrale en fonction des instructions exécutées, vous pouvez également manipuler la majorité d'entre eux directement au moyen d'instructions spécifiques

      - Le bit C (Carry) retenue est mis à 1 lorsqu'une opération arithmétique génère une retenue. Il est également utilisé comme indicateur d'erreur lors d'une multiplication ou d'une division et sert lors de certaines opérations de décalage ou rotation qui peuvent passer par son intermédiaire ou non.

      - Le bit V (oVerflow ) débordement est positionné à 1 lorsqu'une opération arithmétique a généré un débordement de l'accumulateur.

      - Le bit Z (Zero) est positionné à 1 lorsque le résultat de l'instruction exécutée est nul. Contrairement aux deux bits précédents, il est affecté par de très nombreuses instructions et non seulement par des instructions arithmétiques.

      - Le bit N (Negative) est positionné à 1 si le résultat de la dernière opération arithmétique réalisée est négatif (le bit de poids fort du résultat est à 1).

      - Le bit H (Half) carry ou demi-retenue est positionné à 1 lors d'une retenue entre les bits 3 et 4 d'une opération arithmétique. Il n'est affecté que par les instructions ADD, ADC et ABA et est ensuite exploité par l'instruction DAA pour réaliser de l'arithmétique DCB c'est-à-dire codée en fait sur 2 groupes de 4 bits.

      - Le bit I (Interrupt mask) ou masque d'interruption interdit toute interruption masquable lorsqu'il est mis à 1. Les interruptions survenant pendant qu'il est à 1 peuvent cependant rester en attente si le périphérique interrupteur le permet. Dans ce cas elles seront traitées dès le retour à zéro de ce bit. Suite à un Reset, ce bit est automatiquement mis à 1 et doit être mis à 0 volontairement par logiciel pour valider les interruptions. De même lorsqu'une interruption a lieu, ce bit est mis à 1 dès que la sauvegarde des registres sur la pile a eu lieu mais avant que le vecteur d'interruption correspondant ne soit recherché. Ce bit est ensuite remis automatiquement à 0 lors de l'exécution du RTI de fin de programme d'interruption et de la restauration du contexte.

      - Le bit X (XIRQ interrupt mask) fonctionne comme le bit I vu auparavant mais pour les interruptions susceptibles d'être appliquées sur l'entrée /XIRQ. Cette entrée, qui porte le nom de non masquable l'est donc en fait via ce bit.

      - Le bit S (Stop disable) permet, lorsqu'il est mis à 1 d'interdire l'exécution de l'instruction STOP. Celle-ci est alors considérée par le 68HC 11 comme un simple NOP (No OPeration). Certains utilisateurs considèrent en effet que STOP est une instruction dangereuse car elle arrête l'oscillateur du 68HCll d'où l'intérêt de ce bit.

    3. Comportement lors d'un Reset

    4. Opération importante qui mérite d'être examiné en détail quant à son comportement et par ses effets car elle conditionne l'exécution de tout programme.

      Pour que le 68HC11 puisse sortir correctement d'une situation de Reset, son horloge doit fonctionner. Ensuite, ce Reset agit sur un certain nombre de registres de contrôle des ressources internes (c. f. doc. Constructeur).

      L'unité centrale tout d'abord va chercher à l'adresse $FFFE et $FFFF le vecteur de Reset et charge celui-ci dans le PC. Tous les autres registres sont indéterminés mais les bits I, X et S du CCR sont mis à 1 interdisant ainsi toute interruption ainsi que le mode STOP. On peut alors initialiser en toute sécurité le pointeur de pile SP puisque aucune interruption ne peut avoir lieu. Ceci justifie en grande partie le fait que XIRQ soit rendue masquable même si elle porte le nom d'interruption non masquable.

      Le COP (chien de garde) est validé si le bit NOCOP du registre CONFIG est mis à 0 et il est invalidé dans le cas contraire. La vitesse de fonctionnement du COP est programmée à la plus grande valeur possible.

      Après un Reset, le convertisseur analogique / digital est dans un état indéterminé, l'indicateur de "conversion terminée" est mis à "0" et le bit ADPU est également mis à "0" ce qui invalide le convertisseur.

    5. Les interruptions

    6. Le 68HC11 dispose de multiples possibilités d'interruptions : deux entrées externes dont nous avons déjà parlé /IRQ et /XIRQ, un certain nombre de sources internes liées aux différentes interfaces qui équipent le circuit et une interruption par logiciel grâce à l'instruction SWI.

      L'instruction en cours d'exécution est tout d'abord terminée complètement. Le contenu de tous les registres de l'unité centrale est alors poussé sur la pile et le pointeur de pile SP est diminué d'autant. La figure ci-contre précise l'ordre de rangement de ces registres dans la zone mémoire utilisée par la pile.

      Le masque d'interruption I du CCR est alors positionné interdisant toute nouvelle prise en compte d'interruption. Ensuite, le vecteur correspondant à celle des interruptions en attente qui a la plus haute priorité est recherchée et sa valeur est chargée dans le compteur ordinal PC ce qui permet de lancer l'exécution du programme d'interruption correspondant.

      En fin d'exécution de ce programme, lors de l'exécution de l'instruction RTI, les opérations inverses ont lieu, à savoir récupération sur la pile des registres de l'unité centrale et incrémentation du registre SP d'autant d'unités. Ceci a pour effet tout à la fois de remettre le bit I du CCR dans sont état initial autorisant ainsi la prise en compte de nouvelles interruptions et de recharger le PC avec la valeur qu'il avait au moment de l'interruption ce qui fait poursuivre normalement le programme interrompu.

      Ce mécanisme est légèrement différent pour une interruption de type /XIRQ. En effet, cette dernière étant de type non masquable il faut tout d'abord noter que, dans ce qui précède, nous n'avons parlé que de la mise à 1 du bit I du CCR. Cela signifie que même en phase de prise en compte ou de traitement d'une interruption normale, le 68HC 11 peut être interrompu par sa ligne /XIRQ.

      Par contre, lors de la phase de prise en compte d'une interruption /XIRQ, les bits X et 1 du CCR sont mis à 1 interdisant ainsi toute nouvelle prise en compte d'interruption de type /IRQ ou /XIRQ. Ces bits X et 1 reviennent évidemment à leur état initial lors de l'exécution du RTI qui restaure le contenu du CCR.
       
       

    7. Priorité des interruptions
    Compte tenu des nombreuses sources d'interruptions possibles qui existent au sein du 68HC11, divers mécanismes ont été prévus pour résoudre les éventuels conflits en fixant des priorités relatives. Ainsi, en cas d'arrivée de deux ou plusieurs interruptions simultanées (au sens logiciel du terme ), celle de priorité la plus élevée sera traitée en premier puis celle de priorité immédiatement inférieure et ainsi de suite.

    Les priorités relatives des interruptions sont fixes sauf pour l'une d'entre elles que vous pouvez définir grâce au registre HPRIO (Highest PRIOrity interrupt). Si l'on considère le Reset comme une source d'interruption, l'ordre s'établit comme suit en partant de la priorité la plus élevée

    - Reset par action sur l'entrée Reset,

    - Reset par la circuiterie de surveillance d'horloge,

    - Reset par le COP,

    - Interruption par code d'instruction illégal (voir ci-après),

    - Interruption /XIRQ,

    - Interruption définie par le registre HPRIO,

    - Autres interruptions.

  3. La mémoire

  4. Jusqu'à trois types de mémoires différentes peuvent cohabiter dans un 68HC11

    Un 68HCll "de base" dispose normalement d'une zone de mémoire vive ou RAM dont la taille varie selon la référence exacte du boîtier : de 256 octets pour le 68HCll A8 jusqu'à 1,25 ko pour le 68HCl1 M2.

    Il dispose également d'une zone de mémoire morte ou ROM qui est programmable par masque, c'est-à-dire lors de la fabrication du circuit, sur les versions 68hc( )11 sans chiffre entre le c et le 11.

    Enfin, les 68HCll disposent d'une mémoire EEPROM qui ne doit pas être confondue avec celle dont nous parlerons dans un instant dans le cas des 68HC811. Il s'agit en effet d'une EEPROM de petite taille que l'on appelle habituellement EEPROM de données même si on peut éventuellement y stocker du programme. Cette mémoire a essentiellement pour rôle, dans de nombreuses applications, de mémoriser des paramètres de configuration, sélectionnés par l'utilisateur et qui doivent être conservés même en l'absence de toute alimentation. Un programmateur de chauffage par exemple pourra ainsi ranger dans cette mémoire les différentes heures et températures programmées par l'utilisateur qui se retrouveront identiques à elles-mêmes tant qu'elles n'auront pas été effacées volontairement.

    1. La RAM

    2. La RAM du 68HC11 est de type statique et ne nécessite donc aucune circuiterie externe de rafraîchissement de même qu'elle n'impose aucune fréquence minimum d'horloge.

    3. La ROM

    4. Comme nous l'avons dit auparavant, la ROM peut être ou non présente dans le 68HCll selon le type exact de boîtier retenu. Lorsqu'elle est présente, elle peut toujours être désactivée par un bit du registre CONFIG. Dans ce cas, elle n'occupe plus aucun emplacement dans l'espace mémoire adressable.

      Cette ROM qui est par défaut de type programmable par masque, c'est-à-dire réservée à des productions en grande série vu les frais de masquage qu'elle implique, peut se transformer en EPROM ou OTPROM sur les 68HC711 ou en EEPROM sur les 68HC811.

      Ces dernières versions de boîtiers, relativement onéreuses, sont évidemment réservées aux phases de développement d'une application tandis que les versions OTPROM sont destinées à des fabrications en petite série où les frais de masquage d'une version ROM ne pourraient être amortis.

      Ces deux versions, OTPROM et EEPROM, se programment soit sur des programmateurs universels du commerce supportant le 68HCl1, soit avec des montages spécifiques.

      Les ROM, EPROM ou EEPROM sont évidemment utilisées pour le stockage des programmes et des vecteurs de Reset et d'interruptions. Elle est toujours complétée par un petit morceau de ROM supplémentaire implantée de $BF40 à $BFFF qui contient le fameux bootloader.

    5. L'EEPROM
    L'EEPROM de petite taille ou EEPROM de données qui équipe la majorité des versions de 68HC11 peut être utilisée comme de la ROM c'est-à-dire qu'elle peut être lue sans aucune restriction ni précaution particulière. Par contre, elle ne peut évidemment être écrite ou programmée que moyennant une procédure bien précise. De la même façon elle peut être effacée, octet par octet, ligne par ligne ou d'un seul coup grâce à des commandes protégées pour d'évidentes raisons de sécurité.
     
     
  5. Les modes d'adressage

  6. Le 68HC11 dispose de six modes d'adressage.

    1. L'espace adressable

    2. L'espace adressable commence à l'adresse $0000 et s'étend jusqu'à l'adresse haute maximum permise soit $FFFF.

      Les registres des ressources internes sont donc considérés comme des emplacements mémoires "normaux" et sont accessibles sans manipulation particulière par leur adresse propre.

      Dans tout l'exposé qui va suivre nous utiliserons la notion d'adresse effective (effective address) abrégée EA en Anglais. Cette adresse effective est l'adresse réelle de la donnée manipulée par l'instruction.

      Nous utiliserons aussi dans les exemples les notations admises par la majorité des assembleurs pour 68HC11, qui respectent les conventions suivantes :

      - L'absence de symbole devant un nombre signifie qu'il est exprimé en décimal.

      - Le symbole dollar ( $ ) signifie que le nombre est exprimé en hexadécimal.

      - Le symbole pour cent ( % ) signifie que le nombre est exprimé en binaire.

      - Le symbole apostrophe ( ' ) signifie que le caractère qui suit doit être remplacé par son code en ASCII.

      - Le symbole dièse ( # ) indique un adressage de type immédiat.

    3. L'adressage inhérent

    4. Dans ce mode il n'y a en effet pas d'adresse effective car l'instruction concernée se suffit à elle-même et n'a besoin d'accéder à aucune donnée "externe". Les instructions ci-dessous donnent quelques exemples d'un tel adressage.

      ABA ajoute A et B et place le résultat dans A,

      INCB augmente le contenu de B d'une unité,

      DEX diminue d'une unité le contenu de X.

    5. L'adressage immédiat

    6. Dans ce mode, l'adresse effective est égale à l'adresse suivant immédiatement l'adresse contenant le code de l'instruction..

      Exemples d'instructions utilisant ce mode d'adressage qui sont codées, au niveau assembleur, par le symbole dièse.

      *Adressage immédiat

      0000 86 55 LDAA #$55

      0001 C8 25 EORB #$25

      0004 81 61 CMPA #%01100001

      1234 CST EQU $1234

      0006 ce 12 34 LDX #CST

      0009 cc 00 07 LDD #7

      La donnée manipulée par l'adressage immédiat peut être une donnée sur 8 bits ou sur 16 bits selon le type de registre concerné par l'instruction. Ainsi, comme vous pouvez le voir sur le listing, LDD est toujours supposé suivi par une donnée codée sur 16 bits, même si cette dernière pouvait "tenir" sur 8 bits (le 7 est codé 00 07 au niveau assembleur).

    7. L'adressage direct

    8. L'instruction est suivie d'un octet non signé qui est l'adresse effective de la donnée manipulée. Comme cette adresse effective est codée sur un octet seulement, ce mode d'adressage ne peut fonctionner que de l'adresse $00 à l'adresse $FF soit sur les 256 premiers octets de l'espace adressable du microcontrôleur.

      Exemples d'instructions utilisant ce mode d'adressage.

      *Adressage direct

      0001 RAM1 EQU $01

      0010 RAM2 EQU $10

      000c 96 01 LDAA RAM1

      000e 97 10 STAA RAM2

      0010 91 25 CMPA $25

      0012 dc 01 LDD RAM1

      Du fait du codage de l'adresse sur 8 bits seulement, ce mode d'adressage est moins encombrant que le mode étendu que nous allons voir maintenant.

    9. L'adressage étendu

    10. Ce mode est une évolution du précédent et permet d'atteindre n'importe quelle adresse mémoire car il autorise un codage de l'adresse effective sur deux octets soit 16 bits. Ce mode d'adressage peut donc fonctionner de l'adresse $0000 à l'adresse $FFFF.

      Exemples d'instructions utilisant ce mode d'adressage.

      *Adressage étendu

      1000 ROM1 EQU $1000

      2500 ROM2 EQU $2500

      0014 b6 10 00 LDAA ROM1

      0017 f6 25 00 LDAB ROM2

      00la fc 12 34 LDD $1234
       
       

    11. L'adressage indexé

    12. Ce mode d'adressage est particulièrement souple et puissant et fait intervenir deux facteurs dans le calcul de l'adresse effective :

      - le contenu d'un des registres d'index X ou Y qui prennent ici leur signification réelle de registre d'index

      - une donnée appelée déplacement ou offset en anglais. Il existe de ce fait deux sous-modes.

      Le déplacement est un octet non signé et peut donc varier seulement de $00 à $FF (255 en décimal).

      Exemple 1

      *Adressage indexé avec déplacement nul

      001d ec 00 LDD 0,X Notation normale

      00lf al 00 CMPA ,X Autre notation admise par

      l'assembleur.

      Exemple 2

      *Adressage indexé avec déplacement non nul

      0021 ec 04 LDD 4,X

      0023 e3 25 ADDD $25,X

      00fe DATA EQU $FE

      0025 la ee fe LDY DATA,X
       
       

    13. L'adressage relatif

    14. Ce mode d'adressage se rencontre sur quasiment tous les microprocesseurs mais n'est utilisé ici que pour les instructions de saut et branchement. Il spécifie l'adresse effective sous forme d'un déplacement qui est donc ajouté à la valeur courante du PC pour déterminer l'adresse de poursuite du programme.

      Le déplacement peut prendre toute valeur décimale comprise entre -128 et +127 ce qui autorise une amplitude globale de saut de 255 octets.

      Exemples d'instructions utilisant ce mode d'adressage.

      *Adressage relatif

      0028 86 aa ICI LDA #$AA

      002a b7 10 00 LABAS STA $1000

      002d 27 f9 BEQ ICI

      002f la ee 00 LDY 0,X

      0032 20 f6 BRA LABAS
       
       

    15. L'adressage "bit" ou "manipulation de bit"

    16. La définition de l'adresse de (OPR) OPeRande peut être faite en adressage direct ou indexé tandis que le masque est toujours considéré comme codé en immédiat sans que le symbole dièse ne soit utilisé.

      1. Mode positionnement de bit

      2. Dans ce mode, l'instruction écrite avant assemblage est suivie de deux informations et se présente sous la forme suivante :

        INSTRUCTION (OPR) (MSK)

        (MSK) MaSque indique le ou les bits de l'OPR (OPeRande) à manipuler par mise à "1" des bits correspondants.

        Exemples :

        BCLR PORTB %00110001 *positionne à 0 les bits 0, 4 et 5

        *du registre PORTB.

        BSET PORTB %00110001 *positionne à 1 les bits 0, 4 et 5

        *du registre PORTB.

      3. Mode test de bit et branchement
    Il permet de tester n'importe quel bit contenu à une adresse spécifiée et, en fonction du résultat de ce test, de décider de la poursuite du programme en séquence ou du saut à une adresse déterminée, L'instruction, avant assemblage, est donc suivie de trois informations et se présente de la façon suivante :

    INSTRUCTION (OPR) (MSK) (REL)

    (MSK) MaSque indique le ou les bits de (OPR) OPeRande à tester par mise à 1 des bits correspondants.

    (REL) est le déplacement permettant de calculer l'endroit où doit se poursuivre le programme selon le résultat du test. Ce déplacement est codé sur 8 bits signés, comme en adressage relatif classique.

    Exemples :

    BRCLR TFLGI $80 BOUCLE *teste le bit 7 du registre TFLG1 et

    *cause un branchement à l'étiquette

    *BOUCLE si ce bit est à "0".

    BRSET PORTC $08 FIN *teste le bit 3 du PORTC et

    *cause un branchement à l'étiquette

    *FIN si ce bit est à "1".
     
     
     
     

  7. Jeu d'instructions

  8. Le jeu d'instructions se trouve aux pages suivantes :

  9. Les entrées / sorties parallèles

    1. PORT A

    2. Le port A est dédié au TIMER, il est donc rarement utilisé en port d'entrée / sortie.

    3. PORT B

    4. Le port B est uniquement un port de sortie. PORTB $1004

    5. PORT C

    6. Registre de donnée. PORTC $1003

      Registre de direction (Data Direction for Port C) DDRC $1007

    7. PORT D

    8. Ce port est partagé avec les liaisons série SPI et SCI. Son utilisation en tant que port d'entrée/sortie impose que les SPI et SCI ne soient pas utilisées.

      Registre de donnée PORTD $1008

      Registre de direction DDRD $1009

    9. PORT E
    Le port E est uniquement un port d'entrée. PORTE $100A
     
     
  10. Le convertisseur Analogique / Numérique

  11. - Convertisseur 8 bits par approximation successive.

    - Multiplexage des 8 entrées à convertir.

    - Les résultats sont stockés dans les registres de ADR1 à ADR4.

    - Sélection des entrées et des registres aux moyens des 4 bits de CA à CD dans ADCTL.

    Le registre OPTION permet de configurer les registres ADPU et CSEL.

    ADPU = 1 (Mise en route du convertisseur par activation de la pompe de charge)

    ASEL = 1 (Sélection d'une autre horloge pour la pompe de charge).

    Le registre de contrôle ADCTL permet de contrôler les registres suivants :

    CCF : Drapeau d'indication de fin de conversion (en lecture).

    SCAN : Balayage continu des canaux d'entrée.

    MULT : Choix de 1 ou plusieurs canaux sélectionnés par les bits CD, CC, CB, et CA

    Les résultats sont stockés dans les registres ADR1, ADR2, ADR3 et ADR4 correspondant aux adresses $1031, $1032, $1033 et $1034.

  12. Le Timer


 
 

Caractéristiques électriques