Académique Documents
Professionnel Documents
Culture Documents
Khdam PDF
Khdam PDF
Khdam PDF
ED N 1
ED N 2
ED N 3
Introduction
P1 Etude des Ports Entre / Sortie
P2 Etude des Interruptions
P3 Etude des Lignes de Dialogues
1
Systmes Microprocesseurs 6809
Une table de donnes consiste en une liste de donnes quelconques loges en mmoire des adresses successives.
L'adresse de la premire donne est qualifie d'adresse de base de la table.
Question 1
Proposer un programme permettant de ranger en mmoire dans l'ordre croissant l'ensembles des donnes 8 bits non
signes partir de l'adresse de base $0100.
Commentaires
La plage des nombres non signs s'tend de $00 $FF. Il faudra donc charger la mmoire avec ces 256 valeurs.
Programme
0100 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0110 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
0120 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
0130 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
0140 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
0150 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
0160 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
0170 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
0180 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
0190 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
01A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF
01B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF
01C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
01D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF
01E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF
01F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
Question 2
Faire la mme chose pour l'ensemble des donnes 8 bits signes partir de l'adresse de base $0200.
Commentaires
Il faudra en premier lieu charger la mmoire avec les nombres ngatifs en dcrmentant de $FF $80, puis charger les
nombres positifs en incrmentant de $00 $7F.
Programme
0200 FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0
0210 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0
0220 DF DE DD DC DB DA D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
0230 CF CE CD CC CB CA C9 C8 C7 C6 C5 C4 C3 C2 C1 C0
0240 BF BE BD BC BB BA B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
0250 AF AE AD AC AB AA A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0260 9F 9E 9D 9C 9B 9A 99 98 97 96 95 94 93 92 91 90
0270 8F 8E 8D 8C 8B 8A 89 88 87 86 85 84 83 82 81 80
0280 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0290 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
02A0 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F
02B0 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F
02C0 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
02D0 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F
02E0 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F
02F0 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F
Sujet
On souhaite, dans ce problme, valuer le nombre de donnes d'une table qui rpondent une mme caractristique.
Question 1
Proposer un programme permettant d'effectuer le comptage des donnes positives, ngatives et nulles dune table de
nombres signs de 8 bits. Le programme devra permettre de stocker ces rsultats aux adresses $0050, $0051,$0052
par exemple.
Commentaires
Aprs avoir charg la valeur dans le registre A, qui automatiquement positionne les bits N et Z, on peut utiliser les
instructions de branchements qui en dcoule.
Programme
Rsultats du dnombrement
0050 04 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00
1000 FF FF 00 05 08 F9 00 F7 02 06 00 00 00 00 00 00
Question 2
Proposer un programme permettant d'effectuer le comptage du nombre de donnes paires et impaires dune table.
Commentaires
Pour connatre la parit d'un mot de 8 bit, il suffit de faire un ET logique entre le mot et $11. Si le rsultat est zro
alors le nombre est pair, sinon il est impair.
Programme
Rsultat du dnombrement
0050 05 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1000 01 02 03 04 05 06 07 08 09 00 00 00 00 00 00 00
Question 3
Proposer un programme permettant de compter le nombre de donnes d'une table dont le bit b3 est gal 1.
Commentaires
Pour connatre l'tat du bit 3 d'un nombre de 8 bit, il suffit de faire un ET logique entre ce mot et $08, si le rsultat est
gal 0, le bit 3 est 0, sinon le bit 3 est 1.
Programme
Rsultat du dnombrement
0050 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1000 01 02 03 04 05 06 07 08 09 00 00 00 00 00 00 00
P3 Multiplication
Question
Commentaire
Pour connatre X2, on incrmente un mot de 8 bit que l'on multiplie $23, puis on teste le rsultat pour savoir s'il est
suprieur ou gal la valeur que l'on recherche. Si c'est le cas, la valeur de X2 est donc le mot de 8 bit 1, puisque l'on
dsire obtenir un rsultat strictement infrieur.
Programme
Rsultat en $1000
1000 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B = 12
P3 Multiplication 8
Systmes Microprocesseurs 6809
Question 1
On dispose d'une table de 10 donnes de 8 bits choisies arbitrairement. Proposer un programme de recherche de la
donne maximale et de la donne minimale de la liste, les nombres considrs tant non signs.
Commentaire
Pour connatre le MIN et le MAX d'une table, on enregistre d'abord la 1re donne dans MIN et dans MAX, puis on
vient les comparer avec la valeur suivante. Si la nouvelle donne est plus grande que la valeur contenue dans MAX,
on met da nouvelle valeur dans MAX, on procde de manire identique pour la valeur MIN. Dans le cas ou la valeur
n'est ni un MIN, ni un MAX, on pointe sur la valeur suivante de la table.
Programme
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Valeur MIN = 0
0060 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Valeur MAX = 7
Table de donnes
1200 02 02 03 04 05 00 07 07 07 07 00 00 00 00 00 00
Question 2
Complter ce programme de sorte qu'il soit capable de dterminer galement le maximum et le minimum lorsque les
donnes sont signes.
Commentaire
La mthode gnrale est la mme que l'exercice prcdent, seules les instructions de branchement BGT et BLT sont
modifies pour travailler sur des donnes signes.
Programme
BGT Hight
LDA ,X * Chargement et incrmentation du pointeur
CMPA >MIN * Si A < MIN > Low
BLT Low
LDA ,X+ * Chargement et incrmentation du pointeur
BRA Boucle
Hight LDA ,X+ * Chargement et incrmentation du pointeur
STA >MAX * Mmorise la valeur dans MAX
BRA Boucle
Low LDA,X+ * Chargement et incrmentation du pointeur
STA >MIN * Mmorise la valeur dans MIN
BRA Boucle
FIN SWI
ORG $1200 * Dbut de la TABLE
FCB 2,2,3,4,5,0,7,7,7,7
0050 FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Table de donnes
1200 FE 02 03 FC 05 00 07 07 07 07 00 00 00 00 00 00
Question 1
On dispose d'une table de 10 donnes de 8 bits, choisies arbitrairement, dont l'adresse de base est ADR1. Proposer un
programme permettant de transfrer cette table l'adresse de base ADR2.
Commentaire
La mthode utilise ici consiste charger une valeur dans le registre A en ce servant du pointeur X (identifiant de la
table source), et de stoker cette valeur l'adresse dsigne par le pointeur Y ( identifiant la table de destination).
Programme
ORG $0000
LDX #ADR1 * Chargement du pointeur X
LDY #ADR2 * Chargement du pointeur Y
Boucle LDA ,X+ * Chargement et incrmentation du pointeur X
STA ,Y+ * Chargement et incrmentation du pointeur Y
CMPX #ADR1+10 * Si le pointeur dpasse la fin de la table
BNE Boucle * alors FIN
SWI
ORG $0050
FCB 0,1,9,3,4,5,2,7,5,9
0050 00 01 09 03 04 05 02 07 05 09 00 00 00 00 00 00
0060 00 01 09 03 04 05 02 07 05 09 00 00 00 00 00 00
Question 2
P5 Transfert d'une table de donnes d'une zone mmoire vers une autre 12
Systmes Microprocesseurs 6809
Proposer un programme permettant de ranger les nombres hexadcimaux $00 $09 aux adresse $0100 $0109 et
leur complment 1 aux adresses $0200 $0209. Sur le mme principe, proposer un programme qui n'utilise qu'un
seul pointeur.
Commentaire
Ce programme comporte une petite difficult car l'utilisation d'un seul pointeur implique que pour pointer sur la table
2 d'adresse de base $0200, il faut rajouter au pointeur un dplacement gal $FF ($1001), car l'adresse 2 et dcale
de $0100 dans la mmoire par rapport l'adresse de base de la table 1, la soustraction du 1 vient du fait de
l'autoincrmentation de 1 est induite par le dernier chargement du registre A.
Programme
..:: Transfert d'une table de 10 donnes de ADR1 > ADR2, 1 pointeur ::..
ORG $0000
LDX #TABLE * Chargement du pointeur X
LDA #$00 * Initialisation de l'accumulateur A
Boucle STA ,X+ * Mmorisation de A l'adresse pointe par X
COMA * Complment 1 de A
STA $FF,X * Mmorisation de A l'adresse X+$FF
COMA * Complment 1 de A > valeur initiale
INCA * Incrmentation de la valeur de A
CMPA #$0A * Si A = $0A
BEQ FIN * alors FIN
BRA Boucle
FIN SWI
0100 00 01 02 03 04 05 06 07 08 09 00 00 00 00 00 00
Complment 1 en ADR2
0200 FF FE FD FC FB FA F9 F8 F7 F6 00 00 00 00 00 00
Question 3
On dispose maintenant de deux table de 10 donnes de 16 bits choisies arbitrairement. ADR1 et ADR2 sont les
P5 Transfert d'une table de donnes d'une zone mmoire vers une autre 13
Systmes Microprocesseurs 6809
adresses de base de ces tables. On souhaite construire une troisime table, d'adresse de base ADR3, dont chaque
lment rsulte de l'addition des lments de mme rang des deux premires tables.
Proposer le programme correspondant.
Commentaire
Le fait d'avoir trois tables de donnes, impose d'utiliser le pointeur X, pour pointer la fois la table 1 et la table 2. Le
dplacement rajout X, sera calcul de la manire suivante ( ADR2 ADR1 2 ), la soustraction de 2 est ici due au fait
que nous travaillons sur des donnes de 16 bits, de mme les autoincrmentation sont aussi sur 16 bits. Le pointeur
Y quand lui sert pointer sur l'adresse de la table 3.
Programme
ORG $0000
LDX #ADR1 * Chargement du pointeur X
LDY #ADR3 * Chargement du pointeur Y
Boucle LDD ,X++ * Chargement de D et incrmentation de 2
ADDD $1E,X * Addition de D avec le contenue de X+$1E
STD ,Y++ * Mmorisation de D et incrmentation de 2
CMPX #ADR1+20 * Si X = ADR1+20 alors fin de la table
BNE Boucle * et du programme
SWI
0050 00 00 00 01 10 13 52 30 56 89 21 54 14 25 01 25
0060 87 28 45 78 00 00 00 00 00 00 00 00 00 00 00 00
0070 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
P5 Transfert d'une table de donnes d'une zone mmoire vers une autre 14
Systmes Microprocesseurs 6809
0080 01 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00
0090 01 01 01 02 11 14 53 31 57 8A 22 55 15 26 02 26
00A0 88 29 46 79 00 00 00 00 00 00 00 00 00 00 00 00
P5 Transfert d'une table de donnes d'une zone mmoire vers une autre 15
Systmes Microprocesseurs 6809
Question 1
On dispose d'une table de 10 donnes correspondant des caractres ASCII ( cods sur 7 bits ).
Proposer un programme permettant de dterminer la cl de parit paire de chaque lment de la table et, le cas
chant, de rajouter cette cl devant la donne.
Exemple
Supposons que le premier lment de la table soit le caractre ASCII " a ", qui se traduit par la combinaison 110 0001
( soit $61 en hexadcimal ). La cl de parit paire de ce caractre tant gale 1, le programme devra permettre de
modifier la donne $61 et de la remplacer par $E1.
Commentaire
Pour connatre la cl de parit paire d'un nombre sur 7 bit, il faut compter le nombre de 1 qui le compose, pour cela
nous avons utilis le dcalage logique gauche qui la particularit de faire rentrer le bit de poids fort dans la carry,
et lors du dcalage gauche d'insrer un zro dans le bit de poids faible.
Il suffira ensuite d'incrmenter un compteur de " 1 ", l'opration s'arrtera quand le nombre trait dans le registre A
sera gal $00.
Une fois ceci fait il faudra dterminer si le nombre de 1 est pair ou impair cf. ED1P2Q2, enfin dans le cas ou
celuici serait impair pour mettre 1 le bit 8 du nombre il suffira de faire un OU logique entre le nombre et $80. Et
pour finir de stocker le nouveau nombre en remplacement de l'ancien.
Programme
Table de donnes
00A0 61 62 63 61 62 63 61 62 63 64 00 00 00 00 00 00
Donnes + cl de parit
00A0 E1 E2 63 E1 E2 63 E1 E2 63 E4 00 00 00 00 00 00
Question 2
Le programme prcdent permettant d'adjoindre aux donnes un contrle transversal de la parit, le modifier de sorte
qu'il soit galement susceptible de dterminer puis d'ajouter la fin de la table un octet de vrification de la parit
longitudinale.
Commentaire
Le programme qui suit est quasiment similaire au prcdant, il juste fallu rajouter un compteur transversal, c'est
dire qui s'incrmente chaque fois que l'on remplace une valeur dans la table d'origine en ajoutant une cl de parit. Il
suffit ensuite de tester la parit de se compteur et de rajouter en fin de table un 1 si il est impair, un zro si il est pair.
Programme
Table de donnes
00A0 61 63 61 63 61 61 61 61 61 61 00 00 00 00 00 00
00A0 E1 63 E1 63 E1 E1 E1 E1 E1 E1 01 00 00 00 00 00
Question 1
On dispose d'une table de 10 donnes de 8 bits ranges initialement dans un ordre quelconque.
Mettre au point un programme effectuant un tri des donnes et permettant aprs excution de les ranger dans l'ordre
croissant partir de la mme adresse de base.
Commentaire
En tout premier lieu, on fait une copie de la table de donnes, puis on charge la 1re valeur de la table d'origine que
l'on compare aux valeurs du tableau de recopie. A chaque fois que la valeur trouve est plus grande on incrmente la
valeur COMPTEUR ( qui reprsente la position de la valeur dans le tableau final).
Quand la table de donnes est entirement balaye, on vrifie dans la table de position ( TABLED ) si l'emplacement
est libre ( 00 = libre ; 01 = occup ) ; cette mthode de table de position est utilis pour rsoudre le problme de
valeurs identique, le COMPTEUR ayant dans ce cas la mme valeur, on vite ainsi de recrire la mme valeur au
mme endroit, en incrmentant de 1 le COMPTEUR.
Si on remplace l'instruction de branchement BLO par BLT, ce programme est valable pour les nombres signs.
Programme
..:: Tri des donnes dune table dans lordre croissant ::..
Table de donnes
0080 01 06 00 01 01 02 01 04 01 05 00 00 00 00 00 00
0080 00 01 01 01 01 01 02 04 05 06 00 00 00 00 00 00
Proposer un programme permettant aprs addition de deux donnes de 8 bits de vrifier la validit du rsultat obtenu
et, le cas chant, de le corriger.
Commentaires
Si A et B dont des donnes non signes de 8 bits elles peuvent prendre des valeurs allant de 0 255 et leur somme
peut aller de 0 510. Ainsi, si l'on exprime le rsultat sur 8 bits on court le risque de provoquer des dpassements de
capacit.
Nanmoins, il est possible de vrifier la validit du calcul en testant la valeur de la retenue finale dans le registre CCR
Dans ce dernier cas, il existe plusieurs possibilits pour corriger l'erreur commise, la meilleure consistant exprimer
le rsultat avec un octet supplmentaire en considrant C comme le 9me bit. C'est cette mthode que nous retiendrons
puisque la possibilit de travailler sur 16 bits par la biais de l'accumulateur D nous est offerte sur le 6809.
Si A et B sont des donnes signes de 8 bits elles peuvent prendre des valeurs allant de 128 +127 en reprsentation
C2, et leur somme peut aller de 256 +254. Dans ce cas, l'addition de deux nombres de mme signe et de valeurs
leves provoquera des dpassements de capacit sur 8 bits qui seront cette fois indiqus par le bit de dbordement V
du registre CCR
Pour corriger l'erreur on choisira galement d'exprimer le rsultat sur 16 bits ce qui ncessite d'effectuer une
extension de signe qui consiste recopier le bit C sur l'ensemble de l'octet de poids fort. Considrons par exemple
l'addition suivante
11100011 (29)
10000001 +(127)
_______________________
101100100 (156)
Rsultat faux sur 8 bits (+100), correct sur 9 bit avec C = bit de signe (156)
Pour exprimer ce rsultat sur 16 bits il faut tendre le signe : R = 11111111 01100100 = (156).
Dans le programme propos, les oprandes A et B additionner sont placs aux adresse $0050 et $0051, le rsultat de
l'addition en non sign l'adresse $0052 (et $0053 si la somme s'exprime sur l 6 bits) et le rsultat de l'addition signe
l'adresse $0054 (et $0055 pour une somme sur 16 bits). Par ailleurs, on choisit de placer le rsultat de l'addition
dans l'accumulateur B dans la mesure o celuici correspond l'octet de poids faible de D (en cas d'erreur on
rectifiera le contenu de A de manire avoir le rsultat correct dans D).
Pour tester la validit de la somme non signe on utilise un branchement conditionnel BCS qui aiguille le P vers
l'tiquette CORRUNS lorsque la retenue est gale 1. La correction proprement dite consiste faire pntrer la
Pour tester la validit de la somme signe on utilise un branchement BVS qui aiguille le P vers l'tiquette CORRSIG
lorsque le bit V est 1. Comme indiqu prcdemment, la correction ncessite ici de faire une extension de signe par
recopie du bit C. L'instruction SEX permet de raliser une extension de signe en transformant un nombre sign en
C2 de 8 bits en un nombre sign en C2 de 16 bits par recopie du bit de signe de B dans l'accumulateur A.
Autrement dit, il faut au pralable faire pntrer la retenue C la place du bit de signe dans B avant d'utiliser
l'instruction SEX : C'est le rle de l'instruction RORB (C > b7 et b0 > C).
Aprs l'extension,on veillera rcuprer le bit de poids faible de B par une instruction ROLB (C > b0 ). Enfin, le
rsultat corrig est stock l'adresse $0054.
Programme
CLRA
LDB $0050
ADDB $0051
BCS CORRUNS
STB $0052
SUITE LDB $0050
ADDB $0051
BVS CORRSIG
STB $0054
FIN SWI
CORRUNS ROLA
STD $0052
BRA SUITE
CORRSIG RORB
SEX
ROLB
STD $0054
BRA FIN
ORG $0050
DATA FCB $BC,$23
Analyser prcisment le fonctionnement du programme propos. Vous indiquerez ensuite la raison pour laquelle il ne
fonctionne pas si, dans l'instruction de la ligne 3, on initialise le pointeur X par l'adresse $0150 par exemple.
Programme
CLRA
LDU #$0050
LDX #$0100
TFR X,D
EXG A,B
BOUCLE STA ,X+
CMPX #$0164
BEQ FIN
INCA
PSHUA
ANDA #$0A
CMPA #$0A
PULU A
BNE BOUCLE
DAA
BRA BOUCLE
SWI
END
Commentaires
Pour tablir la table de correspondance, la mthode gnrale mise en oeuvre dans le programme consiste rcuprer
l'octet de poids faible de l'adresse de base de la table, puis de le placer dans l'accumulateur A et enfin le ranger en
mmoire.
Pour passer la donne suivante il suffit d'incrmenter de 1 le contenu de A puis de le ranger en mmoire.
Le premier problme se prsente ds lors que le contenu de A est gal $0A auquel cas il est ncessaire d'effectuer
un ajustement dcimal (instruction DAA) pour obtenir la traduction correcte. En effet, on ne dispose que de 10
caractres (0 9) pour coder une donne en dcimal alors qu'il y en a 16 (0 F) pour coder une donne en
hexadcimal.
Ainsi, pour traduire $0A, il faut lui ajouter $06 afin d'obtenir la correspondance adquate $10. On peut ensuite
continuer incrmenter de 1 le contenu de A pour passer la donne suivante.
L'ajustement dcimal devra tre effectu chaque fois qu'apparat le caractre "A" dans le nombre hexadcimal!.
Ce programme ne rpondra au fonctionnement souhait que dans le cas o l'adresse de base de la table prsente un
octet de poids faible compris entre $00 et $09 dans la mesure o la premire traduction correspond une simple
recopie de cet octet.
Question 2
Proposer une nouvelle version du programme assurant un fonctionnement correct quelle que soit l'adresse de base de
la table.
Commentaires
Le principe du programme propos pour respecter la contrainte impose de mme que prcdemment, on commence
par rcuprer l'octet de poids faible de l'adresse de base de la table.
Pour traduire ce nombre en dcimal il est ncessaire de savoir s'il correspond aux units, aux dizaines, aux
vingtaines,etc.
En effet, si on a affaire aux units la traduction consiste en une simple recopie de l'octet de poids faible de l'adresse, si
on a affaire aux dizaines il faut ajouter $06 cet octet pour avoir son quivalent dcimal, si on a affaire aux
vingtaines il faut ajouter 2 * $06, etc.
Programme
CORRIGE1
CMPB #$1D
BHI CORRIGE2 * Si l'octet de poids faible est > $1D >CORRIGE2
ADDB #$0C * sinon double ajustement dcimal
BRA NEXT
CORRIGE2
CMPB #$27
BHI CORRIGE3 * Si l'octet de poids faible est > $27 >CORRIGE3
ADDB #$12 * sinon triple ajustement dcimal
BRA NEXT
CORRIGE3
CMPB #$31
BHI CORRIGE4
ADDB #$18
BRA NEXT
CORRIGE4
CMPB #$3B
BHI CORRIGE5
ADDB #$1E
BRA NEXT
CORRIGE5
CMPB #$45
BHI CORRIGE6
ADDB #$24
BRA NEXT
CORRIGE6
CMPB #$4F
BHI CORRIGE7
ADDB #$2A
BRA NEXT
CORRIGE7
CMPB #$59
BHI CORRIGE8
ADDB #$30
BRA NEXT
CORRIGE8
ADDB #$36
BRA NEXT
END
Question 3
Rdiger un programme de recherche de la traduction hexadcimale d'un nombre XX stock en mmoire l'adresse
$0060.
Commentaires
Le programme de recherche de la traduction hexadcimale d'un nombre dcimal XX quelconque (allant de 00 99)
doit au pralable effectuer un rangement de la table de correspondance en mmoire.
Pour ce faire, nous utiliserons le programme propos la question 1 transform ici en sousprogramme.
La recherche proprement dite consistera alors en une lecture de la table jusqu' ce que la donne XX considre soit
dcele ; il suffit ensuite de rcuprer l'octet de poids faible de son adresse dans la table pour avoir la traduction
hexadcimale souhaite.
Programme
BNE LECTURE
LEAX 1,X
TFR X,D
STB $0061
SWI
TABLE CLRA
LDU #$0050
LDX #ADR
TFR X,D
EXG A,B
BOUCLE STA ,X+
CMPX #$0164
BEQ FIN
INCA
PSHUA
ANDA #$0A
CMPA #$0A
PULUA
BNE BOUCLE
DAA
BRA BOUCLE
FIN RTS
ORG $0060
DATA FCB $23
END
Remarque
L'adresse de la donne $23 dans la table est $0117 ; donc suite l'excution de ce programme, c'est la traduction
hexadcimale $17 qui sera place l'adresse $0061.
P3 Conversion DCBbinaire
Question 1
A l'aide de la mthode prsente en cours, tablir un algorithme permettant de convertir un nombre entier cod en
DCB sur 8 bits en binaire.
Commentaires
La conversion ncessite l'emploi de deux registres de 8 bits : l'un contenant initialement la donne DCB convertir,
le second recueillant la donne traduite en binaire.
Algorithme
Si(a[3]= l) alors
A < A $03
Fin si
Remarque
Lorsqu'on parle de dcalage droite des contenus combins des registres A et B cela signifie que le bit de poids faible
de A doit tre introduit comme bit de poids fort dans B.
Question 2
En vous appuyant sur l'algorithme prcdent, proposer un programme ralisant la conversion d'un nombre DCB rang
en mmoire l'adresse $0050 et stockant sa traduction binaire l'adresse $0051.
Programme
P3 Conversion DCBbinaire 28
Systmes Microprocesseurs 6809
ORG $0050
DATA FCB $28 * Donne DCB traduire
Remarque
P3 Conversion DCBbinaire 29
Systmes Microprocesseurs 6809
P4 Multiplication
Question 1
Sur le modle de l'algorithme propos en cours, rdiger un programme ralisant la multiplication de deux donnes de
8 bits non signes. Le multiplicande, le multiplicateur et le rsultat obtenu seront placs aux adresses mmoire $0050,
$0051 et $0052.
Commentaires
On rappelle que l'algorithme de multiplication de deux nombres non signs de 8 bits ncessite l'emploi de trois
registres 8 bits. Le 6809 n'en possdant que deux, on travaillera directement sur le contenu de la case mmoire
renfermant le multiplicande.
Algorithme
Si (b[0] = 1) alors
A < A + multiplicande
Fin Si
Compteur = Compteur l
Remarque
Programme
P4 Multiplication 30
Systmes Microprocesseurs 6809
LEAX 1,X
BNE DEBUT
STD $0052
SWI
ORG $0050
DATA FCB $FF,$48
END
Remarque
On notera que le processus de dcalage combin des registres A et B diffre selon que b[0] = l ou que b[0] = 0.
En effet, dans un cas il faut introduire en a[7] la retenue issue de l'addition du multiplicande (RORA) et dans l'autre il
faut introduire en a[7] un 0 (LSRA).
Pour l'exemple choisi, le rsultat de la multiplication stock l'adresse $0052 (et $0053) sera $47B8.
Enfin, si l'on souhaite vrifier la validit du programme on peut ajouter la squence suivante au dbut du programme
LDA $0050
LDB $0051
MUL
STD $0054
Question 2
Modifier le programme prcdent de sorte qu'il puisse travailler sur des donnes de 16 bits.
Commentaires
L'algorithme utilis reste identique au prcdent mais la difficult rside ici dans le fait que seuls les accumulateurs A
et B peuvent subir des oprations de dcalage ou de rotation. Autrement dit, ces dcalages doivent tre effectus en
deux temps : dcalage de l'octet de poids fort de la donne en premier lieu puis dcalage de l'octet de poids faible en
prenant soin de faire le report correctement.
Dans le programme prsent cidessous, le multiplicande est rang aux adresses $0050 et $0051, le multiplicateur en
$0052 et $0053 et le rsultat de la multiplication en $0054, $0055, $0056 et $0057.
On travaillera donc sur ces quatres cases mmoire ; en particulier, le contenu de $0054 et $0055 est initialis 0 et le
multiplicateur est plac en $0056 et $0057. Enfin, le compteur doit tre initialis par la valeur 16 soit $0010 en
hexadcimal.
P4 Multiplication 31
Systmes Microprocesseurs 6809
ORG $0050
DATA FDB $04FF,$0336
END
Remarque
A l'issue de l'excution, le rsultat de la multiplication plac de $0054 $0057 est gal $00100ACA.
P4 Multiplication 32
Systmes Microprocesseurs 6809
P5 Division
Question 1
Proposer un programme effectuant la division de X par Y, o X et Y sont deux nombres de 8 bits non signs tels que
X suprieur ou gal Y et Y diffrent de 0. Le dividende, le diviseur, le quotient et le reste seront rangs en mmoire
des adresses successives.
La division de deux entiers binaires non signs de 8 bits ncessite l'emploi de trois registres 8 bits.
Algorithme
b[0] < 0
sinon
A < A diviseur
b[0] < 1
Finsi
Programme
CLRA
LDB $0050 * Place le dividende dans B
LDX #$0008 * Compteur
DEBUT ASLB * Dcalage gauche des
* registres A et B
ROLA
CMPA $0051
BLO SUITE * Si A < diviseur > SUITE
P5 Division 33
Systmes Microprocesseurs 6809
ORG $0050
DATA FCB $FC,$26
END
Question 2
Comme application, crire un programme permettant de raliser la conversion inverse de celle qui est traite dans le
problme P3. Le nombre entier binaire de 8 bits convertir sera stock l'adresse $0050 et sa traduction en DCB
l'adresse $0051. On utilisera un sous programme pour effectuer les divisions ncessaires.
Commentaires
Rappelons que la mthode de conversion binaireDCB consiste diviser le nombre binaire par 10 successivement
jusqu' obtenir un rsultat nul ; les restes des divisions crits sur 4 bits correspondent chaque chiffre DCB, le
premier reste traduisant le chiffre des units.
Programme
LDY #$0051
BOUCLE JSR DIVISE
STA ,Y+
CMPB #$00
BNE BOUCLE
SWI
DIVISE CLRA
LDB $0050
LDX #$0008
DEBUT ASLB
ROLA
CMPA #$0A
BLO SUITE
SUBA #$0A
ORB #$01
SUITE LEAX 1,X
BNE DEBUT
STB $0050
RTS
ORG $0050
DATA FCB $DC
Remarque
P5 Division 34
Systmes Microprocesseurs 6809
La donne binaire $DC = 1101 1100 doit tre traduite en BCD par 0010 0010 000 (soit $0220 en hexadcimal). A
l'issue de l'excution de ce programme, on trouve en fait $00, $02, $02 aux adresses $0051, $0052 et $0053 ce qui
traduit le fait que les restes sont ici calculs sur 8 bits. Ainsi, le rsultat souhait est obtenu en examinant les 4 bits de
poids faibles de ces trois donnes.
Question 3
Algorithme
T < R
R < RM
sinon
R < R+M
Finsi
Q[0] < 1
sinon
Q[0] < 0
Finsi
Q < C2 de Q
Fin Si
Dans le programme propose cidessous, les cases mmoire utilises se prsentent comme suit :
P5 Division 35
Systmes Microprocesseurs 6809
ADRESSE CONTENU
$0001 dividende
$0002 signe du dividende (S)
$0003 diviseur (M)
$0004 quotient (Q)
$0005 reste (R)
$0006 registre temporaire (T)
Programme
ORG $0020
LDA $0001 * Charge le dividende dans A
BMI SIGNE * S'il est ngatif on passe en SIGNE
CLRA * S'il est positif, on fixe S=$00
STA $0002
NEXT LDB $0001 * Charge le dividende dans B
SEX * Etend le signe du dividende dans laccumulateur A
STB $0004 * Initialise Q avec le dividende
STA $0005 * Initialise R avec le signe du dividende
LDB #$08 * Initialise le compteur
STB $000A * Compteur plac l'adresse $000A
P5 Division 36
Systmes Microprocesseurs 6809
* Cas R = 0, teste si Q = 0
NEGATIF2
LDA $0005
BMI QUN * Si R < 0 on passe en QUN
BRA RESTAURE * Cas R > 0, on passe en RESTAURE
SWI
RESTAURE
LDA $0006
STA $0005
BRA COMPT
SWI
ORG $0001
DIVIDENDE
P5 Division 37
Systmes Microprocesseurs 6809
FCB $8F
ORG $0003
DIVISEUR
FCB $FD
END
P5 Division 38
Systmes Microprocesseurs 6809
Introduction
L'tude du fonctionnement de l'interface parallle peut tre ralise l'aide d'un kit du type DATA RD ou MC09B
sur lesquels sont implants un microprocesseur 6809 ainsi qu'un PIA. L'adresse de base de ce dernier est $7090 pour
le 1" kit et $8000 pour le second.
Les divers registres du PIA ont donc pour adresse : ORA/DDRA : $7090 (ou $8000), CRA : $7091 (ou $8001),
ORB/DDRB : $7092 (ou $8002) et CRB : $7093 (ou $8003).
Les lignes d'interruption IRQA et IRQB des ports A et B du PIA sont relies la broche IRQ du microprocesseur. Le
vecteur d'adresse de l'interruption IRQ est $3F40 pour le kit DATA RD et $3FF8 pour le MC09B.
Un cble limande permet la liaison entre le PIA du kit et la platine d'tude schmatise cidessous :
B7....B0 A7....A0
XXXXXXXX XXXXXXXX
OOOOOOOO OOOOOOOO
Port B Port A
CB2 CB1
X X [Cble Limande]
Vers le P
Les interrupteurs, munis d'antirebond, sont relis des fiches femelles et permettent d'imposer un niveau logique 0
ou 1 sur ces fiches.
Introduction 39
Systmes Microprocesseurs 6809
Sujet 1
..:: Port en entre ::..
Afficher, par le biais des interrupteurs, le mot $C4 sur les entres A; du port A. Ecrire en langage assembleur un
programme permettant de stocker ce mot l'adresse $0100. Excuter ce programme et vrifier son bon
fonctionnement.
Commentaires :
$C4 = (11000100)2
On initialise le port A en entre, puis on vient le lire et on mmorise la donne lue en $0100
Programme
ORG $0000
CLRA * Effacement de A
STA CRA * Stock A dans CRA pour demande d'accs DDRA
STA DDRA * Dclaration du port A en entre
LDA #$04 * |
STA CRA * | Demande d'accs ORA
LDA ORA * Chargement du registre ORA
STA $0100 * Stockage de la valeur l'adresse $0100
SWI * Fin du programme.
Sujet 2
..:: Port en sortie ::..
On utilise le port B en sortie pour commander, par microprocesseur, un moteur pas pas. Ce moteur possde 4
entres notes I1, I4, l'activation de ces entres suivant la squence dcrite cidessous fait tourner le moteur par pas
de 7,5 (le fait d'inverser la squence de l'tape 4 l'tape 1 fait tourner le moteur en sens inverse).
PAS I1 I2 I3 I4
1 1 1 0 0
2 0 1 1 0
3 0 0 1 1
4 1 0 0 1
5 Rptition du pas I1
Question 1 :
Ecrire un programme en langage assembleur permettant d'assurer une rotation de 360 par pas de 3,75 dans un sens
puis dans l'autre (utiliser entre chaque pas une temporisation, correspondant au dcomptage de $FFFF, dont vous
prciserez le rle).
Pour vrifier le bon fonctionnement du programme, on prendra soin de connecter le moteur, par l'intermdiaire de ses
entres I1, I4 au port B du PIA suivant le brochage : B0I1, B1I2, B2I3 et B3I4.
Proposer une mthode permettant de dterminer la vitesse de rotation du moteur ( on rappelle que le fonctionnement
du 6809 est rythm par une horloge de Frquence gale 1 MHz ).
Commentaires :
Il faut crer un table de quatre donns, correspondant en ordre et en valeur l'enchanement de la squence moteur,
cette squence comporte quatre phases qui permettent chacune un dplacement de 3,75 du moteur, pour raliser un
tour complet soit 360 il faut faire 24 fois la boucle de squence des phases.
Entre chaque phase est impos une temporisation de $FFFF permettant au moteur d'effectuer l'enchanement de ses
transitions. Le temps peut tre rduit et est fonction de l'acclration, et donc de ce fait du couple moteur.
Pour calculer la vitesse moteur on commence par ngliger les cycles machines or temporisation auquel cas on
pourrais dire que le moteur met 24 x 4 temporisation pour faire un tour.
VT environ gal (3 NC + 4 NC+ 3 NC ) x $FFFF x 24 x 4/360 = 0.017 tr/s soit environ 1 tr/min.
Programme
* INITIALISATION DU PIA
ORG $0200
DATA FCB $03,$06,$0C,$09
* SOUSPROGRAMME TEMPO
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Programme
Pour la rotation en sens inverse on changera seulement la squence des donnes pour la rotation
Sujet 1
Un chenillard consiste allumer une seule lampe la fois parmi les huit et la faire se dplacer dans l'ordre A0,
A1, A2,......, A7, A0,..... une vitesse donne.
Question 1
Proposer un programme en langage assembleur permettant de raliser un tel chenillard sur le port A (on conservera la
mme temporisation que dans le problme prcdent).
Commentaires
On commence par tablir un table de donnes correspondant en nombre et en valeurs l'enchanement du chenillard.
Il suffit ensuite d'envoyer les donnes les unes aprs les autres sur le port A en intercalant la temporisation entre
chaque squences, lorsque l'on arrive la fin de la table, on reboucle alors sur son dbut et ainsi de suite.
Programme
* INITIALISATION DU PIA
CLRA * Effacement de A
STA CRA * Stock A dans CRA pour accs DDRA
LDA #$FF * |
STA DDRA * | Place le port A en sortie.
LDA #$04 * |
STA CRA * | Demande d'accs ORA
* PROGRAMME PRINCIPAL
ORG $0200
DATA FCB $01,$02,$04,$08,$10,$20,$40,$80
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Question 2
Modifier le programme prcdent de faon ce qu'il soit susceptible d'tre interrompu par test d'tat aprs avoir
allum AN et qu'il fonctionne selon le principe suivant
La demande d'interruption sera ralise l'aide d'un front descendant envoy sur CA1, par exemple. Pour tester le
programme, on gnrera manuellement le front descendant l'aide de l'un des interrupteurs pralablement reli
CA1.
Proposer un programme permettant d'effectuer le comptage du nombre de donnes paires et impaires d'une table.
Commentaires
On excute le chenillard pour toute la table, la fin de celle ci on vient scruter le bit 7 de CRA correspondant un
interruption d'tat du PIA si ce bit est 1, une interruption a eu lieu, on teint donc alors toute les leds pendant une
valeur de huit tempo soit 5s environs puis on recommence.
Si aucune interruption n'est demande, le chenillard recommence en dbut de table.
Programme
* INITIALISATION DU PIA
CLRA * Effacement de A
STA CRA * Stock A dans CRA pour accs DDRA
LDA #$FF * |
STA DDRA * | Place le port A en sortie.
* PROGRAMME PRINCIPAL
CLRA * |
STA ORA * | Extinction des sorties
LDA #$08
L2 JSR TEMPO * Appel du sous programme TEMPO
DECA * Dcrmente A de 1
BNE L2 * Si A n'est pas nul on boucle sur L2
LDA ORA * Sinon, lecture de ORA pour RAZ du bit b7 de CRA
BRA DEBUT * Sinon > boucle sur DEBUT
* DONNEES
ORG $0200
DATA FCB $01,$02,$04,$08,$10,$20,$40,$80
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Question 3
Modifier le programme du chenillard de sorte qu'il soit susceptible d'tre interrompu par une interruption vectorise et
de raliser les squences suivantes
Proposer un programme global, c'est dire incluant les deux types d'interruption.
Excuter ce programme et lancer une interruption par test d'tat ; pendant le droulement de cette interruption,
lorsque toutes les lampes sont teintes, lancer une interruption vectorise. Que se passetil ? Recommencer la mme
exprience en lanant d'abord l'interruption vectorise. Conclure.
Commentaires
On excute le chenillard normalement. L'interruption vectorise sur front montant est dclare sur CA2 par
consquent si pendant l'excution du chenillard un interruption apparat sur CA2 le programme se positionne
automatiquement l'adresse d'interruption du kit soit $3FF8 laquelle est stock l'adresse du programme
d'interruption, on excute alors ce programme qui consiste allumer toutes les leds durant 5s, puis le chenillard
reprends la ou il s'est arrt.
Programme
* INITIALISATION DU PIA
CLRA * Effacement de A
STA CRA * Stock A dans CRA pour accs DDRA
LDA #$FF * |
STA DDRA * | Place le port A en sortie.
LDA #$1C * | Demande d'accs ORA et validation des
STA CRA * | interruptions sur front montant.
LDY #INTVECT * | Chargement de l'adresse du sous programme
STY $3FF8 * | d'interruption.
ANDCC #$EF * Forage du bit b4 du CCR 0
* PROGRAMME PRINCIPAL
ORG $0150
INTVECT LDA #$FF * |
STA ORA * | Allumage des sorties
LDA #$08 * Temporisation de 5S
L2 JSR TEMPO * Appel du sous programme TEMPO
DECA * Dcrmente A de 1
BNE L2 * Si A n'est pas nul on boucle sur L2
LDA ORA * Sinon, lecture de ORA pour RAZ du bit b7 de CRA
RTI * Retour au programme principal
* DONNEES
ORG $0200
DATA FCB $01,$02,$04,$08,$10,$20,$40,$80
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Programme Global
* INITIALISATION DU PIA
CLRA * Effacement de A
STA CRA * Stock A dans CRA pour accs DDRA
LDA #$FF * |
STA DDRA * | Place le port A en sortie.
LDA #$1E * | Demande d'accs ORA et validation des
STA CRA * | interruptions.
LDY #INTVECT * | Chargement de l'adresse du sous programme
STY $3FF8 * | d'interruption.
ANDCC #$EF * Forage du bit b4 du CCR 0
* PROGRAMME PRINCIPAL
CLRA * |
STA ORA * | Extinction des sorties
LDA #$08 * Temporisation de 5s
ORG $0150
INTVECT LDA #$FF * |
STA ORA * | Allumage des sorties
LDB #$08 * Temporisation de 5S
L3 JSR TEMPO * Appel du sous programme TEMPO
DECB * Dcrmente B de 1
BNE L3 * Si B n'est pas nul on boucle sur L3
LDA ORA * Sinon, lecture de ORA pour RAZ du bit b7 de CRA
RTI * Sinon > Retour au programme principal.
* DONNEES
ORG $0200
DATA FCB $01,$02,$04,$08,$10,$20,$40,$80
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Commentaires
Par test il s'avre que l'interruption vectorise est prioritaire devant l'interruption d'tat c'estdire que si une
interruption d'tat est demand et si en mme on une requte d'interruption vectorise, alors s'est l'interruption
vectorise qui est excute.
Question 1
On souhaite montrer l'action du bit b3 de CRA sur CA2, lorsque l'on travaille en mode programm.
Comme application, proposer un programme permettant de faire clignoter la led associe CA2 avec une priode
correspondant au dcomptage de $FFFF.
Commentaire
Il faut imprativement positionner le bit 4 de CRA 1 pour utiliser le mode programm, puis faire varier le bit 3 de 0
1 entre chaque temporisation pour faire clignoter la led.
Programme
* PROGRAMME PRINCIPAL
ORG $0250
TEMPO LDX #$FFFF * Chargement de X par $FFFF
T2 LEA X,X * X=X1
BNE T2 * Si X<>0 > boucle sur T2
RTS * Sinon > Retour au programme appelant.
Question 2
Ce mode de fonctionnement va tre tudi pour effectuer une conversion analogique numrique commande par le
microprocesseur. On utilisera pour cela un convertisseur (platine AD CONVERTER) dont les principales
caractristiques sont : tension analogique convertir comprise entre 0 et 5 V, rsolution gale 20 mV et temps de
conversion maximum gal 30 ms.
L'entre du signal analogique s'effectue sur la broche ANALOGUE l/P, la sortie numrique sur les broches D0, D1,
......., D7. L'entre SELECT doit tre positionne 1 afin de slectionner le mode de conversion analogique
numrique. La masse de la platine de conversion doit tre relie celle du microprocesseur via la borne MASSE de la
platine PIA.
1
______ _____
STATUS _____| |____|
<20ms>
2
____
DONNEES ____________/ \_____
VALIDE \____/
NB:
1 : Demande de conversion envoye par le P
2 : Fin de conversion signale au P par le convertisseur
On propose de travailler avec le port A du PIA en utilisant la ligne CA1, pour le signal STATUS et la ligne CA2 pour
le signal CONVERT suivant le schma
NB:
1 : Bus de Donnes
2 : Bus dAdresses
3 : Bus de Commande
Ecrire en langage assembleur un programme permettant d'effectuer l'acquisition numrique d'une donne analogique
en mode impulsion.
Effectuer ces conversions et ces acquisitions pour des tensions analogiques comprises entre 0 et 5 V par pas de 0,5 V.
Analyser les rsultats obtenus et conclure.
Commentaire
On provoque une impulsion sur CA2, en utilisant, le mode impulsion, cette impulsion permettra d'activer le CAN, il
faudra ensuite, tester le bit 7 d'interruption qui sera positionn 1 par l'intermdiaire de CA1 lorsque la conversion
sera termine. Il ne reste plus qu'a lire la donne sur le port A et enfin la mmoriser en $0100.
Programme
* PROGRAMME PRINCIPAL
CLRA * |
STA CRA * | Demande daccs DDRA
STA DDRA * | Configuration du port A en entre
CONVERT LDA #$3C * |
STA CRA * | Chargement du mot de commande dans CRA.
ETAT LDA CRA * Chargement du registre d'tat CRA
ANDA #$80 * Masquage du bit b7
BEQ ETAT * Si pas d'interruption > boucle sur ETAT
LDA ORA * sinon > Conversion termine => Lecture conversion
STA >$0100 * Stockage de la conversion l'adresse $0100
SWI