Introduction 68hc11

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 25

Généralité

L'architecture du microprocesseur, est la spécification fonctionnelle d'un microprocesseur. L'architecture


comprend notamment une unité arithmétique et logique UAL et d'un ensemble de registres visibles par le
programmeur et d'une organisation de la mémoire (RAM, ROM, EEPROM) et un Bus de donnée, un bus
d’adresse et les Ports Entrées/Sorties.

Schémas simplifié d’un microprocesseur

1
 I.1- Les Registres
Ce sont des accumulateurs interne dans le microprocesseur (CPU) qui ont pour but le chargement
des données (de la mémoires vers le CPU) et du stockage des données dans la mémoire (du CPU
vers la mémoire) . Ces données sont traitées par le CPU.

 I.2- L'UAL (Unité Arithmétique et Logique) :


UAL est l'organe du microprocesseur chargé d'effectuer les calculs. Il est composé :

 D'une unité Arithmétique qui fait les opérations mathématiques de base l'addition '+', la
soustraction ' ', la multiplication '∗' et la division '/'.
 D'une unité logique qui fait les opérations suivantes, le ET logique (fonction AND), le OU logique
(fonction OR), le Non logique (fonction NOT), le OU exclusive (la fonction XOR).
 D'une unité de comparaisons : test d'égalité =, supérieur >, inférieur <, et leur équivalents >=,
<= et ≠ non égale.
 Les fonctions de décalage gauche (Left Shift Register) et Les fonctions décalage droite (Right
Shift Register).

Il y a d'autre opération qui sont spécifique aux microprocesseurs pour les opérations de virgule
flottant:

2
 inverse (1/x) ;
 racine carrée ;
 logarithmes ;
 fonctions transcendantes (sin x, cos x, etc.) ;
 opération vectorielle (produit scalaire, vectoriel, etc.) ;
 etc.

Dans notre cas on va utiliser un microcontrôleur 68HC11 qui est limité seulement aux opérations
Arithmétique et logique.

3
I.3. Le Bus de Donnée et le Bus Adresse :

Le Bus de donnée est le bus qui nous permet de stocker (du CPU vers la mémoire) et de charger les
données (de la mémoire vers le CPU). Les données sont stocker dans la mémoire sous la forme d'une
donnée de 8 bits pour le 68HC11. Pour accéder à ces données ont besoin d'un bus d'adresse qui va nous
aider à choisir la donnée à traiter (stockage ou chargement) qui se trouve dans la mémoire.

I.4. La mémoire :
La mémoire est la composante (généralement externe) essentielle utilisé par le CPU dans le traitement et
le stockage de données. Il y a plusieurs types de mémoires :

 La RAM : appelé mémoire Vive. C'est une mémoire volatile ou les données stockées sont effacés
après la coupure du courant électrique. Elle est utilisé pour stockes des données traités par le CPU.
 L'EEPROM appelé mémoire morte effaçable électriquement et programmable électriquement.
C'est une mémoire non-volatile. Elle est utilisé pour stockes des instruction de programmes traités par
le CPU.
 La ROM appelé mémoire morte non-effaçable seulement par Ultra-Violet, sont utilisées pour stocker
les instructions de programmes du bootloader. Au début du lancement du Microprocesseur appelé
phase du BOOT.

4
II. Architecture interne du 68HC11

II.1 Le CPU (Central Processing Unit )


Centre neural du 68HC11, le CPU (ou microprocesseur) à pour tâche d'interpréter et d'exécuter les
programmes stockés en mémoire, d'effectuer des calculs lorsque cela s'avère nécessaire, et de
coordonner l'action des différents éléments du microcontrôleur. Le CPU du 68HC11 gère des données
codées sur 8 bits ( parfois 16bits ), et un espace mémoire codé sur 16 bits, soit 65536 adresses.

 un microcontrôleur en technologie HCMOS.


 512 octets de EEPROM (voir tableau II.1) utilisée pour stocker le programme.
 1 Koctets de RAM (voir tableau II.1) utilisé pour stocker les données du programme.
 Un timer 16 bits.
 2 accumulateurs 8 bits et 2 registres index 16 bits.
 Une liaison série asynchrone (SCI).
 Une liaison série synchrone (SPI).
 Un convertisseur Analogique/Numérique 8 bits,8 entrées multiplexées.
 Circuit d’interruption temps réel.
 Circuit oscillant externe.

5
Tableau II.1 : Différent type de microcontrôleur 68HC11 et leurs configurations mémoires internes

6
II.2 Les Registres
Les registres du 68HC11 dispose, en interne du 68HC11 :

