Introduction 68hc11
Introduction 68hc11
Introduction 68hc11
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.
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
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 $0100 ; chargement de l'accumulateur A par la valeur qui se trouve à l'adresse $0100 .
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 .
7
ldab $0103 ; chargement de l'accumulateur B par la valeur qui se trouve à l'adresse $0103.
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 ::
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 $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 .
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 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.
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.
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
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
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 :
adda #05 ; la valeur 05 est additionnée avec le contenue de l'acc A. alors A=$10+5=$15
addb #03 ; la valeur 03 est additionnée avec le contenue de l'acc B. alors B=$15+3=$18
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 :
adda $26 ; la donnée de l'adresse $0026 est additionnée avec le contenue de l'acc A.
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 :
adda $0E26 ; la donnée de l'adresse $0E26 est additionnée avec le contenue de l'acc A.
ldy $1E30 ;la donnée qui se trouve à l'adresse $1E30 est chargée dans le registre index Y.
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 :
mul ; fait le produit de l'acc A et l'acc B puis sauvegardé dans le registre D (à 2 octets).
6) ABSOLUE
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