Hc11

publicité
Le µcontrôleur 68HC11
Notion de µprocesseur :
Un µprocesseur est une structure intégrée capable d'exécuter une suite d'actions
suivant un ordre prédéterminé écrites dans un programme. On appelle "jeu
d'instructions" l'ensemble des actions que le µprocesseur sait exécuter. Le dessin
ci-dessous renseigne sur l'organisation interne (l'architecture) possible d'un
µprocesseur.
Le µprocesseur communique avec l'extérieur par l'intermédiaire d'un bus de
données. Il gère la mémoire par l'intermédiaire d'un bus d'adresses.
Il possède de registres internes (lignes mémoire RAM) indispensables à son bon
fonctionnement. Parmi ces registres il faut remarquer : le compteur programme
(il contient l'adresse mémoire de la ligne programme à exécuter) la pile LIFO
qui permet de sauvegarder le contexte du µprocesseur et l'accumulateur qui a un
rôle très particulier (c'est sur son contenu que sont exécutées les instructions
arithmétiques et logiques).
L'ALU (unité arithmétique et logique) constitue le calculateur du µprocesseur.
L'UCT (unité de contrôle) gère le séquencement de l'ensemble.
Pour pouvoir fonctionner un µprocesseur a besoin de mémoire (RAM pour les
données et de type ROM pour le programme) et de circuits de couplage (série ou
parallèle) qui permettent la connexion avec le monde extérieur.
hc11+regétat.doc
1/10
Le µcontrôleur 68HC11
Notion de µcontrôleur :
Les µcontrôleurs sont des circuits intégrés qui ont été développés dans un souci
de miniaturisation. Un µcontrôleur est constitué d'un noyau (un µprocesseur)
auquel on ajoute l'ensemble des circuits nécessaires à garantir son autosuffisance
(mémoires, registres spécifiques, circuits de couplage etc.). Il dispose du jeu
d'instruction du µprocesseur dont il est issu auquel on ajoute quelques
instructions particulières (généralement des instructions de manipulation de bits)
afin de réduire la taille des programmes.
Les circuits de couplage (ou périphériques) sont appelés "ports d'E/S" et sont de
type série ou parallèles. Leur nombre et leur nature dépendent de la destination
du µcontrôleur.
La mémoire de type ROM contient le programme; son contenu est fixe. Le
programme est directement exécuté à partir de la mémoire ROM. Elle peut
éventuellement être effacée pour être reprogrammée (nouvelle application ou
évolution du programme). Sa taille est importante (plusieurs koctets). Elle est de
type ROM (programmation en usine à l'intégration du circuit), de type PROM
(OTP One Time Programmable) ou EEPROM (mémoire flash).
La mémoire RAM contient de façon temporaire les données gérées par le
programme (les variables). Sa taille est réduite (quelques centaines d'octets).
Le choix d'un µcontrôleur est dicté par le nombre de lignes d'E/S nécessaires et
la taille de la mémoire ROM et RAM possibles.
hc11+regétat.doc
2/10
Le µcontrôleur 68HC11
Structure interne du µcontrôleur 68HC11
Le µcontrôleur 68HC11 a un bus de données de 8 bits et d'adresses de 16 bits
(champ adressable 64ko).
Les principaux registres internes contenus dans la CPU:
2 accumulateurs 8 bits A et B concaténables pour former l'accumulateur D
2 registres d'index 16 bits X et Y.
Les ports d'E/S: ils sont au nombre de 5 mais seuls 3 (PortB PortC et PortE) sont
facilement utilisables comme des lignes d'entrées sorties.
PortB: 8 bits en sortie uniquement adresse $1004
PortC: 8 bits E/S adresse $1003. On peut configurer chaque ligne du
PortC en entrée ou en sortie indépendamment des autres en écrivant un mot de
direction dans le registre DDRC d'adresse $1007 (un bit du DDRC à 0 place le
bit de même poids du PortC en entrée et un bit du DDRC à 1 place le bit de
même poids du PortC en sortie).
PortE: 8 bits en entrées ou 8 voie analogique orientées vers un CAN
adresse $100A.
hc11+regétat.doc
3/10
Le µcontrôleur 68HC11
CCR : le registre d’état
b7
S
X
H
I
N
Z
V
b0
C
Le registre CCR est positionné par l’instruction en cours, à la fin de son
traitement par le processeur. Bien qu’on puisse regrouper différentes instructions
entre elles de manière à connaître leur résultat vis à vis de ce registre, chaque
instruction va influencer sur le CCR d’une manière qui lui est propre. Pour lever
le moindre doute, le seul recours est le jeu d’instructions fourni par le
constructeur qui fait état des bits suite à une instruction donnée.
•
C (Carry : Retenue) : est mis à 1 lorsque le résultat de l’instruction génère une retenue.
Le terme retenue doit être pris au sens large du terme, elle concerne les instructions
qui se rapportent à :
l’arithmétique
les décalages / rotations
les comparaisons
les calculs de compléments
etc.
•
V (oVerflow = débordement) : positionné à 1 lorsque l’opération arithmétique a généré un
débordement de l’accumulateur utilisé.
Ex :
LDAA#255
INCA
ici A=0 et V=1
En effet, il y a débordement car la valeur de A devrait être 256 ce que ne peut stocker
un registre 8 bits, et qui passe donc à 0.
•
Z (Zéro) : passe à 1 lorsque le résultat de l’instruction est nul.
Ex :
CLRA ou LDA #01
DECA
ici Z=1 car A=0
•
N (Négatif) : positionné à 1 si le résultat de la dernière opération arithmétique réalisée est
négative, c’est à dire lorsque le bit de poids fort vaut 1 ( cas des nombres signés ).
•
H (Half Carry = demi retenue) : utilisé lors des calculs DCB ( Décimal Codé Binaire ).
•
I (Interrupt mask = masque d’interruption) : ce bit inhibe les interruptions lorsqu’il vaut 1.
•
X (XIRQ interrupt mask = masque d’interruption XIRQ) : de la même manière que le bit
I, X inhibe l’interruption XIRQ lorsqu’il vaut 1.
•
S (Stop) : positionné à 1, l’exécution de l’instruction STOP est remplacée par un NOP.
Remarque : l’instruction STOP fait passer le processeur en mode « endormi ».
Cela signifie que l’horloge interne est arrêtée. Lorsque le processeur est réveillé,
cette horloge sera valide après un certains nombres de cycles dus à un état
transitoire de mise en oscillation du quartz (ce qui peut être à proscrire dans
certaines applications de type temps réel).
hc11+regétat.doc
4/10
Le µcontrôleur 68HC11
1.
L'assembleur HC11:
Définition :
Le programme pour pouvoir être exécuté doit être chargé en mémoire. Les
mémoires ne contiennent que des mots écrits en binaire sous forme d'octets.
Une fois écrit un programme doit donc être traduit en binaire (on dit en code
machine).
Le langage assembleur est un langage de programmation de bas niveau (par
opposition aux langages évolués). Cela signifie qu'il peut être directement
traduit en binaire sans interprétation de son contenu. Il fait appel à des
mnémoniques qui sont des mots constitués d'abréviations de l'action que doit
réaliser l'instruction (tout cela en anglais). Par exemple le mnémonique
LDAA signifie LoaD Accumulator A.
Règles syntaxiques :
Une ligne de programme est décomposée en 4 zones (appelées champs) :
label, mnémonique, opérande et commentaire. On passe d’un champ au
suivant avec un espace ou une tabulation. Il est conseillé d’utiliser un éditeur
assembleur pour saisir le programme car avec la tabulation chaque champ est
indenté (aligné verticalement) ce qui en facilite la lisibilité.
Exemple de ligne assembleur :
encor ldaa $2000 ; initialisation de A
encor est un label (ou étiquette) ldaa est le mnémonique de l’instruction
$2000 est l’opérande (ce sur quoi porte l’instruction) et ce qui suit ; des
commentaires.
Une étiquette sert à repérer une ligne ou une zône de programme. Une
étiquette ne génère pas de code machine. Une ligne doit contenir un
mnémonique ou un mnémonique et son opérande. Seuls les mnémonique et
les opérandes génère du code machine. Une ligne précédée d’un des 2
caractères suivants « * » ou « ; » est ignorée lors de l’assemblage du
programme.
Les opérandes numériques sont exprimés par défaut en décimal ; pour une
écriture en hexadécimal le nombre doit être précédé du symbole $ et % pour
du binaire.
L’assembleur ne distingue pas les minuscules des majuscules sauf pour les
étiquettes.
Modes d’adressage :
Les modes d’adressage caractérise la façon dont on accède à la mémoire pour
une instruction de sauvegarde (STA : Store Accumulator) ou à la donnée.
Lors de l’écriture d’un programme le choix du mode d’adressage utilisé pour
chaque instruction est primordial car il conditionne le format de l’instruction
(nombre de lignes mémoire occupées).
hc11+regétat.doc
5/10
Le µcontrôleur 68HC11
Le 68HC11 dispose de 6 modes d’adressage :
1. Adressage inhérent :
L’opérande est un registre interne du µcontrôleur. Son nom est
contenu dans le mnémonique et l’instruction ne contient qu’un seul
octet. Exemple DECA DECrement accumulator A.
2. Adressage direct :
L’opérande est une adresse exprimée sur 1 octet (donc limitée aux 256
1ères lignes). Le format de l’instruction est 2 octets. Exemple : STAA
$26 Store Accumulator A à l’adresse $26.
3. Adressage étendu :
L’opérande est une adresse écrite sur 2 octets. On a accès à la totalité
du champ adressable par le bus de données (l’adressage est étendu à la
totalité de la mémoire). Le format de l’instruction est 3 octets.
Exemple STAA $1026 Store Accumulator A à l’adresse $1026.
4. Adressage indexé :
On accède à une ligne par l’intermédiaire d’un pointeur appelé index
(registre d’index X ou Y). L’adresse effective (adresse physique de la
ligne sur laquelle va porter l’instruction), notée AE, est obtenu en
ajoutant au contenu de l’index utilisé un déplacement exprimé sur 1
octet qui est l’opérande de l’instruction. Il ne faut pas oublier
d'initialiser le registre d'index utilisé par une instruction de
chargement.
Exemple : pour l’instruction suivante STAA $26,X AE=contenu de X
+ $26. Le format de l’instruction est 2 octets.
5. Adressage relatif :
L’opérande est un nombre relatif codé sur 1 octet. Ce mode
d’adressage est utilisé pour les instructions de branchement (saut
court). L’opérande indique de combien de lignes il faut se déplacer
dans le programme pour effectuer le branchement. Le format de
l’instruction est 2 octets. Exemple BRA ENCOR qui signifie aller se
brancher (BRanch Always) à la ligne d’étiquette ENCOR.
6. Adressage immédiat :
L’opérande est la donnée sur laquelle l’instruction doit porter. Le
format de l’instruction est 2 octets. Exemple LDAA #$26
LoaD
Accumulator A avec la donnée $26.
Langage symbolique: le langage symbolique permet de traduire
l'action d'une ligne programme sous forme simplifiée. Le signe « = »
est le symbole d'affectation. Ainsi « PB0=1 » signifie mettre le bit de
poids faible du PortB à "1". On distingue une adresse de son contenu
grâce aux « ( ) ». Ainsi M désigne la ligne d'adresse M et (M) son
contenu. Les flèches correspondent aux instructions de transfert. Ainsi
$10→A signifie charger A avec la valeur $10; ($10) →A signifie
charger A avec le contenu de la ligne d'adresse $10.
hc11+regétat.doc
6/10
Le µcontrôleur 68HC11
7. Le jeu d’instructions
Les instructions logiques :
Opérations logiques
AND
ORA
EOR
COM
Tests et manipulations de bits :
BIT
BCLR
BSET
Décalages et rotations :
ASL
ASR
LSL
LSR
ROL
ROR
Opérations arithmétiques :
D'addition
ABA
ABX
ABY
ADC
ADD
De comparaison
CMP
CPD
CPX
CPY
CBA
De multiplication et division
MUL
FDIV
IDIV
De soustraction
SBC
SUB
NEG
D'incrémentation et décrémentation
INC
INX
INY
INS
DEC
DEX
DEY
DES
De test
TST
I
Chargement, stockage, transfert et échange
CLR
LD
ST
PUL
PSH
TAB
TBA
TAP
hc11+regétat.doc
De branchement
BRA
BRN
BCC
BCS
BEQ
BNE
BMI
BRCLR
7/10
Le µcontrôleur 68HC11
TPA
BRSET
TSX
BGE
TXS
BGT
TSY
BHI
TYS
BHS
XGDX
BLE
XGDY
BLO
BLS
Contrôle
NOP
BLT
STOP
BSR
WAI
BVC
SWI
BVS
RTI
RTS
CLI
CLC
CLV
SEC
SEV
La description détaillée des instructions est donnée sur les documents
"instruct_hc11" et "instructions_hc11".
Assemblage, directives d'assemblage
Le programme écrit en langage assembleur est un fichier texte (extension ASM
ou A11). Il est converti en code machine (fichier binaire au format S19) par un
programme appelé "assembleur". Cette opération s'appelle l'assemblage du
programme. Pour pouvoir fonctionner correctement l'assembleur a besoin de
renseignements appelés "directives d'assemblage". Les directives d'assemblage
sont écrites dans le programme; elles seront exécutées par l'assembleur lors de
l'assemblage du programme mais elles ne génèrent pas de code machine.
Les principales directives sont :
ORG : définit l'adresse d'implantation du début de programme en mémoire.
Exemple: ORG $2000.
RMB : réserve un bloc mémoire à l'adresse courante (adresse où est écrite la
directive). Exemple RMB 10 réserve un bloc de 10 lignes.
ZMB : initialise une zône mémoire. Exemple ZMB 10 réserve à l'adresse
courante 10 lignes et les initialise (à 0).
FILL : idem ZMB mais il faut préciser la valeur. Exemple FILL $FF,10 10
réserve à l'adresse courante 10 lignes et les initialise à $FF.
FCB : initialise des octets avec différentes valeurs initiales. Exemple FCB 10,1
écrit à l'adresse courante 10 puis 1 à la suivante.
FCC : idem FCB mais avec une chaine de caractère écrite entre " ou ' ou \.
Exemple FCC "bonjour"
FDB : idem FCB mais avec des mots de 16 bits.
hc11+regétat.doc
8/10
Le µcontrôleur 68HC11
Programmation structurée
L'écriture d'un programme nécessite le respect de règles et une cohérence de
raisonnement.
Si un programme est simple et court il peut être écrit sous forme linéaire (les
instructions sont écrites les unes à la suite des autres).
Si un morceau de programme se répète plusieurs fois il doit être considéré
comme un sous programme. Un sous programme est écrit une seule fois à part
(en tête ou en fin de programme) et est appelé par une instruction d'appel (long :
JSR court : BSR) ; il doit impérativement se terminer par l'instruction retour de
sous programme (BSR).
Si un programme est complexe il doit être décomposé en modules (fonction,
routine, procédure, bloc suivant les langages). En assembleur ces modules
s'appellent sous programmes. Cette organisation facilite le développement la
mise au point et la maintenance du programme. Ainsi un programme écrit en
assembleur est composé d'un programme principal qui est réduit pratiquement à
des appels de sous programmes.
Développement d'un programme
Le développement d'un programme se fait suivant plusieurs étapes.
Analyse du problème posé.
Traduction du problème sous forme d'organigramme (représentaion
graphique du déroulement du programme).
Traduction
de
l'organigramme
sous
forme
d'ordinogramme
(organigramme adapté à la programmation).
Traduction de l'ordinogramme sous forme de programme écrit en
assembleur.
Simulation ou assemblage du programme et essais puis mise au point.
Une fois validé le programme est écrit dans la PROM du µcontrôleur.
Exemple de problème à résoudre (extrait) :
Si le capteur de température indique une température trop élévée il faut mettre
en marche le ventilateur puis continuer le déroulement du programme. Sinon on
continu le déroulement du programme.
1ère étape: on dessine l'organigramme du morceau de programme en utilisant des
symboles normalisés (terminaison, test ou décision, action).
2ème étape: un choix technologique a été fait; on sait que la capteur de
température est câblé sur le bit de poids faible du PortC et qu'il fournit un état
logique "1" quand la température dépasse un seuil et que le ventilateur est câblé
sur le bit de poids fort du PortB et qu'il faut un "1" logique pour le mettre en
marche. On peut alors dessiner l'ordinogramme en tenant compte de la solution
technologique retenue. On peut utiliser le langage symbolique.
3ème étape: écriture du programme :
TEMPE LDX #$1000
BRCLR $03 %00000001 FIN
BSET $04 %10000000
FIN
RTS
hc11+regétat.doc
9/10
Le µcontrôleur 68HC11
Début
température
Début
température
Température
excessive
Mettre en
marche le
ventilateur
Fin température
hc11+regétat.doc
non
PC0=1
non
PB0=7
Fin température
10/10
Téléchargement