a) Les accumulateurs A, B et D:
Les accumulateurs A et B sont des registres à usage générale, codés sur 8 bits chacun, qui peuvent au
besoin être réunis pour former l'accumulateur D (Double), sur 16 bits. Ces accumulateurs sont employés
en permanence pour effectuer des transferts, des opérations logiques, arithmétiques ou autres sur les
données.

Exemple 1 :

.text

_main ::

ldaa #54 ; chargement de l'accumulateur

ldaa $0100 ; chargement de l'accumulateur A par la valeur qui se trouve à l'adresse $0100 .

staa $0102 ; stockage de la donnée de l'accumulateur A dans la mémoire à l'adresse $0102 .

adda #23 ; Addition de la valeur de l'accumulateur A avec la valeur 23 puis le résultat est placé dans le même
accumulateur .

ldab #32 ; chargement de l'accumulateur

7
ldab $0103 ; chargement de l'accumulateur B par la valeur qui se trouve à l'adresse $0103.

stab $0104 ; stockage de la donnée de l'accumulateur B dans la mémoire à l'adresse $0104

addb #44 ; Addition de la valeur de l'accumulateur B avec la valeur 44 puis le résultat est placé dans le même
accumulateur .

rts

Exemple 2 :

.text

_main ::

ldaa #54 ; chargement de l'accumulateur

inca ; incrémentation de la valeur de l'accumulateur

ldab #63 ; chargement de l'accumulateur

decb ; décrémentation de la valeur de l'accumulateur

rts

8
b) Les Registres d'index X (IX) et d'index Y (IY)
Ce sont deux registres d'index X et Y codés sur 16bits chacun, ils peuvent est être utilisé l'adressage
jusqu'à 64 ko de mémoire avec le 68HC11. Tout comme A et B, ils peuvent être employés pour stocker
temporairement des données comme des compteurs ou effectuer des opérations sur des adresses
mémoire du 68HC11.

Exemple 3 :

.text

_main ::

ldx #$0E54 ; chargement du registre index X←$0E54

ldx $0100 ; chargement du registre index X par la donnée qui se trouve à l'adresse $0100 X←Adresse($0100) .

stx $0102 ; stockage de la donnée du registre index X dans la mémoire à l'adresse Adresse($0102)←X .

inx ; incrémentation de la valeur du registre index X X←X+1

rts

9
c) Registre de Pile (SP)
Un registre appelé SP (Stack Pointer), c'est le pointeur de pile SP, qui en permanence pointe sur la
prochaine case mémoire RAM libre. Utilisé pour pointer sur les données locales des sous-programmes ou
à la prochaine instruction après l'appel du sous-programme.

d) Un registre PC
Un registre PC (Program Counter) compteur programme, sur 16 bits, pointe sur la prochaine instruction à
exécuter du programme (principale _main ou du sous-programme), il est utilisé lorsque l'on effectue un
saut ou un branchement.

10
e) Le registre d'états CCR
Le registre d'états CCR (Condition Code Register), très commode pour les branchements conditionnels.
Ce Registre codée sur 8 bits est composé de plusieurs drapeaux (flags) , il nous donne un renseignement
sur l'état de la donnée résultante d'une opération logiques ou arithmétiques, etc. Chaque bit à une
signification particulière:

 Le bit C (Carry) : C 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) : V est mis à 1 lorsqu’une opération arithmétique génère un débordement de


l’accumulateur.
 Le bit Z (Zero) : Z est mis à 1 lorsque le résultat de l’instruction exécuté est nul.
 Le bit N (Negative) : N est mis à 1 lorsque le résultat de la dernière opération arithmétique réalisée
est négatif (bit de poids fort du résultat à 1).

 Le bit H (Half carry) : H, demi-retenue, est mis à 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 (en anglais BCD), c’est à dire
codée en fait sur 2 groupes de 4 bits.

11
 Le bit I (Interrupt mask) : I interdit toute interruption masquable lorsqu’il est mis à 1. C'est à dire qu'il
permet d'autoriser les interruptions du TIMER, ACIA et autres. Suite à un RESET, I est mis à 1.

 Le bit X (Xirq interrupt mask) : X interdit toute interruption masquable lorsqu’il est mis à 1. Suite à un
RESET, X est mis à 1. Attention XIRQ est une interruption non masquable en général, mais dans le cas
du 68HC11, il est possible de la masquer.

 Le bit S (Stop disable) : S est mis à 1 pour interdire l’exécution de l’instruction STOP. Elle sera
considérée comme un simple NOP (No OPeration).

Remarque : Il existe certaines instructions pour manipuler directement certains bits du registre CCR.

12
III. Les Portes Entrées/Sorties (Input/Output Gates)
 PORTA ($1000) :

Le PORTA est un port parallèle à usage général qui permet d’avoir des entrées/sorties sur 8bits. Il dispose
pour cela d’un registre DDRA qui permet de définir le sens de transfert de chacune des broches
affectées à ce port. Les fonctions des broches du PORTA sont partagées avec le compteur Timer interne
du HC11. L’état du PORTA peut être lu à tout moment.

