hcs12 PDF
hcs12 PDF
hcs12 PDF
Polytech Grenoble
1re Anne
Cours de
Microcontrleurs
Christophe Durand
Anne universitaire 2009-2010
2
Document crit par JP Perrin.
Merci pour sa contribution.
3
PRAMBULE
Objectifs pistmologiques
Le but de cet enseignement est de vous familiariser avec le fonctionnement et lutilisation des
microcontrleurs, qui sont devenus aujourdhui des composants lectroniques cl et
incontournables pour tous systmes automatiss. Cet enseignement est compos de cours
thoriques (9 sances), de sances de travaux dirigs (10 sances) et de travaux pratiques (8
scances). En fin danne, la ralisation dun systme embarqu rpartie sur 7 sances
vous permettra de mettre en uvre et dapprofondir vos connaissances la fois en
microcontrleurs et en lectronique. Ce sera aussi loccasion de vous mettre en situation de
projet , situation comparable votre futur mtier dingnieur, o vous devrez faire preuve
dorganisation, de travail en quipe, de crativit et de professionnalisme.
Les microcontrleurs sont des composants intgrs qui contiennent dans un mme botier un
microprocesseur, de la mmoire, et des priphriques courants, tels que timer, liaison srie
asynchrone, liaison srie synchrone, ports dentre sortie logiques, contrleur de bus CAN,
convertisseur analogique numrique, etc. Il en existe de nombreuses versions, qui diffrent
suivant les priphriques installs. Nous avons choisi comme support du cours le
microcontrleur Motorola MC9S12DP256B, construit autour dun microprocesseur HCS12.
Lensemble est mont sur une carte de dveloppement (appele HCS12 T-Board) qui peut
communiquer avec un PC de diffrentes faons. Motorola propose plusieurs microcontrleurs
autour du mme microprocesseur comme les marques automobiles proposent plusieurs
options de carrosserie autour du mme moteur. Le modle choisi est plutt haut de gamme et
comporte un grand choix de priphriques internes.
4
5
COURS n1
Du microprocesseur au microcontrleur
Un microprocesseur muni de mmoire peut tre, dans une premire approche, considr
comme un cerveau capable deffectuer des oprations diverses (oprations arithmtiques,
logiques) et de les enchaner dans un processus cohrent. Tel quel, un microprocesseur (on
parle aussi du CPU : Central Processing Unit) na aucune utilit puisquil ne peut
communiquer avec le milieu extrieur. Pour pouvoir tre efficace, un microprocesseur doit
disposer dorganes dentre-sortie (clavier, souris, cran, haut-parleur), comme le cerveau qui
dispose dorganes dentre (oreilles, yeux, toucher) et de sortie (paroles, gestes). Nous
appelons micro ordinateur cette structure micro processeur + priphriques + liens.
contrl mmoire
de masse
contrl.clavier contrl.cran
contrl.souris contrl.son
CPU
capt.logique entre logique sortie logique act. logique
Du microprocesseur au microcontrleur
La partie principale dun micro-ordinateur est la carte mre sur laquelle sont monts le
microprocesseur, les contrleurs de priphriques et les lignes qui les connectent entre eux
sous forme de circuit imprim. Avec les progrs de la miniaturisation, et la gnralisation de
lutilisation des ordinateurs, les besoins les plus courants se sont standardiss et on a pu
disposer toute une carte mre au sein dune seule et mme puce, appele microcontrleur.
Lusage de microcontrleurs est actuellement en plein dveloppement dans toute
linformatique industrielle, et tous les degrs de complexit (de 8 pattes prs de 200
pattes).
6
Un systme informatique complet regroupe autour d'un microcontrleur un ensemble de
composants qui lui permettent de fonctionner (essentiellement mmoires) et de communiquer
avec le milieu extrieur (contrleurs de priphriques). Le fonctionnement du processeur
consiste excuter un programme, c'est dire une suite d'instructions pointes par le
compteur ordinal (pointeur de programme).
Logiciellement, les composants extrieurs au processeur sont vus comme des adresses avec
lesquelles il communique par des oprations d'criture (processeur composant) ou de
lecture (composant processeur). L'excution du programme comporte les phases suivantes :
- Lire en mmoire l'octet dont l'adresse est contenue dans le compteur ordinal,
- Analyser l'octet pour trouver le nombre d'octets qui compltent l'instruction,
- Incrmenter le compteur ordinal et lire ces octets,
- Interprter le code et excuter l'instruction, qui peut ou non comporter une lecture et
une criture une adresse.
Il y a donc sans cesse communication entre le processeur et les composants priphriques.
7
Il est donc naturel qu'on ait cherch conomiser du temps de mise au point en ralisant des
cartes standard rpondant des demandes standard elles aussi. Il existe depuis longtemps dj
dans les catalogues une grande varit de cartes d'entres-sorties adaptables une grande
varit de matriels avec une grande varit de destinations et de performances.
Les progrs de l'intgration des circuits permettent actuellement de raliser toute une carte de
dveloppement sur un seul composant. Cette ide est l'origine de tous les microcontrleurs.
Notions de microcontrleur
Le principe de base des microcontrleurs repose sur linclusion dans le mme botier du
microprocesseur et de divers priphriques, de manire avoir un composant autonome. Les
bus de donnes et dadresses sont internes au composant, ainsi que les dcodages dadresse
relatifs chaque priphrique interne . Les registres de contrle des priphriques sont
regroups dans la zone dadresse registres du microcontrleur . On trouve galement dans
cette zone divers registres de personnalisation du microcontrleur. Les pattes du composant se
rduisent alors essentiellement des lignes dentre-sortie tant logiques quanalogiques.
L'tude d'un tel composant est beaucoup plus longue et donc beaucoup plus coteuse que celle
d'une carte. Pour tre rentable, le produit doit rpondre aux besoins du plus grand nombre
pour un prix le plus modeste possible. Les fabricants proposent en gnral toute une gamme
de microcontrleurs construits partir du mme microprocesseur. De plus on peut
personnaliser chaque microcontrleur par programmation de registres internes pour encore
plus de flexibilit. Toutes les fonctions ne sont pas disponibles la fois, on aura toujours
affaire un compromis.
Les avantages dun microcontrleur sont les mmes que ceux des cartes toutes faites qu'on
trouve dans le commerce : une utilisation quasi immdiate, sans problme de conception, de
ralisation et de mise au point. On peut y ajouter son faible encombrement, son prix modr et
une plus grande fiabilit du fait que les lignes de contrle sont toutes internes.
Les inconvnients sont ceux du tout compris . On doit travailler avec les priphriques
grand public choisis par le fabricant, qui ne donnent pas toujours la souplesse d'utilisation
souhaite. Les microcontrleurs proposent en gnral une option qui permet un interfaage
par bus externe, comme avec les microprocesseurs. On peut ainsi rajouter au microcontrleur
un ou plusieurs composants tout en continuant utiliser certains de ses composants internes.
Bien entendu, on retrouve alors les problmes de ralisation pratique d'une carte.
8
Reprsentation schmatique du microcontrleur 9S12DG256B
PS7
PS6
VSSX PM0 PS5
VDDX PM1 VREGEN PS4
PK PM2 PS3
PP7 PM6
PP6 PM3 PS2 PM7
PM4 PJ6 PS1
PP5 PJ7 VSSA
PP4 PM5 PS0 VRL
112 85
PP3 1 84 VRH
PP2 VDDA
PP1 PAD15
PP0 ATD ECT CRG PIM PAD7
PK3 convertisseur timer clock & reset gestion des PAD14
PK2 analog/num ECT_16B8C generator ports PAD6
PK1 t PAD13
PK0 PAD5
PT0
PT1 EETS CPU SCI
PAD12
PAD4
PT2 -processeur PAD11
EEPROM HCS12 commun. srie
PT3 4K asynchrone PAD3
VDD1 PAD10
VSS1 PAD2
PT4
PT5
MICROCONTROLEUR PAD9
PAD1
PT6
PT7
FTS SPI PAD8
PAD0
PK5
PK4
Mmoire
Flash 256K 9S12DG256B commun. srie
synchrone
VSS2
VDD2
PJ1 PA7
PJ0 PA6
BKGD PA5
PB0 CAN PWM Autres priph. PA4
PB1 Gestion des modulation de BDLC, IIC, VREG PA3
PB2 bus CAN largeur pulse PA2
PB3 PA1
PB4 28 57 PA0
29 56
PB5 PH7 PE7 PH0 PE0
PB6 PH6 PE6 PH1 PE1
PB7 PH5 PE5 PH2 PE2
PH4 PE4 PH3 PE3
VSSR TEST
VDDR XTAL
RESET XFC EXTAL
VDDPLL VSSPLL
Pour communiquer avec lextrieur, le microcontrleur dispose en tout et pour tout de 112
pattes. Cest beaucoup trop peu pour rpondre aux besoins de tous les modules priphriques,
qui ne sont pas tous disponibles simultanment. Lorganisation du microcontrleur comprend
9
tout un arsenal de techniques pour choisir la configuration qui correspond le mieux au
traitement dun problme donn. Pour commencer, on va faire le tour du propritaire pour
savoir prcisment de quoi on dispose.
Sur la carte de TP, toutes les masses sont connectes, les trois alimentations VDDR, VDDX et
VDDA, sont relies VDD = 5V. VREGEN est 5V, ce qui valide le gnrateur interne. Les
rfrences du convertisseur sont relies VDD (pour VRH) et la masse (pour VRL).
Sur la carte de TP, loscillateur interne fournit une horloge 8 MHz. Lutilisation du PLL
permet de travailler avec une horloge 24 MHz. Pour plus de dtails, se reporter au manuel
du module CRG (Clock Reset Generator).
10
Trois pattes inclassables
- RESET ligne de la demande dinterruption CPU du mme nom,
- BKGD ligne de gestion du debugging en arrire plan
- TEST qui ne sert rien sauf aux tests en usine.
Les autre pattes, au nombre de 91, peuvent toutes servir dentres-sorties logiques dusage
gnral (ports). Elles ont presque toutes plusieurs affectations et leur dnomination varie
gnralement selon cette affectation, ce qui est une cause de confusion. Pour viter cela, on
sefforcera de leur conserver leur nom de port. La plupart sont bidirectionnelles, cest dire
quelles peuvent fonctionner en entre ou en sortie. Seules les pattes PAD0 PAD15 et les
pattes PE0 (=XIRQ) et PE1 (=IRQ) ne fonctionnent quen entre.
Modes de fonctionnement
Le microcontrleur peut fonctionner selon 8 modes diffrents. Le choix de ce mode se fait au
reset, suivant les niveaux de trois pattes ce moment : MODA (autrement dit PE5), MODB
(autrement dit PE6), et MODC (autrement dit BKGD). La slection des modes est donc
matrielle, bien quon puisse dans une certaine mesure la modifier par logiciel, comme le
montre le tableau suivant.
Seuls trois modes nous concernent en pratique : les modes dits normaux.
Dans le mode Single Chip, le MCU fonctionne comme un microcontrleur pur, sans bus
externe de donnes ou d'adresses. Ce mode permet une disponibilit maximum des lignes de
priphriques (91), l'activit des bus se passant l'intrieur du microcontrleur. La carte de
TP est prvue pour fonctionner dans ce mode.
Dans les deux modes tendus, le microcontrleur libre des pattes pour assurer les changes
de donnes avec lextrieur : ports A et B pour le bus mixte dadresses et de donnes, port E
pour les lignes de contrle et port K pour grer lextension des adresses au del de 64K. Les
deux modes diffrent par la taille des donnes changes, le mode narrow utilisant un bus
de donnes de 8 bits, tandis que le mode wide utilise un bus de donnes 16 bits.
11
L'organisation mmoire et les registres de contrle
Dans un mode donn, les options de fonctionnement ainsi que les paramtres des diffrents
modules sont essentiellement logiciels et passent par les registres de contrle du
microcontrleur (A et B, X et Y, SP, PC et PCR). Les registres de contrle occupent les
adresses mmoires basses. La place qui leur est rserve va de 0 $3FF, bien que certaines
adresses ne soient pas occupes. Suivant le mode dans lequel on travaille on na pas besoin
des mmes registres et la carte mmoire des registres en est modifie. Les implantations
mmoire elles mmes sont paramtrables par des registres, et il nest pas question ici dentrer
dans tous les dtails.
A chaque module est associ un bloc de registres contigus dans le plan mmoire. Le tableau
ci-dessous indique la rpartition mmoire des registres par module pour le microcontrleur
qui quipe la carte de TP.
Taille
Adresse Module
(octets)
0000-0017 CORE (Ports A, B, E, Modes, Inits, Test) 24
0018-0019 Rserv 2
001A-001B PARTID Device ID register 2
001C-001F CORE (MEMSIZ, IRQ, HPRIO) 4
0020-0027 Rserv 8
0028-002F CORE (Background Debug Mode) 8
0030-0033 CORE (PPAGE, Port K) 4
0034-003F CRG Clock and Reset Generator (PLL, RTI, COP) 12
0040-007F ECT Enhanced Capture Timer 16-bit 8 channel 64
0080-009F ATD0 Analog to Digital Converter 10-bit 8 channel N0 32
00A0-00C7 PWM Pulse Width Modulator 8-bit 8 channel 40
00C8-00CF SCI0 Serial Communications Interface N0 8
00D0-OOD7 SCI1 Serial Communications Interface N1 8
00D8-00DF SPI0 Serial Peripheral Interface N0 8
00E0-00E7 IIC Inter IC Bus 8
00E8-00EF BDLC Byte Data Link Controller 8
00F0-00F7 SPI1 Serial Peripheral Interface N1 8
00F8-00FF SPI2 Serial Peripheral Interface N2 8
0100-010F FTS Flash Control Register 16
0110-011B EETS EEPROM Control Register 12
011C-011F Rserv 4
0120-013F ATD1 Analog to Digital Converter 10-bit 8 channel N1 32
0140-017F CAN0 Motorola Scalable Can N0 64
0180-01BF CAN1 Motorola Scalable Can N1 64
01C0-01FF CAN2 Motorola Scalable Can N2 64
0200-023F CAN3 Motorola Scalable Can N3 64
0240-027F PIM Port Integration Module 64
0280-02BF CAN4 Motorola Scalable Can N4 64
02C0-03FF Rserv 320
Le module central, appel cur (core), regroupe autour du CPU (Central Processing Unit)
quelques sous modules : MEBI (Multiplexed External Bus Interface), BKP (Breakpoints),
INT (Interrupt), MMC (Module Mapping Control), BDM (Background Debug Module) qui
grent lorganisation de lensemble du microcontrleur autour du processeur. Les $40
premires adresses lui sont rserves.
12
Les principaux modules quon abordera dans ce cours sont les ports dentres sorties logiques
(PIM), le timer (ECT), le convertisseur analogique numrique (ATD) et les liaisons srie
asynchrone (SCI) et synchrone (SPI).
La carte mmoire du microcontrleur est la suivante (bien entendu, les registres ont la priorit
sur lEEPROM entre 0 et $3FF) :
13
COURS n2
Le codage de linformation
Gnralits
Les perceptions des organes des sens sont de nature analogique, et il peut sembler plus naturel
et plus simple de traiter l'information sous forme analogique. Actuellement, dans presque tous
les domaines, les techniques numriques prennent le pas sur les techniques analogiques pour
des raisons de facilit de manipulation et de traitement.
Le quantum (quantit la plus petite) d'information est reprsent par un systme deux tats
(haut/bas, vrai/faux, ouvert/ferm, allum/teint, etc.). Toute information numrique peut tre
reprsente par un ensemble de quanta d'information. On a dvelopp diverses technologies
pour reprsenter l'information numrique. Les calculatrices mcaniques utilisaient des
systmes 10 tats pour reprsenter les nombres entre 0 et 9.
A l'heure actuelle toute l'information numrique est dcrite partir de systmes 2 tats
(logique binaire), les plus faciles raliser et les plus fiables. L'unit associe est le bit
(abrviation de l'anglais BInary digIT : chiffre binaire). Un des tats est reprsent par le
chiffre 0 et l'autre par le chiffre 1. En micro lectronique, le 0 est souvent associ une
tension nulle et le 1 une tension 5V (standard TTL).
Pour dcrire une information non lmentaire, on a besoin de plusieurs bits. Actuellement, ils
sont regroups au moins par 4, et le plus souvent par 8 ou des multiples de 8. Un ensemble de
4 bits est parfois appel quartet (nibble en anglais). On appelle octet (byte en anglais) un
ensemble de 8 bits, et mot (word en anglais) un ensemble de 16 bits. L'octet constitue l'unit
pratique de base du traitement de l'information, plus riche que le bit tout en restant d'un
maniement commode.
14
1 0 0 0 1 0 0 1
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
(MSB) (LSB)
De mme qu'il est impossible de comprendre le mot 'four' si on ignore si le texte est anglais
ou franais, on ne peut interprter un octet indpendamment du contexte. Un bon exemple est
celui dun diteur de texte : l'diteur interprte les octets du fichier comme des caractres et
les affiche comme tels l'cran. Si le fichier a t prvu pour a (fichier texte), on obtient un
rsultat lisible. Dans le cas contraire, on a un texte incomprhensible.
La notation hexadcimale
Il existe, on l'a dit, 256 octets diffrents, qui constituent l'alphabet de base de la micro-
informatique. Il s'agit de leur donner tous un nom facilement manipulable. Le nom
'unzrozrozrounzrozroun' est peu pratique manipuler car trop long et trop monotone
l'oreille. On pourrait au contraire choisir un nom diffrent pour chaque octet : cette fois, ce
serait trop long de mmoriser 256 noms et leur correspondance binaire.
Il faut bien remarquer qu'il ne s'agit l que d'une notation permettant des changes humains
plus faciles, mais qu'il n'existe pas au niveau du processeur deux niveaux diffrents
(hexadcimal et binaire). Lutilisateur n'a besoin de mmoriser que le tableau des 16 quartets
pour reconstituer un octet binaire partir de sa notation hexadcimale. Ainsi l'octet 35 s'crira
0011 0101, et l'octet BC s'crira 1011 1100.
La typographie utilise les lettres de l'alphabet (26 majuscules et 26 minuscules), les chiffres
(10), les ponctuations et les signes opratoires (24). Le total tant compris entre 64 et 128,
on arrive la conclusion qu'il suffit de 7 bits pour reprsenter les caractres, du moins dans
les pays anglo-saxons qui ignorent les accents, les trmas et autres variations sur les
caractres.
15
Information Interchange) a survcu. Ce codage utilise les 96 octets de 20 7F pour coder les
caractres, chiffres, lettres et symboles divers doprations et de ponctuation. Les chiffres sont
cods de 30 39, les majuscules de 41 5A et les minuscules de 61 7A.
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 NUL SOH STX ETX EOT ENQ ACK BEL BS TAB LF VT FF CR SO SI
1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
2 ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~
Les codes de 00 1F ont t rservs des usages spciaux (caractres non imprimables)
dont les plus connus sont :
08 : Back Step (BS). Touche de retour en arrire (et souvent d'effacement).
0A : Line Feed (LF). Descente d'une ligne.
0D : Carriage Return (CR). Retour en dbut de ligne.
1B : Escape (ESC). Touche d'chappement.
Reprsentation ASCII dun quartet. Comme on peut le constater, les codes des caractres de
0 9 vont de 30 39, mais ceux des caractres A F ne les suivent pas immdiatement
puisquils vont de 41 46. Il y a un trou de 7 octets entre les deux sries de codes. Cest un
dfaut du code ASCII dont il faut tenir compte chaque fois quon veut extraire dun quartet le
code du caractre hexadcimal qui le dcrit.
Le codage le plus naturel des nombres par des octets est de considrer la reprsentation
binaire dun octet comme son criture en base 2. La place du bit dans l'octet reprsente la
puissance de 2 correspondante. Ainsi, l'octet B5 est l'criture en base 2 de :
B5 = 10110101 = 127 + 026 + 125 + 124 + 023 + 122 + 021 + 120
= 1128 + 064 + 132 + 116 + 08 + 14 + 02 + 11 = 181
En base 2, table daddition et table de multiplication ont toutes deux une simplicit
lmentaire :
+ 0 1 0 1
0 0 1 pour laddition, et 0 0 0 pour la multiplication,
1 1 10 1 0 1
16
La table daddition se concrtise par un demi additionneur logique deux entres A et B et
deux sorties S (chiffre des units binaires) et R (chiffre des dizaines ).
Pour pouvoir enchaner une addition sur plusieurs chiffres binaires ou non, il est ncessaire de
prvoir le report dune retenue sur le chiffre suivant. Llectronique logique propose un
additionneur rpondant la question. Il comporte trois entres A, B et la retenue C, et deux
sorties E et le report R, avec le table de vrit ci-contre : A B C S R
A B 0 0 0 0 0
Additionneur 0 0 1 1 0
A+B+C 0 1 0 1 0
+ C 0 1 1 0 1
2R+S 1 0 0 1 0
1 0 1 0 1
R S 1 1 0 0 1
1 1 1 1 1
On ralise un additionneur 2 octets en chanant 8 additionneurs :
A7 A6 A5 A4 A3 A2 A1 A0
B7 B6 B5 B4 B3 B2 B1 B0
? + + + + + + + + ?
S7 S6 S5 S4 S3 S2 S1 S0
On remarque quil subsiste une indtermination sur le bit de report en entre et en sortie. Ce
bit porte le nom de Carry (report ou retenue). Il permet une grande souplesse dutilisation.
Avec cette convention, un octet reprsente un entier de 0 (00) 255 (FF). Le nombre 256
s'crit en base 2 : 1 0000 0000 et n'est donc pas reprsentable sur un octet. Pour reprsenter
des nombres plus grands, on doit ncessairement utiliser des bits supplmentaires. Un mot
(deux octets, ou 16 bits) permet lextension des nombres plus grands. Il y a 216 = 65536
mots diffrents, ce qui permet une reprsentation des entiers de 0 65535.
Remarque 1 : on peut crire un octet en base 2 en regroupant les termes comme ci-dessous
bit727 + bit626 + bit525 + bit424 + bit323 + bit222 + bit121 + bit020 =
[bit723 + bit622 + bit521 + bit420] 16 + [bit323 + bit222 + bit121 + bit020]
Le premier crochet [bit723 + bit622 + bit521 + bit420] reprsente un nombre entre 0 et
15, de mme que le second [bit323 + bit222 + bit121 + bit020], de sorte quon a crit
loctet en. base 16. Si on appelle 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F les chiffres dcrivant les
nombres de 0 15 dans cette base, on retrouve la notation hexadcimale dun octet..
L'avantage de lhexadcimal est de fournir directement l'expression binaire de l'octet, (8=1000
et 9=1001), et sa valeur dcimale (816 + 9 = 137). Alors quen dcimal, pour retrouver le
binaire de 137, il faut le dcomposer soit en 128+8+1, soit par des divisions successives par 2.
1372=68 reste 1(bit 0); 682=34 reste 0(bit 1); 342=17 reste 0(bit 2);172=8 reste 1(bit 3);
82=4 reste 0(bit 4); 42=2 reste 0(bit 5); 22=1 reste 0(bit 6); et 12=0 reste 1((bit 7).
Remarque 2 : L'octet not 23 reprsente le nombre dcimal 35, et le nombre hexadcimal 23.
Pour viter toute confusion, on convient de faire prcder lexpression de la valeur numrique
en base 16 du signe '$'. On crira donc $23 = 35, ou $C8 = 200. Dans la suite, on confondra la
reprsentation hexadcimale dun octet avec lexpression en base 16 du nombre quil
reprsente, cest dire quon abandonnera lcriture en caractres gras au profit du signe $.
En langage C, on crit 0x23 pour prciser quon sexprime en hexadcimal.
17
Arithmtique sur les octets. Indicateur C (Carry)
Pour ajouter deux octets, on utilisera ladditionneur 8 bits ci-dessus en mettant 0 lindicateur
C. A la fin de laddition, le Carry est 0 sil ny a pas eu dbordement et 1 sinon.
Exemple 1 : Tout se passe bien, pas de retenue sur le bit 0 0 1 1 0 1 1 0 ($36=54)
7. L'indicateur C de retenue est 0. + 0 1 1 1 1 0 1 1 ($7B=123)
1 0 1 1 0 0 0 1 ($B1=177)
Exemple 2 : Le rsultat exact dpasse la capacit de
l'octet. Le rsultat rduit l'octet est donc tronqu ($5D = 1 0 0 1 1 0 0 1 ($99=153)
93) et l'indicateur C de retenue est 1. + 1 1 0 0 0 1 0 0 ($C4=196)
1 0 1 0 1 1 1 0 1 ($15D=349)
Exemple 3 : Cet exemple prcise le prcdent. On tourne 1 1 1 1 1 1 1 1 ($FF=255)
en rond sur 256 valeurs, le successeur de 255 tant 0. + 0 0 0 0 0 0 0 1 ($01=1)
L'indicateur C est bien sr 1. 1 0 0 0 0 0 0 0 0 ($100=256)
Si on reprsente les nombres sur un octet, et si on veut
respecter la loi d'addition binaire, tous les nombres gaux modulo 256 sont reprsents par le
mme octet. Dans la convention des nombres non signs, les octets reprsentent les entiers de
0 255, et le carry fournit un contrle de droulement correct des oprations arithmtiques.
On remarque que le bit 7 des nombres ngatifs est 1 et celui des nombres positifs 0. C'est
pourquoi on appelle le bit 7 bit de signe. On note aussi que l'oppos de -128 ($80) est -128, ou
plutt que 128 et -128, qui diffrent de 256, sont reprsents par le mme octet.
En nombres signs, l'indicateur C n'est pas significatif. Cette convention a besoin dun autre
indicateur (V : dbordement) qui signale une anomalie au sens des nombres signs.
18
Remarque : Le mcanisme de fonctionnement de l'addition de deux octets est indpendant de
la convention choisie (nombres signs ou non), de mme que le positionnement des
indicateurs. Suivant le cas, on tiendra compte de C ou de V pour la validit des rsultats.
Dcalages doctets
On ralise en lectronique des registres dcalage qui permettent une translation dun octet
vers la droite ou vers la gauche, cest dire une recopie simultane de chacun des bits de
loctet sur son voisin de droite ou de gauche. Bien sr un problme se pose pour les deux bits
extrmes, le premier qui na pas de prcdent et dont il faut choisir ltat arbitrairement, et le
dernier dont linformation nest pas conserve dans loctet.
>>
dcalage droite ? ?
<<
dcalage gauche ? ?
Cest encore le carry qui sert dintermdiaire pour grer le bit entrant ou sortant du dcalage
doctet. Lorsque les octets reprsentent des nombres, un dcalage vers la droite correspond en
gros une division par 2 et un dcalage gauche une multiplication par 2.
Le HCS12 a plusieurs instructions de dcalage selon le choix des octets du bout. Ce sont :
- Les dcalages logiques droite ou gauche (LSR et LSL : Logical Shift Right ou Left) dans
lesquels loctet qui sort va dans le Carry et loctet qui rentre est un 0.
LSR LSL
0 C C 0
- Les dcalages arithmtiques droite et gauche (ASR et ASL : Arithmetic Shift). Ils sont
faits pour respecter la reprsentation des nombres signs quand cest possible. ASL et LSL
sont identiques (mmes codes) tandis que ASR recopie le bit 7 sur lui mme pour conserver le
signe dans une division par 2.
ASR ASL
C C 0
- Les dcalages circulaires droite et gauche (ROR et ROL : Rotate right ou left).
Curieusement, le HC12 ne propose pas de permutation circulaire simple, mais rajoute
systmatiquement le Carry dans la ronde, ce qui donne :
ROR ROL
C C C C
Un bit reprsente parfaitement une variable boolenne. On dfinit sur ces variables l'opration
unaire 'non' et les trois oprations binaires 'et', 'ou' et 'ou exclusif ' (eor) dont les tables de
vrit figurent ci-dessous.
non ou 0 1 et 0 1 eor 0 1
0 1 0 0 1 0 0 0 0 0 1
1 0 1 1 1 1 0 1 1 1 0
19
On peut considrer un octet comme un ensemble de 8 variables binaires, et dfinir entre octets
les quatre oprations non, et, ou, eor qui ralisent l'opration logique indique sur chacun de
leurs bits homologues.
A7 A6 A5 A4 A3 A2 A1 A0
A7 A6 A5 A4 A3 A2 A1 A0 et 0 1
B7 B6 B5 B4 B3 B2 B1 B0 0 0 0
R = A et B et et et et et et et et
1 0 1
Table de
R7 R6 R5 R4 R3 R2 R1 R0 vrit
A7 A6 A5 A4 A3 A2 A1 A0 ou 0 1
B7 B6 B5 B4 B3 B2 B1 B0 0 0 1
R = A ou B ou ou ou ou ou ou ou ou
1 1 1
Table de
R7 R6 R5 R4 R3 R2 R1 R0 vrit
A7 A6 A5 A4 A3 A2 A1 A0 0 1
B7 B6 B5 B4 B3 B2 B1 B0 0 0 1
R = A eor B eor eor eor eor eor eor eor eor
1 1 0
Table de
R7 R6 R5 R4 R3 R2 R1 R0 vrit
Les oprations logiques servent souvent agir sur un seul bit d'un octet.
Pour mettre le bit 3 d'un octet 1 sans toucher les autres, on fait un 'ou' de l'octet avec 8 :
XXXX XXXX ou 0000 1000 = XXXX 1XXX
Pour le mettre 0, toujours sans toucher les autres, on fait un 'et' avec $F7 :
XXXX XXXX et 1111 0111 = XXXX 0XXX
Pour le changer de valeur, toujours sans toucher les autres, un 'eor' avec 8 :
XXXX XXXX eor 0000 1000 = XXXX X XXX
On a souvent tester l'tat d'un bit d'un octet. On ralise pour cela un 'masque' qui ne laisse
'passer' que le bit en question, par un 'et' logique : Ainsi, pour tester le bit 5 de l'octet X, on
masquera l'octet X par $20, c'est dire qu'on testera si (X et $20) est nul ou pas.
XXXX XXXX et 0010 0000 = 00X0 0000
20
COURS n3
Le HCS12 (on parle aussi du CPU : Central Processing Unit, pour la partie centrale) est de la
famille Motorola. Pour les travaux pratiques on dispose dune carte de dveloppement
(appele HCS12 T-Board) qui peut communiquer avec un PC dau moins deux faons
diffrentes. Lutilisation dun moniteur (D-BUG12) rsidant dans le composant, et
lutilisation dun debugger en ligne BDM.
Registre dindex X
Registre dindex Y
Pointeur de pile SP
Compteur Ordinal PC
21
Les accumulateurs A et B : deux registres de 8 bits utiliss systmatiquement ou presque
dans toutes les oprations de transfert mmoire, et la plupart des oprations arithmtiques et
logiques. Les oprations daddition par exemple se font suivant le schma suivant :
A A + valeur ou B B + valeur,
Il en est de mme pour toutes les oprations deux oprandes, ce qui explique le nom
daccumulateurs quon leur donne.
Les registres dindex (ou dindice) X et Y : deux registres de 16 bits utilisables en tant que
tels et spcialiss comme pointeurs de mmoire. Ils jouent un rle fondamental dans la gestion
des boucles par le mcanisme dadressage index quon tudiera plus tard.
Le pointeur de pile SP (Stack Pointer, pile se disant stack en anglais), registre de 16 bits
rserv la pile. La pile est une structure fondamentale dans toute linformatique, et son
importance est croissante avec la complexit des langages. On ltudiera en temps voulu.
Le pointeur de programme PC (Program Counter) appel aussi compteur ordinal, registre
de 16 bits qui contient ladresse de la prochaine instruction excuter. Ds quil est sous
tension, le microcontrleur excute des instructions de programme. Avant dexcuter une
instruction, le microcontrleur calcule ladresse de linstruction suivante et met jour le PC.
Son initialisation la mise sous tension est le problme du RESET. Bien que cette mise jour
soit transparente, il ne faut pas perdre de vue que le CPU excute sans cesse des instructions
tant quil est sous tension.
- Bit 0 : Carry . Positionn par la plupart des oprations arithmtiques et logiques, il permet
notamment de tenir compte danomalies dans le rsultat dadditions et de soustractions.
- Bit 1 : oVerflow . Positionn par certaines oprations arithmtiques et logiques, V permet de
tenir compte danomalies dans les additions et soustractions en nombres signs.
- Bit 2 : Zro . Positionn par la plupart des oprations arithmtiques et logiques, il indique
(quand il est 1 !) que le rsultat de lopration est 0
(quand il est 0 !) que le rsultat de lopration est 0
- Bit 3 : Ngatif . Positionn par la plupart des oprations arithmtiques et logiques, il recopie
le bit 7 du rsultat qui, en nombres signs, traduit le signe du rsultat (+= 0, -= 1).
- Bit 5 : Half Carry . Utilisation trs spcifique dans les calculs BCD.
22
Les instructions de programmation
Le HCS12 est muni dun certain nombre dinstructions de programmation. Ces instructions,
codes sur un ou plusieurs octets, sont ranges squentiellement en mmoire et constituent un
programme. Il faut bien noter que les octets de programme (ou octets de code) nont rien de
particulier, et peuvent tre placs nimporte o dans la mmoire. Ils ne deviennent octets de
code quau moment o le registre PC, en pointant sur eux, lance leur excution.
On regroupe classiquement les instructions en trois familles (plus une pour les inclassables) :
- les oprations daffectation (transfert de donnes),
- les oprations arithmtiques et logiques,
- les oprations de branchement,
- les oprations diverses.
Ecrire un programme consiste donc traduire un algorithme (ou organigramme) en octets de
programme et ranger ces octets squentiellement en mmoire. On lance lexcution du
programme en faisant pointer le PC sur le premier octet du code programme.
Une instruction se compose en gnral de plusieurs parties : une partie (oprateur) indique
lopration effectuer (addition, comparaison, branchement, etc), et une seconde partie,
ventuellement vide, indique le ou les oprandes sur lesquels va travailler linstruction.
Linstruction a- charge laccumulateur. Dans le cas N1, avec le contenu dune mmoire (une
variable) et dans le cas N2 par un nombre (une constante).
Linstruction b- additionne une valeur au contenu de laccumulateur. Dans le cas N1, il sagit
dun nombre (une constante) et dans le cas N2 du contenu dune mmoire (une variable).
Linstruction c- range dans les deux cas le contenu de laccumulateur dans la mmoire AD1
(affecte le rsultat de laddition la variable).
23
De mme que laddition et les transferts mmoire, beaucoup de commandes on besoin
daccder une ou plusieurs oprandes. En gnral, comme dans lexemple prcdent, il
existe plusieurs manires de dsigner le mode daccs la (ou les) oprande(s). On les appelle
modes dadressage. Le codage des instructions se fait de la manire suivante : pour une mme
instruction, loctet de code diffre suivant le mode dadressage, et loctet ou les octets
suivant(s) prcise(nt) comment dfinir loprande. Le HCS12 distingue 7 modes dadressage :
inhrent, immdiat, direct, tendu, relatif, index, multiple.
Ladressage inhrent est le plus vident : il ny a pas doprande, et donc aucun adressage.
Linstruction est code sur un (ou deux) octet(s). Exemple :
mettre A 0 scrit CLRA et se code 87
A A+B scrit ABA et se code 18 06
Ladressage immdiat est celui dune constante. Cest le cas des commandes 1,b- et 2,a-.
Linstruction est traduite par un octet et la constante par 1 ou 2 octets suivant quil sagit dun
octet ou dun mot. Le langage symbolique traduit ladressage immdiat par un # prcdant
loprande. Exemples :
charger A avec loctet $30 scrit LDAA #$30 et se code 86 30
charger X avec le mot 5000 scrit LDX #5000 et se code CE 13 88
Ladressage tendu est celui dune (ou deux) cases mmoire dont on spcifie ladresse dans
loprande, sur 2 octets. Cest le cas des commandes 1,a- et 2,b-. Exemple :
charger A avec loctet dadresse $1000 scrit : LDAA $1000 et se code B6 10 00
charger X avec le mot dadresse $1000 scrit : LDX $1000 et se code FE 10 00
Il faut noter que lors du chargement dun registre 16 bits, deux octets sont concerns. Dans le
cas prcdent, loctet dadresse $1000 est rang dans le poids fort de X, et loctet dadresse
$1001 dans le poids faible de X.
Ladressage direct est un cas particulier de ladressage tendu quand ladresse est infrieure
$100. En rduisant loprande un seul octet, cet adressage limite la taille et le temps
dexcution du code. Dans un premier temps on peut lignorer.
Ladressage relatif nest utilis que par les instructions de branchement et sera tudi dans le
chapitre suivant (Ruptures de squence).
Quant ladressage multiple, il concerne des instructions plusieurs oprandes ayant chacun
son propre mode dadressage.
Les deux exemples choisis en dbut de paragraphe donnent lieu aux programmes suivants (en
supposant AD1 = $1000 et n = $45)
B6 10 00 LDAA $1000 ;tendu 86 45 LDAA #$45 ;immdiat
8B 45 ADDA #$45 ;immdiat BB 10 00 ADDA $1000 ;tendu
7A 10 00 STAA $1000 ;tendu 7A 10 00 STAA $1000 ;tendu
cas N1 cas N2
On remarque que loctet de code diffre suivant le mode dadressage choisi.
24
Table 3-1. Sommaire des modes dadressage du HCS12
Adressage Format source Abrviation Description
INST
Inhrent (pas doprande INH Les oprandes ventuels sont les registres CPU
exterieur)
INST #opr8i
Loprande est inclus dans le flux dinstructions
Immdiat ou IMM
Taille 8 ou 16 bits suivant le contexte
INST #opr 16i
Direct Loprande est les 8 bits poids faibles dune adresse
INST opr 8a DIR
dans la zone $0000 $00FF
Etendu INST opr16a EXT Loprande est une adresse 16 bits.
INST rel 8
Linstruction fournit un offset 8 ou 16 bits
Relatif ou REL
relatif au PC
INST rel 16
Index Offset sign constant 5 bits
INST oprx5,xysp IDX
(5 bits doffset) par rapport X, Y, SP ou PC
Index
INST oprx3,-xys IDX Pr dcrment automatique de X,Y,SP de 1 8
(pr-dcrment)
Index
INST oprx3,+xys IDX Pr incrment automatique de X,Y,SP de 1 8
(pr-incrment)
Index
INST oprx3, xys- IDX Post dcrment automatique de X,Y,SP de 1 8
(post-dcrment)
Index
INST oprx3, xys+ IDX Post incrment automatique de X,Y,SP de 1 8
(post-incrment)
Index Index avec un offset accumulateur 8 bits (A ou B)
INST abd, xysp IDX
(offset accum) ou 16 bits (D) par rapport X, Y, SP ou PC
Index Offset sign constant 9 bits / X, Y, SP ou PC
INST oprx9,xysp IDX1
(9 bits doffset) (les 8 bits faibles doffset dans un octet dextension)
Index Offset sign constant 16 bits / X, Y, SP ou PC
INST oprx16,xysp IDX2
(16 bits doffset) (les16 bits doffset dans deux octets dextension)
On trouve le pointeur sur loprande un offset
Index indirect
INST [oprx16,xysp] [IDX2] constant de 16 bits par rapport X, Y, SP ou PC
(16 bits doffset)
(Offset 16 bits dans deux octets dextension)
Index indirect On trouve le pointeur sur loprande
INST [D,xysp] [D,IDX]
(offset accu D) X, Y, SP ou PC plus la valeur dans D
Ds que lon veut dcrire et utiliser une variable structure, parcourir un tableau, on a besoin
dun oprande dadresse variable. Les registres dindex ont t crs pour cela, et leur
utilisation la plus simple, pour une instruction de chargement par exemple, peut se dfinir
comme suit : charger A avec le contenu de la mmoire dadresse X
Adressage avec offset constant : supposons quon veuille charger A avec le contenu de
ladresse $1041, et que X ait la valeur $1000. On utilise alors linstruction : LDAA $41,X, qui
signifie charger A avec le contenu de la mmoire N X+$41 . $41 est appel offset. Avec
25
le HCS12, Motorola propose trois types doffset constant :
sur 5 bits, sign, de -16 +15, qui assure le maximum de rapidit,
sur 9 bits, sign, de -256 +255
sur 16 bits, qui assure une porte maximum
Adressage avec offset accumulateur : Il est souvent trs utile davoir un offset variable, et le
HCS12 dispose dadressages indexs avec A, B ou D comme offset. Exemple : LDAA D, SP
Adressage avec auto incrmentation ou auto dcrmentation : Lorsque lon dcrit un tableau,
on a souvent besoin dincrmenter rgulirement le pointeur. Exemple : LDD 2,X+ signifie
charger D avec la mmoire dadresse X (en fait, les deux mmoires dadresses X et X+1),
puis incrmenter X de 2.
Adressage indirect index : cest le plus perfectionn, et le plus dlicat, des modes
dadressage. On comprendra son fonctionnement sur un exemple : LDAA [20,X] signifie : lire
ladresse crite en X+20, X+21 et charger A avec le contenu de cette adresse.
Le tableau suivant prcise les dtails et les codages de tous les modes indexs.
Table 3-2. Sommaire des oprations indexes
Syntaxe
Code xb Commentaires
du code
(Post octet) rr ; 00=X, 01=Y,10=SP, 11=PC
source
,r Offset constant 5 bits n=-16 +15
rr0nnnnn n,r r peut spcifier X, Y, SP ou PC
-n,r
Offset constant (9 ou 16 bits signs)
z- 0 = 9 bits avec signe dans LSB du post-octet -256n255
n,r 1 = 16 bits -32768n32767
111rr0zs
-n,r si z = s = 1, indirect index 16 bits doffset (voir plus bas)
r peut spcifier X, Y, SP ou PC
Indirect index 16 bits doffset
111rr011 [n,r]
rr peut spcifier X, Y, SP ou PC -32768n32767
pr-dcrment, pr-incrment, post- incrment, post-dcrment automatique
p = pre-(0) ou post-(1), n = -8 -1, +1 +8
r peut spcifier X, Y, SP. (PC nest pas un choix valide)
n,-r n,+r +8 = 0111
rr1pnnnn n,r- ...
n,r+ +1 = 0000
- 1 = 1111
...
- 8 = 1000
Offset accumulateur (8 bits ou 16 bits non signs)
aa - 00 = A
A,r
01 = B
111rr1aa B,r
10 = D (16 bits)
D,r
11 = voir offset indirect index sur laccumulateur D
r peut spcifier X, Y, SP ou PC
Offset indirect index sur laccumulateur D
111rr111 [D,r]
r peut spcifier X, Y, SP ou PC
26
CLR,CLRA,CLRB Mise 0
LDAA,LDAB,LDD,LDS,LDX,LDY,LEAS,LEAX,LEAY Chargement
STAA,STAB,STD,STS,STX,STY Rangement
MOVB,MOVW Transferts mmoire
SEX,TAB,TBA,TAP,TFR,TPA,TSX,TSY,TXS,TYS Transferts de registres
EXG,XGDX,XGDY Echanges de registres
Tous les modes dadressage ne sont pas disponibles pour toutes les instructions. Chaque
instruction a sa syntaxe propre quon trouvera dans la notice dtaille.
Les oprations arithmtiques addition et soustraction se font toujours sur un accumulateur (A,
B ou D). Il y a deux types daddition et de soustraction, suivant quon tient compte ou non de
la retenue (carry). Elles positionnent pratiquement toutes les indicateurs.
ADCA,ADCB,ADDA,ADDB,ADDD Addition
SBCA,SBCB,SUBA,SUBB,SUBD Soustraction
Les multiplications et les divisions sont sans oprande (voir mode demploi dtaill) de mme
que lincrmentation (+1) la dcrmentation (-1) et quelques oprations entre registres.
MUL,EMUL,EMULS,EMACS Multiplication
EDIV,EDIVS,FDIV,IDIV,IDIVS Division
DEC,DECA,DECB,DES,DEX,DEY Dcrmentation
INC,INCA,INCB,INS,INX,INY Incrmentation
ABA,ABX,ABY,SBA Diverses
Les dcalages ont une importance fondamentale car ils reprsentent soit une multiplication
par 2 ( gauche), soit une division par 2 ( droite). Il y a deux indterminations : que devient
le bit qui sort et quelle valeur a celui qui entre. Cest la raison pour laquelle il existe trois
types de dcalage sur le HCS12 : rotation, arithmtique et logique (voir mode demploi
dtaill).
Les oprations logiques se font presque exclusivement sur les accumulateurs A et B ( part la
complmentation qui peut tre directement sur une mmoire). Ce sont les oprations :
ANDA,ANDB,ANDCC,ORAA,ORAB,ORCC,EORA,EORB Et,Ou,Ouexclusif
NEG,NEGA,NEGB Ngation
COM,COMA,COMB Complmentation
27
Certaines oprations servent exclusivement positionner les indicateurs sans modifier les
registres sur lesquels elles ralisent des oprations logiques fictives.
Le mot assemblage signifie traduction d'un programme source (en langage mnmonique)
en un programme objet (une squence d'octets) interprtable par le microprocesseur. Cette
traduction est trs gnralement bijective, et on appelle dsassemblage la fonction inverse qui
interprte une squence d'octets comme un programme dont elle reconstitue le mnmonique.
Ces oprations peuvent se pratiquer la main, en utilisant comme dictionnaires les tables de
codage du langage de programmation du microprocesseur.
Assembleurs
La pratique de l'assembleur en ligne met vite en vidence un certain nombre de dfauts
impossibilit d'insrer simplement une ligne oublie et manque d'tiquettes formelles sont les
deux principaux.(Il est plus lisible d'crire qu'on divise la mmoire NUMERATEUR par la
mmoire DENOMINATEUR plutt que la mmoire $543B par la mmoire $235F). Ces
notions, qui peuvent trs bien se manipuler lors de l'assemblage la main, ne passent pas avec
un assembleur en ligne. On utilise alors des outils plus volus, un diteur de texte qui prpare
les chanes assembler, avec les mmes facilits d'criture qu'un diteur normal, et un
assembleur qui, partir du fichier texte cr (fichier source, souvent not ASM), fabrique la
squence d'octets de code dans un autre fichier (fichier objet, souvent not S19).
Syntaxe d'une ligne de texte destin l'assembleur. Chaque instruction occupe une ligne. On
distingue quatre champs dans la ligne, tous facultatifs. Ce sont :
Champ tiquette : commence la premire colonne Une tiquette commence par une lettre
Champ instruction : spar de la fin de l'tiquette par au moins un espace ou un ':'
Champ oprande : spar du champ instruction par au moins un espace. Un oprande peut tre
une constante, une adresse ou une expression qui sera value lors de l'assemblage.
Champ commentaire : commence par un point virgule. Toute la partie droite de la ligne est un
commentaire; Est galement commentaire une ligne commenant gauche par une '*'
28
Etiquette Instruction Oprande Commentaire
Exemples
Ex N1 Ajouter le nombre de 32 bits contenu dans les adresses $1100, $1101, $1102 et
$1103 au nombre contenu dans les adresses $1200, $1201, $1202 et $1203. On range le
rsultat aux adresses $1300, $1301, $1302 et $1303. Autrement dit, effectuer laddition
suivante :
[$1100] [$1101] [$1102] [$1103]
+[$1200] [$1201] [$1202] [$1203]
=[$1300] [$1301] [$1302] [$1303]
29
Rsolution technique
Oprations successives Instruction HC12
[$1103]+[$1203] = [$1303] avec carry0 ADDA
[$1102]+[$1202]+carry0 = [$1302] avec carry1 ADCA
[$1101]+[$1201]+carry1 = [$1301] avec carry2 ADCA
[$1100]+[$1200]+carry2 = [$1300] avec carry3 ADCA
Programmation HC12
Code instruction Mnmonique Description de laction
1000 B6 1103 LDAA $1103 ;Aoctet dadresse $1103
1003 BB 1203 ADDA $1203 ;A=A+ octet dadresse $1203
1006 7A 1303 STAA $1303 ;A rang ladresse $1303
1009 B6 1102 LDAA $1102 ;Aoctet dadresse $1102
100C B9 1202 ADCA $1202 ;A=A+C+octet dadresse $1202
100F 7A 1302 STAA $1302 ;A rang ladresse $1302
1012 B6 1101 LDAA $1101 ;Aoctet dadresse $1101
1015 B9 1201 ADCA $1201 ;A=A+C+octet dadresse $1201
1018 7A 1301 STAA $1301 ;A rang ladresse $1301
101B B6 1100 LDAA $1100 ;Aoctet dadresse $1100
101E B9 1200 ADCA $1200 ;A=A+C+octet dadresse $1200
1021 7A 1300 STAA $1300 ;A rang ladresse $1300
Ex N2 Le tableau de notes des lves est constitu de la manire suivante : pour chaque
lve, les notes des quatre preuves figurent dans quatre cases mmoires successives. Une
cinquime case est prvue pour y inscrire la moyenne finale. Si X contient ladresse de la
premire case mmoire dun lve, crire le programme qui calcule et range la moyenne dans
le tableau.
Rsolution technique
On initialise une variable somme 0. On y ajoute ensuite les diffrentes notes de llve
pointes par X, X+1, X+2 et X+3. On divise le rsultat par 4 laide de deux dcalages
droite, ce qui donne la moyenne (par dfaut !) quon range dans la mmoire X+4.
Programmation HC12
Code instruction Mnmonique Description de laction
1000 87 CLRA ;Au dpart, Somme nulle
1001 AB 00 ADDA 0,x ;A=A+premire note
1003 AB 01 ADDA 1,x ;A=A+seconde note
1005 AB 02 ADDA 2,x ;A=A+troisime note
1007 AB 03 ADDA 3,x ;A=A+p quatrime note
1009 47 ASRA ;A = A/2
100A 47 ASRA ;A = A/2
100B 6A 04 STAA 4,x ;Moyenne dans le tableau
Ex N3 : La notation hexadcimale associe un caractre chaque quartet. Elle est dfinie par
un tableau de 16 octets, codes ASCII des 16 caractres hexadcimaux. Ce tableau H figure en
mmoire partir de ladresse $1100 :
1100 30 31 32 33-34 35 36 37-38 39 41 42-43 44 45 46
0123456789ABCDEF
Ecrire un programme qui on communique dans A un nombre de 0 15 et qui retourne le
caractre correspondant, toujours dans A
LDX #$1100 ;X pointe sur le dbut du tableau H
LDAA A,X ;AH[A]. A est charg avec llment N A du tableau
30
COURS n4
On dit quil y a rupture de squence si ladresse de linstruction suivante nest pas celle
calcule au cours du dcodage. Lorigine dune telle rupture peut tre logicielle (cest
linstruction elle mme qui modifie le contenu du compteur ordinal) ou matrielle (en gnral
un changement dtat dune ligne logique) auquel cas on parle dinterruption (voir chapitre
sur les Interruptions).
Exemple : On trouve l'adresse $1000 les octets $20 (code de BRA) et $35. Quelle est l'adresse
de destination ? Lorsque le PC pointe sur $1000, le microcontrleur lit le code $20, reconnat
que c'est un code 2 octets et met jour le PC $1002. Puis il excute l'instruction et ajoute
$35 au PC, qui contiendra donc en fin d'instruction, $1037. Si le second octet avait t $C2
par exemple, la mme opration aurait conduit l'adresse $FC4.
$1000 $20 $35 BRA $1037 $1000 $20 $C2 BRA $FC4
Remarque 1 : linstruction de saut JMP est absolue et permet une rupture de squence une
adresse fixe. Les instructions BRA et LBRA sont relatives. Elles gnrent du code translatable,
cest dire pouvant fonctionner tel quel indpendamment de son implantation.
Remarque 2 : linstruction LBRA de branchement une adresse relative lointaine est
quivalente un saut une adresse indexe sur le registre PC :
31
LBRA Adresse JMP Adresse, PCR
Les ruptures conditionnelles nexistent dans le HCS12 que sous forme de branchement (long
ou court), c'est dire qu'elles sont relatives. Elles fonctionnent de la faon suivante : si la
condition est ralise, le branchement a lieu (ajout du dplacement au PC), sinon, l'instruction
est ignore (pas d'ajout au PC qui pointe sur l'instruction suivante).
Les branchements conditionnels sont dclenchs par les quatre indicateurs fondamentaux du
registre dtat CCR : carry C, dbordement V, zro Z et signe N. Il existe 8 instructions de
branchement conditionnel sur l'tat (1 ou 0) de chacun des quatre indicateurs. Il faut y ajouter
6 branchements plus complexes relatifs aux nombres signs et dclenchs par certaines
combinaisons des diffrents indicateurs. Les 14 instructions de branchement conditionnel se
groupent deux par deux, dclenches par des conditions contraires : Ex :
BCC : Branch if Carry Clear : branchement si le Carry est nul (0)
BCS : Branch if Carry Set : branchement si le carry est 1 (1).
Exemple : crire un programme qui on donne dans A la valeur n dun quartet et qui retourne
le caractre hexa qui lui correspond, toujours dans A. (exercice trait au chapitre prcdent
avec un tableau). Ici, on nutilise pas de tableau et on calcule le code ASCII en distinguant
deux cas : n < 10 et le code est gal n+$30, ou le n 10 et le code est gal n + $37
CMPA #10 ;effectue fictivement la soustraction A=A-10. Positionne N
BLO PLUS ;Si lindicateur N est mis (A<10), on saute
ADDA #7 ;sinon (A10), A = A+7
PLUS ADDA #$30 ;De toute faon, on ajoute $30
ICI BRA ICI ;Le programme boucle sur lui mme
Le programme associe aux nombres 0 9 les codes ASCII $30 $39 (caractres 0 9), et
aux nombres 10 15 les codes ASCII de $41 $46 (caractres A F)
32
Droulement dun programme lu par le microcontrleur
33
dcodage et excution : D mmoires 2002 et 2003 (STD $2002)
PC = 1021 [PC]=20 : code sur 2 octets
Lecture de loctet restant (FE) et mise jour du PC
dcodage et excution : PC PC + FE = $1021 (BRA $1021)
Compte tenu du nombre rduit de registres, il arrive frquemment que l'on ait besoin dans un
calcul de mmoriser des valeurs intermdiaires. Le programmeur doit choisir pour cela des
mmoires auxiliaires, dont il assure la gestion. Cette gestion devient vite fastidieuse et
complexe si on veut utiliser au mieux lespace mmoire. Cest entre autres pour rpondre ce
besoin quon a imagin la structure de pile, qui existe et fonctionne de la mme faon sur tous
les microcontrleurs.
La pile est une zone de mmoire quelconque, pour laquelle on a prvu un pointeur spcial SP
(Stack Pointer) et des instructions d'accs rapides (Push et Pull). Les instructions Push (PSHA,
PSHB, PSHC, PSHD, PSHX, PSHY) servent ranger les registres dans la pile alors que les
instructions Pull (PULA, PULB, PULC, PULD, PULX, PULY) permettent de les rcuprer.
Toute l'astuce de la structure vient de ce qu'on n'a pas besoin de prciser l'adresse de
rangement, automatiquement gre par le microcontrleur avec le pointeur de pile SP. On
utilise parfois pour dcrire la pile le terme LIFO (Last In First Out), pour bien prciser que le
premier terme sortir de la pile est le dernier entr.
Dtail des instructions PUSH d'empilement (Avant l'instruction, SP pointe sur la valeur SP0).
-1 octet : PSHA SP = SP-1 dcrmentation du pointeur de pile SP(SP0 - 1)
STAA [SP] rangement de A l'adresse N SP (SP0 - 1)
-1 mot : PSHX SP = SP-2 dcrmentation du pointeur de pile SP (SP0 - 2)
STX [SP] rangement de X ladresse N SP (SP0-2, SP0-1)
Dtail des instructions PULL de dpilement (Avant l'instruction, SP pointe sur la valeur SP0).
-1 octet : PULA LDAA [SP] chargement de A avec le contenu de SP (SP0)
SP = SP+1 incrmentation du pointeur de pile SP (SP0+1)
-1 mot : PULX LDX [SP] chargement de X avec [SP0, SP0+1]
SP = SP+2 incrmentation du pointeur de pile SP (SP0+2)
Remarque : Tout programme doit initialiser le pointeur de pile une valeur choisie. Si on
utilise un moniteur rsident, cette initialisation est assure par le moniteur et on finit par
loublier, car le mcanisme est transparent au programmeur qui se contente dutiliser la zone
de pile en mmoire. Il lui faut simplement tenir soigneusement la comptabilit de sa pile pour
tre sr de rcuprer les bonnes donnes. En cas de branchements conditionnels, il arrive
frquemment que la pile ne soit pas correctement gre dans tous les cas. Cest une source
derreurs redoutables dtecter quand certaines ventualits se produisent trs rarement.
34
Ces exemples illustrent le fonctionnement de la pile, mais il sagit dutilisations marginales.
Cette structure trouve sa pleine signification avec les appels de sous-programmes. On verra
aussi plus tard quelle joue un rle dterminant dans le passage des paramtres aux fonctions
et la dfinition de variables locales ces fonctions.
Remarque 2 : linstruction dappel une adresse relative lointaine, quivalente LBRA, qui
pourrait tre LBSR comme cela existe sur dautres processeurs Motorola, nexiste pas. Elle est
remplace par un appel index sur le registre PC :
LBSR Adresse JSR Adresse, PCR
Pour tre complet, il existe galement une instruction CALL dappel de sous-programmes en
mmoire tendue, associe linstruction RTC (retour de Call). On nen parle pas ici.
35
Exemple 2 : Sous programme de temporisation logicielle paramtrable : on peut rutiliser le
programme ci-dessus, en supprimant les deux instructions PSHX et PULX, et en utilisant la
valeur initiale de X comme paramtre. Lappel du sous-programme se fait en deux temps :
Exemple 3 : crire un sous-programme OCTHEX qui extrait dun octet la chane de deux
caractres hexadcimaux qui le dcrivent. En entre, loctet est dans A, et X pointe sur
ladresse de rangement.
36
Le sous-programme CARQ a dj t tudi dans ce chapitre et dans le prcdent. Si on
prend la version utilisant un tableau, le sous-programme CARQ va utiliser le pointeur X et
donc perdre la valeur affecte X lappel du sous-programme OCTHEX. Dans ce cas, elle
doit tre sauvegarde
- Soit au dbut de OCTHEX, pour tre rcupre avant linstruction STD 0,X
- Soit dans CARQ qui prend alors lallure suivante :
La gestion de la pile permet dimbriquer des sous-programmes les uns dans les autres. La
seule prcaution prendre est de sassurer que la valeur du pointeur de pile est la mme au
moment dexcuter le RTS quau moment o on est entr dans le sous-programme. A titre
dexemple, on a suivi lvolution de la pile au cours de lexcution du programme ci-dessous :
On part presque toujours dun programme qui fournit le rsultat recherch. En gnral, si ce
programme nexiste pas on prend le temps de lcrire. Ensuite, il sagit de partager ce
programme en deux parties : le programme appelant , qui accdera au sous programme par
un JSR ou un BSR, et le sous-programme appel qui se conforme la syntaxe de lappelant.
Une fois le sous-programme crit, mis au point et test, il reste le documenter (paramtres
en entre, en sortie, profondeur de pile ncessaire, registres modifis) car le client ne veut pas
entrer dans le dtail de lcriture du sous-programme. Cest sur cette documentation et sur elle
seule quil sappuiera pour dvelopper son ou ses programmes appelants.
37
COURS n5
Gnralits
On la vu dans le chapitre prcdent, sur les 112 pattes du microcontrleur, 91 peuvent servir
dentres sorties dusage gnral. Ces pattes, regroupes par ports, sont gres par trois
modules diffrents :
Port A, Port B, Port E et Port K sont grs par le module MEBI, partie du cur du
microcontrleur. Les ports PAD ne fonctionnent que comme entres. Ils sont grs par les
modules ATD. Enfin le reste des ports (Port H, Port J, Port M, Port P, Port S et Port T) sont
grs par le module spcifique des entres / sorties logiques PIM.
Le nombre de pattes disponibles (91) ntant pas un multiple de 8, certains ports ont moins de
8 bits : Port K en a 7 et Port J en a 4. Malgr toutes ces diffrences, les lignes dentre
logiques ont un certain nombre de points communs quon va maintenant prciser.
La philosophie de Motorola en ce qui concerne les entres sorties logiques dusage gnral est
de leur accorder une large autonomie par rapport leurs voisines. Ds lors, leur regroupement
en ports est plutt dordre administratif que purement logique. Cela permet dassocier un
groupe de 8 pattes des groupes de 8 bits qui dfinissent chacun une proprit de la patte
correspondante.
Registre de direction de donne : (DDR) Chacun de ses bits permet de choisir la direction de
transfert dune patte : 0, en entre, 1 en sortie.
Registre dentre de donnes : (IR) Chacun de ses bits reflte le niveau de la patte associe,
quelle que soit la direction programme dans le registre de direction de donnes, et quil y ait
ou non un module connect.
Registre de validation de pull : (PE) Un bit 0 laisse la patte correspondante en lair . Sil
est 1, il valide le choix dune rsistance de tirage, pour fixer son niveau logique dans tous
les cas. Ce bit est utilis pour une patte programme en entre. Un pull-up (ou pull-down)
tant gnralement inutile en sortie.
38
Registre de choix de polarit du pull : (PS) Ce registre nest utile que si le prcdent a choisi
une rsistance de tirage. A 0, il sagit dun pull-up, et 1, il sagit dun pull-down. Le schma
ci-dessous rappelle les schmas pull-up et pull-down.
5V Pull-down
C patte
C patte
Pull-up
Trois ports (H, J et P) offrent la possibilit de dclencher des interruptions sur front de
chacune des lignes dentre. Ils sont dans ce but munis dun registre PIF de huit indicateurs
(un par patte). Lindicateur passe 1 sur front actif (montant ou descendant) de lentre
associe.
Le front actif est dfini par le choix du mode de tirage. Le pull-up maintient un niveau haut en
absence de signal. Cest donc un passage au niveau bas (front descendant) qui sera le front
actif. Au contraire, le pull-down maintient un niveau bas en labsence de signal. Cest un
passage au niveau haut (front montant), qui sera lvnement actif.
Pour remettre 0 lindicateur mont 1 sur un front actif, il faut y crire un 1. Lcriture dun
0 est sans effet. Cette faon de faire droute au premier abord, mais elle permet une criture
simple des choses. Si on attend par exemple une monte du bit 5, on utilise le masque
%00100000 appliqu au registre PIF. Pour le remettre 0 sans toucher les autres, il suffit
dcrire le masque dans PIF puisque lcriture des bits nuls est sans effet.
Chacun des ports H, J et P dispose de son vecteur dinterruption. Il dispose galement dun
registre PIE de validation dinterruption calqu sur le registre dindicateurs PIF. Un bit 1 de
ce registre permet de dclencher une interruption sur monte de lindicateur correspondant.
Ainsi, si le registre PIE contient %00001000, la monte du flag 3 de PIF dclenche une
demande dinterruption du CPU. La monte des autres ne dclenche pas dinterruption.
Vue d'ensemble
39
Le partage des pattes
Presque toutes les pattes des ports ont plusieurs affectations possibles. Ainsi, quand on
travaille en mode tendu, Port A et Port B deviennent bus dadresses et bus de donnes
multiplexs, les lignes du Port E deviennent les lignes de gestion du bus externe et le Port K
sert grer lextension de la mmoire adressable au del de 64K.
Les pattes des deux ports PAD, qui fonctionnent uniquement en entre sont le plus souvent
utilises comme canaux dentre analogique vers les convertisseurs.
Quant aux autres ports, ils peuvent prter leurs pattes aux modules suivants (entre autres) :
Port H Liaisons srie synchrones SPI1 et SPI2
Port J Bus IIC, CAN4
Port M Bus CAN (CAN0, CAN1, CAN2, CAN3) et/ou BDLC
Port P Variateur de largeur dimpulsion (PWM)
Port S Liaisons srie synchrone et asynchrone (SPI0, SCI0 et SCI1)
Port T Timer (ECT).
La cohabitation entre ports dentre sortie logiques et modules se rgle par des registres lis
aux modules. Un principe simple, mais qui souffre peut-tre quelques exceptions, est que la
patte perd ses proprits dentre sortie logique ds quelle est affecte un module. Ainsi, le
module peut lutiliser comme sortie mme si le bit du DDR est 0. Le DDR na simplement
plus cours dans ces conditions. La figure ci-dessous prcise les relations entre registres de
ports et modules.
Le bit IR ne peut tre que lu.
Il reproduit toujours ltat
IR physique de la patte.
40
Exemples dutilisation des ports
Exemple 1 : programmer les lignes du port A en sortie sauf la ligne PA7 en entre. Afficher
en permanence en PA0 le niveau lu en PA7.
Exemple 2 : Compter le nombre de fronts descendants sur la patte Port H0 par scrutation.
Exemple 3 : Compter le nombre de fronts descendants sur la patte Port H0 par interruption.
41
COURS n6
Utilisation de la Pile
Compte tenu du nombre rduit de registres, il arrive frquemment que l'on ait besoin dans un
calcul de mmoriser des valeurs intermdiaires. Le programmeur doit choisir pour cela des
mmoires auxiliaires, dont il assure la gestion. Cette gestion devient vite fastidieuse et
complexe si on veut utiliser au mieux lespace mmoire. Cest entre autres pour rpondre ce
besoin quon a imagin la structure de pile, qui existe et fonctionne de la mme faon sur tous
les microcontrleurs.
La pile est une zone de mmoire quelconque, pour laquelle on a prvu un pointeur spcial SP
(Stack Pointer) et des instructions d'accs rapides (Push et Pull). Les instructions Push (PSHA,
PSHB, PSHC, PSHD, PSHX, PSHY) servent ranger les registres dans la pile alors que les
instructions Pull (PULA, PULB, PULC, PULD, PULX, PULY) permettent de les rcuprer.
Toute l'astuce de la structure vient de ce qu'on n'a pas besoin de prciser l'adresse de
rangement, automatiquement gre par le microcontrleur avec le pointeur de pile SP. On
utilise parfois pour dcrire la pile le terme LIFO (Last In First Out), pour bien prciser que le
premier terme sortir de la pile est le dernier entr.
Dtail des instructions PUSH d'empilement (Avant l'instruction, SP pointe sur la valeur SP0).
-1 octet : PSHA SP = SP-1 dcrmentation du pointeur de pile SP(SP0 - 1)
STAA [SP] rangement de A l'adresse N SP (SP0 - 1)
-1 mot : PSHX SP = SP-2 dcrmentation du pointeur de pile SP (SP0 - 2)
STX [SP] rangement de X ladresse N SP (SP0-2, SP0-1)
Dtail des instructions PULL de dpilement (Avant l'instruction, SP pointe sur la valeur SP0).
-1 octet : PULA LDAA [SP] chargement de A avec le contenu de SP (SP0)
SP = SP+1 incrmentation du pointeur de pile SP (SP0+1)
-1 mot : PULX LDX [SP] chargement de X avec [SP0, SP0+1]
SP = SP+2 incrmentation du pointeur de pile SP (SP0+2)
Remarque : Tout programme doit initialiser le pointeur de pile une valeur choisie. Si on
utilise un moniteur rsident, cette initialisation est assure par le moniteur et on finit par
loublier, car le mcanisme est transparent au programmeur qui se contente dutiliser la zone
de pile en mmoire. Il lui faut simplement tenir soigneusement la comptabilit de sa pile pour
tre sr de rcuprer les bonnes donnes. En cas de branchements conditionnels, il arrive
frquemment que la pile ne soit pas correctement gre dans tous les cas. Cest une source
derreurs redoutables dtecter quand certaines ventualits se produisent trs rarement.
42
Exemples dutilisation de la pile :
Linstruction TFR X,Y de transfert de X dans Y et linstruction EXG X,Y dchange des deux
registres nexistent pas sur le HC11. On les ralise laide de la pile selon le schma suivant :
PSHX
PSHX PSHY
TFR X,Y EXG X,Y
PULY PULX
PULY
Comme nous lavons dj vu, le HCS12 dispose de deux instructions d'appel de sous-
programme :
- JSR (Jump to SubRoutine), instruction dappel une adresse absolue,
- BSR (Branch to SubRoutine), instruction dappel une adresse relative proche,
Ces instructions fonctionnent de manire analogue aux instructions JMP et BRA, sauf qu'elles
mmorisent avant le branchement l'adresse d'o l'appel est donn. Il existe bien sr une
instruction permettant la rcupration de cette adresse : RTS (retour de sous programme),
place en fin de sous-programme.
On peut dcrire JSR, BSR, et RTS l'aide des instructions fictives suivantes :
JSR Adresse PUSH PC + JMP Adresse
BSR Adresse PUSH PC + BRA Adresse
RTS PULL PC
43
Exemple dutilisation de la pile
La gestion de la pile permet dimbriquer des sous-programmes les uns dans les autres. La
seule prcaution prendre est de sassurer que la valeur du pointeur de pile est la mme au
moment dexcuter le RTS quau moment o on est entr dans le sous-programme. A titre
dexemple, on a suivi lvolution de la pile au cours de lexcution du programme ci-dessous :
44
COURS n7
Une interruption, comme un sous programme, est une rupture temporaire de la squence
d'instructions en cours pour excuter une action dfinie, avant de reprendre la squence o on
l'avait laisse. A la diffrence dun sous-programme o la rupture est dclenche par une
instruction logicielle (BSR ou JSR), donc parfaitement prvue, la rupture de squence dune
interruption est commande par matriel (niveau ou transition d'une ligne) ou de faon interne
(interruptions du MCU). Elle peut donc se produire n'importe quel stade de droulement
dun programme.
Pour un sous-programme, l'adresse de branchement est indique dans l'appel. Pour une
interruption, cette adresse (vecteur d'interruption) figure dans une table place en haut de
mmoire, chaque ligne d'interruption ayant son adresse propre (adresse dinterruption).
Au dbut d'une tche d'interruption, tous les registres sont prservs dans la pile et le masque
I est mis pour ne pas imbriquer les interruptions. Le programmeur peut passer outre et valider
une imbrication de tches par l'instruction CLI, ses risques et prils. Linterruption tant par
nature imprvisible, cette sauvegarde du contexte est obligatoire. Cela interdit tout passage de
paramtre par les registres et oblige nutiliser que des variables globales.
45
A la fin de la tche d'interruption, la demande physique ne doit plus tre active, sinon on
repart immdiatement dans la mme tche. Il appartient donc la tche de faire le ncessaire
pour qu'il en soit ainsi (acquittement de la demande). La plupart du temps, il suffit de remettre
0 lindicateur responsable.
IRQ$FFF2,$FFF3
XIRQ$FFF4,$FFF5
RESET$FFFE,$FFFF
La plupart des interruptions sont masquables, cest dire quon peut programmer le
microcontrleur pour tenir ou non compte de la demande dinterruption. Le bit I du CCR
masque linterruption IRQ ainsi que toutes les interruptions issues des priphriques internes.
Le bit X du CCR masque linterruption XIRQ.
Prenons par exemple linterruption IRQ. Le CPU est en train dexcuter un programme, et la
ligne IRQ passe au niveau bas. Si elle nest pas masque, elle positionne un drapeau interne,
que le processeur consulte entre chaque excution dinstruction. Une fois termine lexcution
de linstruction en cours, le CPU reconnat une demande dinterruption. Il excute alors un
empilement de tous les registres, y compris le PC qui permet le retour au programme en fin de
tche. Sachant que la demande vient de IRQ, il va ensuite lire dans ladresse $FFF2,$FFF3 le
vecteur dinterruption de IRQ quil recopie dans le compteur de programme PC. La tche
dinterruption commence alors. Elle fonctionne comme un sous-programme normal, et se
termine par linstruction RTI. Comme RTS, elle permet le retour au programme courant, mais
en plus, elle dpile tous les registres empils au moment de lappel.
46
Une tche dinterruption prsente cependant quelques particularits importantes qui la
distinguent dun sous-programme :
- Elle doit prvenir le dispositif demandeur quelle a bien reconnu la demande, et faire
en sorte quil cesse de maintenir IRQ au niveau bas. En gnral, le dispositif demandeur
dispose dun bit dtat qui monte 1 pour dclencher une demande. Il appartient la
tche de remettre ce bit 0 (acquittement de linterruption).
- Elle ne peut communiquer avec le programme principal que par des variables
globales, en aucun cas par les registres qui sont automatiquement sauvegards.
Les interruptions, une fois installes, s'excutent de faon transparente pour le programmeur.
Elles sont souvent si transparentes qu'elles se font oublier. Le programmeur doit toujours
penser qu'elles existent et qu'elles prennent du temps. Il est donc fortement conseill, lors de
l'criture d'une tche d'interruption, de respecter les rgles suivantes :
- Une interruption ne doit jamais tre bloquante (attente d'un vnement)
- Une interruption doit durer le moins longtemps possible (traitement minimum des
donnes dans la tche), sinon on court le risque de ralentir considrablement le
programme principal, voire mme de le bloquer si les demandes sont rapproches.
La notion dinterruption a rencontr en informatique autant de succs que celle de pile, et elle
sy est montre tout aussi fconde. Sa fcondit a mme t si grande quil existe des
interruptions logicielles, autrement dit des interruptions dclenches par une instruction
logicielle, ou plus prcisment un sous programme ! Toutes les routines des BIOS et des OS
sur les ordinateurs compatibles PC sont ainsi structures en interruptions logicielles.
La plupart des modules internes du microcontrleur (ports, timer, liaisons srie SCI et SPI,
convertisseurs, etc) peuvent formuler des demandes d'interruption au MCU. Ces demandes
utilisent la ligne IRQ interne (relie physiquement la patte IRQ). Comme chaque module
comporte plusieurs sources possibles dinterruption, on arrive 50 sources possibles de
demandes dinterruption internes sur la ligne IRQ. Pour ne pas perdre de temps en dbut de
tche IRQ pour identifier le demandeur, le microcontrleur rserve un vecteur chacune de
ces sources.
Au niveau du module, tout vnement demandeur est signal par la monte dun indicateur. A
chaque indicateur est associ un bit qui valide (1) ou masque (0) une demande dinterruption
sur monte du bit dtat. Comme les bits dtat sont en gnral regroups dans un registre
dtat, chaque registre dtat est associ un registre de validation de demande dinterruption.
Quelques exemples :
- Module timer : Linterruption du canal TCx sur monte du bit CxF est valide si CxI = 1
$004C C7I C6I C5I C4I C3I C2I C1I C0I TIE
$004E C7F C6F C5F C4F C3F C2F C1F C0F TFLG1
- : Linterruption sur dbordement timer (TOF) est valide si TOI = 1
$004D TOI 0 0 0 TCRE PR2 PR1 PR0 TSCR2
$004F TOF 0 0 0 0 0 0 0 TFLG2
- Module ATD0 : Linterruption sur squence complte (ASCIF) est valide si ASCIE = 1
$0082 ADPU AFFC AWAI ETRIGLE ETRIGP ETRIGE ASCIE ASCIF ATD0CTL2
47
Module SCI0 : linterruption sur donne prsente (RDRF) est valide si RIE = 1
$00CB TIE TCIE RIE ILIE TE RE RWU SBK SCI0CR2
$00CC TDRE TC RDRF IDLE OR NF FE PF SCI0SR1
Module PIM (portH) Un front actif sur PHx (PIFHx = 1) dclenche une inter si PIEHx = 1
$0266 PIEH7 PIEH6 PIEH5 PIEH4 PIEH3 PIEH2 PIEH1 PIEH0 PIEH
$0267 PIFH7 PIFH6 PIFH5 PIFH4 PIFH3 PIFH2 PIFH1 PIFH0 PIFH
La plupart du temps, une tche dinterruption vite une attente qui bloque le programme dans
une boucle de scrutation. Une bonne faon de procder est dcrire dabord le programme (ou
le sous-programme) de scrutation et den extraire la tche dinterruption, sa validation, et la
modification ventuelle des passages de paramtres.
48
Les trois conditions sont ralises dans le programme ci-dessous :
sei ;Masquage des IRQ
ldaa #$80 ;Validation de l'inter
staa TSCR2 ;au niveau du timer
ldx #avance ;Installation de avance comme
stx $FFDE ;tche de dbordement timer
cli ;Dmasquage des IRQ
Le moniteur D-Bug12 utilis propose une redirection vers des adresses dinterruption en
RAM, de manire permettre un utilisateur de crer ses propres vecteurs dinterruption. Il
nest pas ncessaire dentrer dans tous les mandres de la redirection. On peut sans
inconvnient majeur considrer que les adresses dinterruption occupent lintervalle de $3E0C
$3E7F au lieu de lintervalle de $FF8C $FFFF. Pour que le programme dinterruption
fonctionne, il suffit de remplacer la ligne stx $FFDE par la ligne stx $3E5E
Une autre particularit du moniteur D-Bug12 est quil utilise pour sa communication avec le
microcontrleur le module de liaison srie SCI0, programm en interruptions en entre et en
sortie. Il interdit donc laccs aux interruptions de ce module.
Conclusions
- Une interruption ne doit jamais tre bloquante (par exemple faire appel une entre clavier)
- Une interruption doit durer le moins longtemps possible. Eviter dy inclure des sous-
programmes longs et lents (affichages notamment sur SCI)
- Une interruption est faite pour se faire oublier. Ne pas oublier tout de mme quelle prend du
temps et quelle risque daccaparer le temps du CPU si on lappelle trop souvent.
- Lorsquon cherche une vitesse dexcution maximum, ne pas oublier quune tche
dinterruption empile, puis dpile tous les registres et quil vaut mieux souvent travailler en
scrutation.
49
COURS n8
Le Timer
Introduction
On peut rpartir les fonctions du timer en 3 catgories principales :
- Introduction de dlais, ou temporisations,
- Rptition priodique dactions intervalles prcis,
- Mesure de la dure entre des actions.
Dans la mesure o on connat exactement la priode du cycle de lhorloge E qui cadence le
processeur, ainsi que le nombre de cycles utiliss par chaque instruction, lcriture dune
boucle de programme de dure prcise ne pose (en principe) aucun problme. Par exemple,
avec une horloge E 24 MHz, le sous-programme suivant donne une tempo de 1/100e s :
[04] 34 JSR TEMPO Appel du sous programme
50
Le compteur IX est incrment au sein de la boucle dattente du second front, dont la dure
est de 1 + 3 + 3 = 7 cycles machine. Le rsultat de la mesure est 7X cycles, avec une
incertitude de 7 cycles. Cette incertitude est invitable du fait de la boucle dattente ATTE2.
Sil sagit dun test plus compliqu, la gestion commune devient vite trs pnible.
Ces exemples donnent une ide des problmes poss par les temporisations logicielles. Dans
les cas cits, cest difficile mais pas insurmontable. Mais le problme devient impossible pour
deux raisons principales : lvolution des processeurs dont les vitesses dhorloge sacclrent,
supprimant ainsi toute portabilit des logiciels, et le fonctionnement en parallle avec des
interruptions dont on ignore la dure et la frquence puisquon nen connat souvent mme
pas les sources. Il devient alors absolument ncessaire de disposer dune horloge autonome,
qui gre lincrmentation de son (ou ses) compteurs indpendamment du logiciel du CPU. On
appelle ce module priphrique timer (ou compteur de temps).
Prsentation
Un timer est un composant qui incrmente ou dcrmente un registre chaque front appliqu
sur sa ligne dentre CLK (horloge). Si ce signal est priodique (horloge du microprocesseur
ou oscillateur indpendant), le registre du timer fonctionne lui mme comme une horloge dans
laquelle le programme peut aller lire lheure tout moment. Si les fronts de la ligne dentre
ne sont pas priodiques, le timer fonctionne alors en compteur dvnements (compteur
Geiger par exemple).
Les composants timers usuels sont le 8254 dans la famille INTEL et le 6840 dans la famille
MOTOROLA. Tous deux runissent sur un mme composant 3 compteurs de 16 bits, quon
peut lancer ou arrter, ainsi que divers modes de fonctionnement qui leur donnent une grande
souplesse dutilisation : possibilit de commander un timer par un autre, fonctionnement en
cascade, etc. Le timer dont on dispose est assez diffrent et correspond au bloc diagramme ci-
dessous. On y distingue trois parties :
- Un compteur principal de 16 bits prcd dun pr-diviseur qui permet davoir sous la main
une base de temps permanente. Le systme de huit registres associs de capture dentre ou de
sortie compare permet une utilisation optimum de cette ressource.
51
Pr-diviseur Canal 0
Horloge bus
Capture dentre
IOC 0
Sortie compare
Compteur 16 bits Canal 1
Capture dentre
IOC 1
Inter compteur module Compteur module 16 bits Sortie compare
Canal 2
Inter canal 0 Capture dentre
IOC 2
Inter canal 1 Sortie compare
Inter canal 2 Canal 3
Capture dentre
Inter canal 3 IOC 3
Registres Sortie compare
Inter canal 4 Canal 4
Inter canal 5 Capture dentre
IOC 4
Sortie compare
Inter canal 6 Canal 5
Inter canal 7 Capture dentre
Accumulateur dimpulsions A IOC 5
Sortie compare
Inter Dbordement PA
16 bits Canal 6
Inter entre PA Capture dentre
Accumulateur dimpulsions B IOC 6
Sortie compare
Inter Dbordement PB
16 bits Canal 7
Capture dentre
IOC 7
Sortie compare
$0044 TCNT15 TCNT14 TCNT13 TCNT12 TCNT11 TCNT10 TCNT9 TCNT8 TCNT
$0045 TCNT7 TCNT6 TCNT5 TCNT4 TCNT3 TCNT2 TCNT1 TCNT0
Situ aux adresses $44 et $45, TCNT est le compteur de base du timer. En lecture seule, il
sincrmente chaque impulsion dun pr-diviseur qui divise lhorloge E du micro (24 MHz
sur la carte de TP) par 2N, N allant de 0 7.
Deux commandes agissent sur ce compteur :
Le bit TEN (timer enable), bit 7 du registre TSCR1 qui lactive ( 1) ou larrte ( 0).
$0046 TEN TSWAI TSFRZ TFFCA 0 0 0 0 TSCR1
Les trois bits poids faibles du registre TSCR2 qui dfinissent la valeur de N.
$004D TOI 0 0 0 TCRE PR2 PR1 PR0 TSCR2
Quand il arrive FFFF, il repasse 0, en mettant 1 lindicateur TOF (Time OverFlow) du
registre d'tat TFLG2.
$004F TOF 0 0 0 0 0 0 0 TFLG2
52
Pour raliser ces deux types daction le timer dispose de huit registres de 16 bits TC0 TC7,
qui peuvent la demande servir des captures dentre ou des sorties compares, suivant le
registre TIOS : bit IOSx 1 : TCx en sortie compare. bit IOSx 0 : TCx en capture dentre.
$0040 IOS7 IOS6 IOS5 IOS4 IOS3 IOS2 IOS1 IOS0 TIOS
Il s'agit de dclencher un instant donn une action logicielle ou matrielle (top sur une
ligne physique). On pourrait imaginer une boucle logicielle dattente de lgalit du registre
de comptage TCNT et d'une valeur donne. Par exemple, si la valeur est contenue dans le
registre double D, on pourrait crire la squence suivante :
RECOM CPD TCNT
BNE RECOM
La dure de la boucle est de 3 + 3 = 6 cycles machine. Si le timer est incrment chaque
cycle, lgalit cherche risque fort davoir lieu entre deux comparaisons successives, et donc
de ntre pas dtecte. La solution de faire un test dingalit est elle aussi malcommode
puisque le timer reboucle sur lui-mme. Le timer vite ces ennuis en utilisant un comparateur
matriel, qui positionne lindicateur CxF quand le compteur passe par la valeur du registre
TCx (utilis comme sortie compare). Ces 8 indicateurs composent le registre TFLG1.
$004E C7F C6F C5F C4F C3F C2F C1F C0F TFLG1
La monte du bit CxF entrane une interruption si le bit correspondant CxI de TIE est 1
$004C C7I C6I C5I C4I C3I C2I C1I C0I TIE
Dans le cas prcdent, lvnement de sortie compare est logiciel : monte dun indicateur.
Le timer offre en plus la possibilit de dclencher une action matrielle (top sur une ligne)
sur une sortie compare. Les lignes utilises sont les lignes du port T, PTx tant associe au
registre TCx. Le choix de la forme du top se fait dans les registres TCTL1 et TCTL2.
$0048 OM7 OL7 OM6 OL6 OM5 OL5 OM4 OL4 TCTL1
$0049 OM3 OL3 OM2 OL2 OM1 OL1 OM0 OL0 TCTL2
Exemple : soit rpter laction dfinie par le sous-programme ACTION tous les millimes
de seconde. Lvnement OC0, signal par la monte 1 du bit C0F du registre dtat,
signifie que le compteur est pass par la valeur affiche dans le registre TC0. Le programme
attend cet vnement en scrutant le bit C0F. Quand il sest produit, on excute laction, puis
on prpare les registres du timer pour la prochaine scrutation, cest dire en ajoutant la
priode TC0 et en remettant lindicateur C0F 0. On a la squence :
86 40 LDAA #$40
95 4E RECOM BITA TFLG1 Attente de lvnement OC0
27 FC BEQ RECOM (TCNT = TC0)
16 xxxx JSR ACTION Excution de laction
DC 50 LDD TC0 Prparation de TC0
C3 5DC0 ADDD #24000 pour le prochain coup
5C 50 STD TC0 (TC0 = TC0 + 24000)
86 40 LDAA #$40 Remise zro de
5A 4E STAA TFLG1 lindicateur C0F
20 EC BRA RECOM Bouclage
53
Le programme est indpendant de la dure du sous-programme ACTION, pourvu quelle soit
plus courte que la priode. La boucle de scrutation dure 6 cycles, ce qui donne une incertitude
de 6 cycles machine sur linstant dexcution du sous-programme ACTION. Mais les OC0
sont toujours exactement spars par une priode. Il ny a pas accumulation dincertitude.
En rsum :
A / Aucune sortie active. Les lignes physiques que le timer partage avec le port T restent la
proprit du port T
54
Les captures d'entre (ICx : Input Capture Nx)
Il s'agit de rcuprer linstant o se produit une action matrielle (top sur une ligne
physique, cest dire front montant ou descendant). On peut imaginer une boucle logicielle
dattente du front. Par exemple, pour attendre un niveau haut sur la ligne PH1 du port H, on
pourrait crire la squence suivante :
LDAA # 2
RECOM BITA PORTH
BEQ RECOM
La dure dune telle boucle est de 4 + 3 = 7 cycles machine. Elle reprsente lincertitude sur
la mesure du temps. On peut lviter en reliant physiquement la ligne au mcanisme de
capture.
Chaque capture utilise une ligne physique et un registre 16 bits. Ces lignes et ces registres
sont les mmes que pour les sorties compares, savoir les lignes du port T, la ligne PTx tant
associe au registre TCx. Le fonctionnement dune capture est le suivant. L'vnement sur la
ligne PTx dclenche une recopie du registre de comptage TCNT dans le registre de capture
TCx (choisi comme capture dentre). Cette capture est signale logiciellement par la monte
du bit CxF du registre dtat TFLG1. Cette monte entrane une interruption si le bit
correspondant CxI de TIE est 1.
Le type de front qui dfinit lvnement actif sur chaque ligne est choisi par deux bits
conscutifs dans les registres TCTL3 et TCTL4. Il peut sagir soit dun front montant, soit
dun front descendant, soit des deux. Si on nen choisit aucun, la capture dentre est
dvalide et la ligne correspondante du port T recouvre ses droits.
$004A EDG7B EDG7A EDG6B EDG6A EDG5B EDG5A EDG4B EDG4A TCTL3
$004B EDG3B EDG3A EDG2B EDG2A EDG1B EDG1A EDG0B EDG0A TCTL4
Exemple : la squence de programme suivante rcupre dans X linstant o sest produit une
transition active de la ligne PT1. (La squence ne dfinit pas la transition active).
86 02 LDAA #2 Mise zro de
5A 4E STAA TFLG1 lindicateur C1F
95 4E RECOM BITA TFLG1 Boucle dattente de
27 FC BEQ RECO la transition active
M
DE 52 LDX TC1 Rcupration du temps dans IX
La fonction capture dentre a t complte par des registres de rangement qui permettent
plus de souplesse dans les mesures de temps o on doit faire la diffrence entre deux entres
captures. Seuls les canaux 0, 1, 2 et 3 sont quips de ce gadget.
En rsum,
Dans lexemple qui suit, le contenu des registres TCTL3 et TCTL4 indique que seules les
pattes PT7, PT5, PT4 et PT2 peuvent dclencher des captures, PT7 et PT2 sur front
quelconque, PT5 sur front descendant et PT4 sur front montant. Les quatre autres pattes
restent des pattes dentre-sortie du port T
55
Choix des fronts actifs
TCTL3 et TCTL4
11001001 00110000
N7N6N5N4 N3N2N1N0
TC0
TC1
TC2
TC3
Accumulateurs dimpulsions.
Le module timer comporte quatre accumulateurs dimpulsions de 8 bits, associs aux pattes
PT0 PT3 du port T. Ces quatre accumulateurs bnficient aussi de registres de rangement.
$0062 PACNT7/15 PACNT6/14 PACNT5/13 PACNT4/12 PACNT3/11 PACNT2/10 PACNT1/9 PACNT0/8 PACN3
$0063 PACNT7 PACNT6 PACNT5 PACNT4 PACNT3 PACNT2 PACNT1 PACNT0 PACN2
$0064 PACNT7/15 PACNT6/14 PACNT5/13 PACNT4/12 PACNT3/11 PACNT2/10 PACNT1/9 PACNT0/8 PACN1
$0065 PACNT7 PACNT6 PACNT5 PACNT4 PACNT3 PACNT2 PACNT1 PACNT0 PACN0
Le type dimpulsion dclenchante est dtermin par les deux registres TCTL3 et TCTL4 dj
utiliss pour les captures dentre.
56
COURS n9
Gnralits
Bien que programmable, le temps de conversion est rgl par une horloge propre lATD
tablie par une division de lhorloge CPU. Les valeurs permises pour lhorloge ATD ne
dpassent pas 2 MHz. Une conversion sur 10 bits prendra donc 10 cycles, soit 5s, sans
compter le temps dchantillonnage. Celui-ci, programmable, occupe au moins 2 cycles
(premire phase) et 2 16 cycles (seconde phase), soit un minimum de 4 cycles et donc 2s.
Au total, la conversion dure un minimum de 14 cycles, soit 7 s.
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
57
Description du fonctionnement
Une mesure consiste en un chantillonnage / blocage qui fige la tension mesurer pour la
dure de mesure, puis des comparaisons successives de la valeur bloque avec les tensions
successives (VRH-VRL)/2, (VRH-VRL)/4... (VRH-VRL)/2N fournies par un DAC intgr,
qui construisent le nombre de N bits correspondant la tension analogique. Le rangement de
la mesure se fait dans un des registres 16 bits de rsultats de DR0 DR7.
Lordonnancement des conversions et de leur rangement est assur par le bloc de contrle et
de timing, programmable grce de nombreux registres. Le principe de base est de procder
par squence, cest dire un enchanement aussi rapproch que possible de 1 8 mesures sur
le mme canal ou des canaux diffrents, les rsultats dune mme squence tant rangs dans
les registres de rsultats.
58
Principaux registres concerns
Pour fonctionner, lATD doit tre aliment. Cest le rle du bit ADPU du registre ATDCTL2.
On trouve galement dans ce registre des bits relatifs au dclenchement extrieur.
$0082 ADPU AFFC AWAI ETRIGLE ETRIGP ETRIGE ASCIE ASCIF ATD0CTL2
Le registre ATDCTL5 est essentiel car cest une criture dans ce registre qui dclenche une
nouvelle squence de conversion, en arrtant au besoin celle en cours. Il fixe le N du canal
convertir en premier. En mode MULT, la squence se poursuit par celle des canaux suivants.
En mode simple, la squence rpte la mesure sur le mme segment. Le mode SCAN relance
une squence ds la fin de la prcdente, sinon lATD attend une nouvelle criture pour lancer
une nouvelle squence. Ce registre fixe en outre le format de sortie (cadrage droite ou
gauche, valeur signe ou non).
$0085 DJM DSGN SCAN MULT 0 CC CB CA ATD0CTL5
Sur chacun des 8 registres de rangement 16 bits on doit ranger des nombres de 10 bits. Il y a
possibilit de diffrents cadrages. On trouvera le dtail dans la notice complte.
Pour tre complet il faut rappeler que les lignes dentre des canaux analogiques peuvent
aussi servir de lignes dentres logiques. Il y a des registres prvus pour valider ou non cette
possibilit et bien sr il existe le registre de port PAD dont les bits traduisent le cas chant
les niveaux logiques des pattes PAD0 PAD7.
59
B : LES LIAISONS SERIE SCI ET SPI
Les liaisons srie ont en commun le transfert doctets bit bit sur une mme ligne. Un bit est
reprsent par un niveau haut ou bas de la ligne pendant un certain temps dfini par le nombre
de bauds (bits par seconde) et rgl par une horloge. On distingue deux types de
transmissions suivant les horloges utilises pour dcouper un octet et le recomposer.
Dans les deux cas, chaque bit est mis entre deux tops dhorloge* de lmetteur, pour tre
reconstitu la rception. Le rcepteur se place juste entre deux tops de son horloge (flches)
pour tomber au milieu de chaque bit et reconstituer loctet. Cela implique bien sr que les
horloges de lmetteur et du rcepteur soient synchronises.
Dans le cas dune liaison srie synchrone, les deux partenaires utilisent la mme horloge
(celle du matre, qui peut tre rcepteur ou transmetteur). La synchronisation est toujours
assure, mais le transfert exige un fil supplmentaire pour transmettre lhorloge..
Horloge transmetteur
Dans le cas dune liaison srie asynchrone le rcepteur utilise son horloge qui a peu prs la
mme frquence que lmetteur et il la synchronise au dbut de chaque octet, la rception du
front descendant du bit start sur la ligne de donne. Si les frquences sont peu diffrentes, la
flche de rception tombe bien sur le bit, mais pas tout fait au milieu. Si elles diffrent de
plus de 5% environ, la reconstitution peut omettre un bit ou compter deux fois le mme.
Horloge transmetteur
Start Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Stop
Le MC9S12DG256B dispose de trois modules de liaison srie synchrone : SPI0, SPI1 et SPI2
et de deux modules de liaison srie asynchrone : SCI0 et SCI1. Les trois modules SPI sont
rigoureusement identiques de mme que les deux modules SCI. Ils ne diffrent que par les
pattes physiques qui les relient lextrieur.
* Pour faciliter la lecture des schmas, on na fait figurer que les tops dhorloge. Ce signal
est en fait un signal carr, et les tops reprsentent un type de front (montant ou descendant).
60
Liaison srie synchrone SPI (Serial Peripheral Interchange)
En mode matre ou en mode esclave, la liaison SPI utilise quatre pattes du microcontrleur.
Le SPI0 les emprunte au port S : PTS4 = MISO (Master In Slave Out), PTS5 = MOSI (Master
Out Slave In), PTS6 = CLK (horloge) et PTS7 = SS (Slave Select). La figure ci-dessus prcise
la structure de la liaison synchrone et les principaux registres affrents. La dtection du signal
se fait avec lhorloge du matre, et la communication des donnes se fait par change
systmatique des contenus des registres SPIDR de donnes du matre et de lesclave.
$00DD BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SPIDR
- de 2 registres de contrle pour choisir parmi les diffrentes options proposes (cf notice) :
$00D8 SPIE SPE SPTIE MSTR CPOL CPHA SSOE LSBFE SPICR1
$00D9 0 0 0 MODFEN BIDIROE 0 SPISWAI SPCO SPICR2
On nentre pas plus dans le dtail de la liaison SPI, dont ltude et la manipulation se font
dans le cadre du cours dinformatique industrielle de deuxime anne.
61
La liaison SCI utilise deux pattes du microcontrleur. Pour le SCI0, ce sont les pattes du port
S : PTS0 = RxD (Rception de Donnes), PTS1= TxD (Transmission de Donnes). Le SCI1
utilise quant lui les pattes PTS2 et PTS3. La figure ci-dessous illustre le fonctionnement
dun module SCI. Le module se comporte en fait comme deux modules pratiquement
indpendants, un module de rception et un module de transmission.
Le module de rception comporte lui aussi un registre dcalage qui assure la reconstruction
de loctet partir du signal qui lui arrive par la patte RxD. Ds que cest fait, loctet est
recopi dans le registre de rception, et un indicateur signale son arrive. Bien entendu, le
travail de rception est contrl et divers indicateurs signalent les anomalies dans le transfert.
Ces modules ont en commun le registre de bauds SCIBD qui permet sur 13 bits de choisir la
vitesse de transmission et de rception selon la relation :
baud = horloge/(16 SBR).
Avec une horloge micro 24 MHz, le nombre de bauds peut aller de 183 (SBR = $1FFF)
1.500.000 bauds (SBR = 1). Sur la carte de TP, le moniteur D-Bug12 initialise SBR $9C, ce
qui donne environ 9615 bauds.
$00C8 0 0 0 SBR12 SBR11 SBR10 SBR9 SBR8 SCI0BDH
$00C9 SBR7 SBR6 SBR5 SBR4 SBR3 SBR2 SBR1 SBR0 SCI0BDL
Ils ont galement en commun ladresse du registre de donne SCIDRL. Bien quil sagisse de
deux registres distincts, on peut leur attribuer la mme adresse puisque le registre de rception
nest accessible quen lecture et le registre de transmission nest accessible quen criture.
$00CF R7/T7 R6/T6 R5/T5 R4/T4 R3/T3 R2/T2 R1/T1 R0/T0 SCI0DRL
Dans les deux registres de commande, un seul est important en premire utilisation, cest
SCICR2. Le bit TE (Transmit Enable) tablit laffectation de la patte PTS1 au module SCI en
tant que TxD et le bit RE (Receive Enable) tablit laffectation de la patte PTS0 au module
SCI en tant que RxD. Les quatre bits poids fort servent valider les demandes dinterruption
sur monte des indicateurs du registre dtat.
$00CB TIE TCIE RIE ILIE TE RE RWU SBK SCI0CR2
62
Le registre dtat du SCISR
Ce registre contient tous les indicateurs qui contrlent le bon fonctionnement du module, en
transmission comme en rception. Deux indicateurs sont fondamentaux :
- TDRE (Transmit Data Register Empty) indiquant quon peut envoyer un nouvel octet sur la
sortie srie, le prcdent tant parti
- RDRF (Receive Data Register Full) indiquant que le registre de rception est plein, donc
quune nouvelle donne vient darriver.
Tous les indicateurs du SCI sont remis 0 par deux oprations successives : une lecture du
registre dtat suivie dune lecture (RDRF) ou dune criture (TDRE) ladresse commune
des deux registres de donne. Cette technique de remise 0 suit de trs prs le fonctionnement
du module et est automatique dans un fonctionnement par scrutation. Elle diffre de la
mthode utilise dans les autres modules, o on remet un bit dtat 0 en y crivant un 1.
*************************LIOCT **************************
* Rception d'un octet sur la liaison srie *
* Attend larrive dun caractre et le rcupre dans A *
* Aucun autre registre modifi sauf CCR, suivant A *
*********************************************************
LIOCT LDAA #$20 ; Attente de la monte
ATT BITA SCISR1 ; |de RDRF, bit 5 du
BEQ ATT ; |registre d'tat SCISR
LDAA SCIDRL ; Lecture de la donne
RTS
63
64
65