Le registre DDRA, registre de direction des données pour le port A, $1001 :

DDRA[7:0] : direction des broches pour le PORTA


0=une des broches du PORTA est configuré en entré.
1=une des broches du PORTA est configuré en sortie.

 PORTB ($1004) :

Le PORTB est un port parallèle utilisable uniquement en sortie (8bits). En mode mono-puce et en
mode BootStrap, les broches du PORTB sont validées en sorties. En mode étendue, les 8 broches du
PORTB deviennent le Bus de poids fort d’adresses ADDR[15:8] du MCU. L’état du PORTB peut être lu à tout
moment.

13
 PORTC ($1006):

Le PORTC est un port parallèle à usage général codé sur 8bits. Il dispose d’un registre DDRC permettant
la programmation du sens du transfert des données sur chacun des broches. En mode mono-puce et en
mode BootStrap, les 8 bits du PORTC peuvent être configuré sois entrées ou en sorties. En mode étendue,
le PORTC est configuré comme bus de données 8bits DATA[7:0]. L’état du PORTC peut être lu à tout
moment.

Le registre DDRC, registre de direction des données pour le PORTC, $1007 :

DDRC[7:0] : direction des broches pour le PORTC


0=une des broches du PORTC est configuré en entré.
1=une des broches du PORTC est configuré en sortie.

 PORTD ($1008) :

Le PORTD est un port parallèle à usage général codé sur 6bits. Il dispose d’un registre DDRD permettant
la programmation du sens du transfert des données sur chacun des broches. Les 6 bits peuvent être aussi
affectés à des fonctions de communication via les protocoles SCI ou SPI.

Le registre DDRD, est un registre de direction des données pour le PORTD, $1009 :

14
Bits [7 :6] : non implémentés, retournent toujours à zéro.
DDRD[5 :0] : direction des données pour le PORTD
0=entée
1=sortie

 PORTE :

Le PORTE est un port parallèle utilisable uniquement en entrées (8bits). En plus les broches du PORTE sont
partagées avec les entrées du convertisseur analogique/numérique ADC. Il est possible d’utilisé quelque
broches du PORTE en numérique et d’autre broches mode en analogique en même temps.

 PORTF :

Le PORTF est un port parallèle utilisable uniquement en sorties (8bits). Le PORTF est utilisable uniquement
en sortie (8 bits). En mode mono-puce, les broches sont des sorties à usage général. En mode étendue, le
port F est configuré comme bus poids faible d’adresses ADDR[7:0]. Le PORTF peut être lu à tout moment.

 PORTG :

Le PORTG est un port d’usage général qui permet les entrées/sorties sur 8 bits. Le port G peut être lu à
tout moment. En mode étendue, les quatre bits 7 à 4 du port G peuvent être configurés en validation
d’adresse (Chip Select).

Le registre DDRG est un registre de direction des données pour le PORTG, $1003 :

15
DDRG [7 :0] : direction des données pour le port G
0=entrée
1=sortie

 Tableau II.2 : configuration des ports d’entrées/ sorties du 68HC11F1

16
Figure II.2 : Bloc Diagramme du Microcontrôleur 68HC11

17
Exemple 5 :

PORTA=$1000

DDRA=$1001

.text

_main::

ldaa #$0F

staa DDRA ; configuré les bits poids forts du PORTA en entré et les bits poids faible du PORTA en sortie

ldaa #$7F

staa PORTA ; rendre les 4 sorties poids faible du PORTA égale à 1.

rts

18
IV. Les Modes d'adressages

 L’une des particularités des MCU de la famille MC68HC11xx est la diversité des modes d’adressage
qui donne toute la puissance propre à ces microcontrôleurs.

1) IMMEDIAT
Dans le mode d’adressage IMMEDIAT, l’argument est contenu dans l’octet (les octets si le code
porte sur 16 bits) qui suit le code opératoire. Le nombre d’octet qui suit l’opcode correspond à la
taille du registre utilisé pour effectuer la fonction demandé. Ces instructions comprenant deux, trois
ou quatre octets. L’adresse effective est l’adresse de l’octet suivant l’instruction.

Exemple 1 :

ldaa #$10 ; la valeur $10 est chargée dans l'acc A

adda #05 ; la valeur 05 est additionnée avec le contenue de l'acc A. alors A=$10+5=$15

ldab #$15 ; la valeur $15 est chargée dans l'acc B

addb #03 ; la valeur 03 est additionnée avec le contenue de l'acc B. alors B=$15+3=$18

ldx #$0100 ; la valeur $0100 est chargée dans le registre index X.

19
2) DIRECT
Dans ce mode, l’octet bas de l’adresse de l’opérande est contenu dans un seul octet qui suit le
code opératoire, l’octet haut de cette adresse étant supposé être $00 (exemple à la place $0025 ,
on écrit $25). Cela permet d’accéder directement à l’espace mémoire compris entre $00 et $FF en
utilisant une instruction codée sure seulement deux octets. Cette méthode est la plus rapide et doit
être utiliser pour accéder au donnés les plus fréquentes que l’on aura implémentées dans
l’espace $0000-$00FF. L’adresse de l’opérande est codée sur un seul octet qui représente les 8 bits
bas de l’adresse effective, les 8 bits hauts étant supposés égale à zéro.

Exemple 2 :

ldaa $25 ; la donnée de l'adresse $0025 est chargée dans l'acc A

adda $26 ; la donnée de l'adresse $0026 est additionnée avec le contenue de l'acc A.

staa $27 ; la donnée de l'acc B est stockée à l'adresse $0027

ldx $30 ;la donnée qui se trouve à l'adresse $0030 est chargée dans le registre index X.

20
3) ETENDUE

Dans ce mode l’adresse effective de l’argument est contenue dans les deux octets qui suivent le
code opératoire. Ces instructions comprennent trois ou quatre octets, dont deux octets pour
l’adresse et un ou deux pour le code opératoire.

Exemple 3 :

ldaa $0125 ; la donnée de l'adresse $0125 est chargée dans l'acc A

adda $0E26 ; la donnée de l'adresse $0E26 est additionnée avec le contenue de l'acc A.

staa $0027 ; la donnée de l'acc B est stockée à l'adresse $0027

ldy $1E30 ;la donnée qui se trouve à l'adresse $1E30 est chargée dans le registre index Y.

stx $1E30 ;la donnée du registre X est stockée à l'adresse $1E30 .

4) INDEXE (Registre index IX et IY)

Dans le mode d’dressage indexé ou appeler aussi indirect, un décalage (offset) de valeur positif,
codé sur un octet non signé (offset max 255), est ajouté à la valeur contenue dans un des registres

21
d’index (IX ou IY) pour former l’dresse effective de l’argument. L’adresse de la donnée est calculé
en additionnant la valeur de registre X avec l’offset.

Exemple 4 :

ldx #$0100 ; la valeur $0100 est chargée dans le registre index X. mode adressage immédiat.

ldy #$0200 ; la valeur $0200 est chargée dans le registre index Y. mode adressage immédiat.

ldaa 0,x ; la donnée de l'adresse $0100 est chargée dans l'acc A. mode adressage indexée.

ldab 1,x ; la donnée de l'adresse $0101 est chargée dans l'acc B. mode adressage indexée.

staa 0,y ; la donnée de l'acc A est stockée à l'adresse $0200. mode adressage indexée.

stab 3,y ; la donnée de l'acc B est stockée à l'adresse $0203. mode adressage indexée.

5) INHERENT

Dans le mode inhérent, toute l’information nécessaire pour exécuter l’instruction est contenue dans
le code opératoire. Tout les fonctions qui utilisent les instructions qui ne comprennent qu'un
argument, sont inclut dans ce mode d’dressage. Ces instructions comprennent un ou deux octets.

22
Exemple 5 :

aba ; fait la somme de l'acc A et l'acc B puis sauvegardé dans l'acc A.

mul ; fait le produit de l'acc A et l'acc B puis sauvegardé dans le registre D (à 2 octets).

6) ABSOLUE

Le mode d’adressage absolue utilisé pour les instructions de branchement. Si la condition de


branchement et logiquement vraie. Il y a seulement deux instructions de branchement, la première
pour les saut jmp et la deuxième pour les sous-programme jsr. Les branchements se font vers des
adresses absolues codée sur 2 octets (16bits).

Exemple 6 :

elm01 :: inca

staa $1000

jmp elm01 ; saut absolue à l'adresse qui se trouve à elm01 , le compilateur controlBoy le
remplace par une adresse absolue.

23
7) RELATIF
Le mode d’adressage relatif est utilisé pour les instructions de branchement. Si la condition de
branchement et logiquement vraie. Il y a seulement plusieurs instructions de branchement, la
première pour les saut bne, beq, ble, bge, blt et bgt et la deuxième pour les sous-programme bsr.
Généralement, les modes relatifs comprennent 2 octets.

Exemple 7 :

ldaa #20

elm02 :: deca

staa $1000

bne elm02 ; saut relatif à l'adresse qui se trouve à elm02 , le compilateur controlBoy
remplace elm02 par la différence entre l'emplacement actuelle de l'adresse de l'instruction bne et
l'emplacement ou se trouve l'étiquette elm02 .

24
Les Boucles

25

Vous aimerez peut-être aussi