Vous êtes sur la page 1sur 52

Systmes Microprocesseurs 6809

Copyright 19962001, @Pepper's.

Systmes Microprocesseurs 6809

ED N 1
.:: Oprations de Base ::.
P1 Cration d'une table de donnes
P2 Dnombrement de donnes spcifiques dans une table
P3 Multiplication
P4 Dtermination du maximum ou du minimum d'une table
P5 Transfert d'une table de donnes d'une zone mmoire vers une autre
P6 Dtermination logicielle de la parit croise d'une table de donnes
P7 Tri des donnes d'une table
ED N 2
.:: Oprations Arithmtiques Conversions ::.
P1 Dtection et correction d'erreurs
P2 Table de correspondance hexadcimal dcimal
P3 Conversion DCB binaire
P4 Multiplication
P5 Division
ED N 3
.:: Interface Parallle PIA 6821 Interruptions ::.
Introduction
P1 Etude des Ports Entre / Sortie
P2 Etude des Interruptions
P3 Etude des Lignes de Dialogues

Copyright 19962001, @Pepper's.

Systmes Microprocesseurs 6809

P1 Cration d'une table de donnes


Sujet
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
..:: Cration d'une table de donnes en bits non signs ::..

Boucle

ORG
LDX
LDA
STA
CMPA
BEQ
INCA
BRA
Fin

$0000
#$0100
#$00
,X+
#$FF
Fin

*
*
*
*
*

Dbut du programme
Dbut de table
1ere donnes $00
Chargement et incrmentation du pointeur
Dernire donne = $FF alors fin de programme

* Incrmentation de la donne
Boucle
SWI

Etat de la mmoire aprs excution du programme

0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
01A0
01B0
01C0
01D0
01E0
01F0

00
10
20
30
40
50
60
70
80
90
A0
B0
C0
D0
E0
F0

01
11
21
31
41
51
61
71
81
91
A1
B1
C1
D1
E1
F1

02
12
22
32
42
52
62
72
82
92
A2
B2
C2
D2
E2
F2

03
13
23
33
43
53
63
73
83
93
A3
B3
C3
D3
E3
F3

04
14
24
34
44
54
64
74
84
94
A4
B4
C4
D4
E4
F4

05
15
25
35
45
55
65
75
85
95
A5
B5
C5
D5
E5
F5

06
16
26
36
46
56
66
76
86
96
A6
B6
C6
D6
E6
F6

07
17
27
37
47
57
67
77
87
97
A7
B7
C7
D7
E7
F7

08
18
28
38
48
58
68
78
88
98
A8
B8
C8
D8
E8
F8

09
19
29
39
49
59
69
79
89
99
A9
B9
C9
D9
E9
F9

0A
1A
2A
3A
4A
5A
6A
7A
8A
9A
AA
BA
CA
DA
EA
FA

0B
1B
2B
3B
4B
5B
6B
7B
8B
9B
AB
BB
CB
DB
EB
FB

0C
1C
2C
3C
4C
5C
6C
7C
8C
9C
AC
BC
CC
DC
EC
FC

0D
1D
2D
3D
4D
5D
6D
7D
8D
9D
AD
BD
CD
DD
ED
FD

0E
1E
2E
3E
4E
5E
6E
7E
8E
9E
AE
BE
CE
DE
EE
FE

0F
1F
2F
3F
4F
5F
6F
7F
8F
9F
AF
BF
CF
DF
EF
FF

Question 2
P1 Cration d'une table de donnes

Systmes Microprocesseurs 6809


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
..:: Cration d'une table de donnes en bits signs ::..

ORG
LDX
LDY
LDA
Boucle STA
CMPA
BEQ
DECA
BRA
Positif LDA
Boucle1 STA
CMPA
BEQ
INCA
BRA
Fin

$0000
#$0200
#$0280
#$FF
,X+
#$80
Positif

*
*
*
*
*
*

Dbut du programme
Dbut 1ere donne ngative
Dbut 1ere donne positive
1ere donne ngative $FF
Chargement et incrmentation du pointeur X
Si donne = $80 fin des donnes ngatives

* Dcrmentation de la donne
Boucle
#$00
,Y+
#$7F
Fin

* 1ere donne positive


* Chargement et incrmentation du pointeur Y
* Si donne = $7F fin des donnes positives
* Incrmentation de la donne

Boucle1
SWI

Etat de la mmoire aprs excution du programme

0200
0210
0220
0230
0240
0250
0260
0270
0280
0290
02A0
02B0
02C0
02D0
02E0
02F0

FF
EF
DF
CF
BF
AF
9F
8F
00
10
20
30
40
50
60
70

FE
EE
DE
CE
BE
AE
9E
8E
01
11
21
31
41
51
61
71

FD
ED
DD
CD
BD
AD
9D
8D
02
12
22
32
42
52
62
72

FC
EC
DC
CC
BC
AC
9C
8C
03
13
23
33
43
53
63
73

FB
EB
DB
CB
BB
AB
9B
8B
04
14
24
34
44
54
64
74

FA
EA
DA
CA
BA
AA
9A
8A
05
15
25
35
45
55
65
75

F9
E9
D9
C9
B9
A9
99
89
06
16
26
36
46
56
66
76

F8
E8
D8
C8
B8
A8
98
88
07
17
27
37
47
57
67
77

F7
E7
D7
C7
B7
A7
97
87
08
18
28
38
48
58
68
78

F6
E6
D6
C6
B6
A6
96
86
09
19
29
39
49
59
69
79

F5
E5
D5
C5
B5
A5
95
85
0A
1A
2A
3A
4A
5A
6A
7A

F4
E4
D4
C4
B4
A4
94
84
0B
1B
2B
3B
4B
5B
6B
7B

F3
E3
D3
C3
B3
A3
93
83
0C
1C
2C
3C
4C
5C
6C
7C

F2
E2
D2
C2
B2
A2
92
82
0D
1D
2D
3D
4D
5D
6D
7D

F1
E1
D1
C1
B1
A1
91
81
0E
1E
2E
3E
4E
5E
6E
7E

F0
E0
D0
C0
B0
A0
90
80
0F
1F
2F
3F
4F
5F
6F
7F

Copyright 19962000, @Pepper's.

P1 Cration d'une table de donnes

Systmes Microprocesseurs 6809

P2 Dnombrement de donnes spcifiques dans une


table
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
..:: Tri de donnes positives, ngatives ou nulle ::..

TABLE
EQU
FIN_TAB EQU

$1000
$1009

* Dclaration du dbut de table


* Dclaration du pointeur de fin de table

ORG

$0000

* Dbut du programme

#TABLE
#FIN_TAB+1
FIN
,X+
Negatif
Nul
>$0050

*
*
*
*
*
*
*
*
*

LDX
CMPX
BEQ
LDA
BMI
BEQ
LDB
INCB
STB
BRA
Negatif LDB
INCB
STB
BRA
Nul
LDB
INCB
STB
BRA
FIN
SWI
Boucle

ORG
FCB

>$0050
Boucle
>$0051
>$0051
Boucle
>$0052
>$0052
Boucle

Chargement du pointeur
Si le pointeur dpasse la fin de la table
alors FIN
Chargement et incrmentation du pointeur
Si l'opration est ngative > Ngatif
Si A = 0 > Nul
Sinon la donnes est positive
Incrmente le compteur situ en $0050
On mmorise la valeur

* La donnes est ngative


* Incrmente le compteur situ en $0051
* On mmorise la valeur
* La donnes est nulle
* Incrmente le compteur situ en $0052
* On mmorise la valeur

$1000
* Dbut de la TABLE
1,1,0,5,8,7,0,9,2,6

Etat de la mmoire aprs excution du programme


P2 Dnombrement de donnes spcifiques dans une table

Systmes Microprocesseurs 6809


Rsultats du dnombrement

0050 04 04 02 00 00 00 00 00 00 00 00 00 00 00 00 00

Table des donnes

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
..:: Tri de donnes paires ou impaires ::..

TABLE
EQU
FIN_TAB EQU

Boucle

Pair

FIN

$1000
$1009

* Dclaration du dbut de table


* Dclaration du pointeur de fin de table

ORG
LDX
CMPX
BEQ
LDA
ANDA
CMPA
BEQ
LDB
INCB
STB
BRA
LDB
INCB
STB
BRA
SWI

$0000
#TABLE
#FIN_TAB+1
FIN
,X+
#$11
#$00
Pair
>$0050

*
*
*
*
*
*
*

ORG
FCB

$1000
* Dbut de la TABLE
1,2,3,4,5,6,7,8,9,0

>$0050
Boucle
>$0051
>$0051
Boucle

Dbut du programme
Chargement du pointeur
Si le pointeur dpasse la fin de la table
alors FIN
Chargement et incrmentation du pointeur
ET logique avec $11 pour connatre la parit
Si A = 0 la donne est paire > Pair

* Sinon la donne est impaire


* Incrmentation du compteur
* Mmorisation du compteur
* La donne est paire
* Incrmentation du compteur
* Mmorisation du compteur

Etat de la mmoire aprs excution du programme

P2 Dnombrement de donnes spcifiques dans une table

Systmes Microprocesseurs 6809


Rsultat du dnombrement

0050 05 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Table des donnes

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
..:: Tri de donnes suivant la valeur du bit 3 de la donne ::..

TABLE
EQU
FIN_TAB EQU

Boucle

FIN

$1000
$1009

* Dclaration du dbut de table


* Dclaration du pointeur de fin de table

ORG
LDX
CMPX
BEQ
LDA
ANDA
CMPA
BEQ
LDB
INCB
STB
BRA
SWI

$0000
#TABLE
#FIN_TAB+1
FIN
,X+
#$08
#$00
Boucle
>$0050

*
*
*
*
*
*
*

ORG
FCB

$1000
* Dbut de la TABLE
1,2,3,4,5,6,7,8,9,0

>$0050
Boucle

Dbut du programme
Chargement du pointeur
Si le pointeur dpasse la fin de la table
alors FIN
Chargement et incrmentation du pointeur
ET logique avec $08 pour savoir si bit3=1
Si A = 0 bit3=0 > Boucle

* Sinon bit3=1
* Incrmentation du compteur
* Mmorisation du compteur

Etat de la mmoire aprs excution du programme

Rsultat du dnombrement
P2 Dnombrement de donnes spcifiques dans une table

Systmes Microprocesseurs 6809

0050 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Table des donnes

1000 01 02 03 04 05 06 07 08 09 00 00 00 00 00 00 00

Copyright 19962000, @Pepper's.

P2 Dnombrement de donnes spcifiques dans une table

Systmes Microprocesseurs 6809

P3 Multiplication
Question
Soit le nombre hexadcimal X1=$23.
Mettre au point un programme permettant de trouver le nombre X2 tel que le produit X1*X2 soit strictement infrieur
$0299.
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
..:: Recherche du rsultat 1 d'une division ::..

BOUCLE

RESULT

ORG
LDA
LDB
STB
MUL
CMPD
BHS
LDB
INCB
LDA
BRA
LDB
DECB
SWI

$0000
#$23
#$01
$1000
#$0299
RESULT
>$1000
#$23
BOUCLE
>$1000

*
*
*
*
*
*
*
*
*
*

Dbut du programme
Chargement de la valeur multiplier X1
Chargement de la 1ere valeur
Mise en mmoire de laccumulateur B
Multiplication de A par B
Si A.B est infrieur ou gal $0299
alors RESULT
Recharge de l'accumulateur B
Incrmentation de l'accumulateur B
Recharge de l'accumulateur A

* Recharge de l'accumulateur B
* Dcrmentation de l'accumulateur B

Etat de la mmoire aprs excution du programme


Rsultat en $1000

1000 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Etat du registre B aprs excution du programme

B = 12

C'est le rsultat que l'on cherchait !


Copyright 19962000, @Pepper's.

P3 Multiplication

Systmes Microprocesseurs 6809

P4 Dtermination du maximum ou du minimum d'une


table
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
..:: Tri de donnes MAX et MIN en non sign ::..

MIN
MAX
TABLE

Boucle

Hight

Low

FIN

EQU
EQU
EQU

$0050
$0060
$1200

* Dclaration de l'adresse du MAX


* Dclaration de l'adresse du MIN
* Dclaration du pointeur de fin de table

ORG
LDX
LDA
STA
STA
CMPX
BEQ
LDA
CMPA
BHI
LDA
CMPA
BLO
LDA
BRA
LDA
STA
BRA
LDA
STA
BRA
SWI

$0000
#TABLE
,X+
>MAX
>MIN
#TABLE+10
FIN
,X
>MAX
Hight
,X
>MIN
Low
,X+
Boucle
,X+
>MAX
Boucle
,X+
>MIN
Boucle

*
*
*
*
*
*
*
*
*

ORG
FCB

$1200
* Dbut de la TABLE
2,2,3,4,5,0,7,7,7,7

Dbut du programme
Chargement du pointeur
Chargement et incrmentation du pointeur
Mmorise la 1ere valeur dans MAX
Mmorise la 1ere valeur dans MIN
Si le pointeur dpasse la fin de la table
alors FIN
Chargement et incrmentation du pointeur
Si A > MAX > Hight

* Chargement et incrmentation du pointeur


* Si A < MIN > Low
* Chargement et incrmentation du pointeur
* Chargement et incrmentation du pointeur
* Mmorise la valeur dans MAX
* Chargement et incrmentation du pointeur
* Mmorise la valeur dans MIN

Etat de la mmoire aprs excution du programme


P4 Dtermination du maximum ou du minimum d'une table

Systmes Microprocesseurs 6809

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
..:: Tri de donnes MAX et MIN en sign ::..

MIN
MAX
TABLE

Boucle

EQU
EQU
EQU

$0050
$0060
$1200

* Dclaration de l'adresse du MAX


* Dclaration de l'adresse du MIN
* Dclaration du pointeur de fin de table

ORG
LDX
LDA
STA
STA
CMPX
BEQ
LDA
CMPA

$0000
#TABLE
,X+
>MAX
>MIN
#TABLE+10
FIN
,X
>MAX

*
*
*
*
*
*
*
*
*

Dbut du programme
Chargement du pointeur
Chargement et incrmentation du pointeur
Mmorise la 1ere valeur dans MAX
Mmorise la 1ere valeur dans MIN
Si le pointeur dpasse la fin de la table
alors FIN
Chargement et incrmentation du pointeur
Si A > MAX > Hight

P4 Dtermination du maximum ou du minimum d'une table

10

Systmes Microprocesseurs 6809

Hight

Low

FIN

BGT
LDA
CMPA
BLT
LDA
BRA
LDA
STA
BRA
LDA,X+
STA
BRA
SWI
ORG
FCB

Hight
,X
>MIN
Low
,X+
Boucle
,X+
>MAX
Boucle
>MIN
Boucle

* Chargement et incrmentation du pointeur


* Si A < MIN > Low
* Chargement et incrmentation du pointeur
* Chargement et incrmentation du pointeur
* Mmorise la valeur dans MAX
* Chargement et incrmentation du pointeur
* Mmorise la valeur dans MIN

$1200
* Dbut de la TABLE
2,2,3,4,5,0,7,7,7,7

Etat de la mmoire aprs excution du programme

0050 FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Valeur MIN = FC soit 4

0060 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Valeur MAX = 07 soit 7

Table de donnes

1200 FE 02 03 FC 05 00 07 07 07 07 00 00 00 00 00 00

Copyright 19962000, @Pepper's.

P4 Dtermination du maximum ou du minimum d'une table

11

Systmes Microprocesseurs 6809

P5 Transfert d'une table de donnes d'une zone mmoire


vers une autre
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
..:: Transfert d'une table de 10 donnes de ADR1 > ADR2 ::..

ADR1
ADR2

Boucle

EQU
EQU

$0050
$0060

* Dclaration de l'adresse ADR1


* Dclaration de l'adresse ADR2

ORG
LDX
LDY
LDA
STA
CMPX
BNE
SWI

$0000
#ADR1
#ADR2
,X+
,Y+
#ADR1+10
Boucle

*
*
*
*
*
*

ORG
FCB

$0050
0,1,9,3,4,5,2,7,5,9

Chargement du pointeur X
Chargement du pointeur Y
Chargement et incrmentation du pointeur X
Chargement et incrmentation du pointeur Y
Si le pointeur dpasse la fin de la table
alors FIN

Etat de la mmoire aprs excution du programme

Table l'adresse ADR1

0050 00 01 09 03 04 05 02 07 05 09 00 00 00 00 00 00

Table l'adresse ADR2

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 ::..

TABLE

Boucle

FIN

EQU

$0100

ORG
LDX
LDA
STA
COMA
STA
COMA
INCA
CMPA
BEQ
BRA
SWI

$0000
#TABLE
#$00
,X+
$FF,X

#$0A
FIN
Boucle

* Dclaration de l'adresse de TABLE

*
*
*
*
*
*
*
*
*

Chargement du pointeur X
Initialisation de l'accumulateur A
Mmorisation de A l'adresse pointe par X
Complment 1 de A
Mmorisation de A l'adresse X+$FF
Complment 1 de A > valeur initiale
Incrmentation de la valeur de A
Si A = $0A
alors FIN

Etat de la mmoire aprs excution du programme

Table de donnes en ADR1

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
..:: Addition de ADR1 + ADR2 > ADR3, donnes de 16 bits ::..

ADR1
ADR3

Boucle

EQU
EQU

$0050
$0090

* Dclaration de l'adresse ADR1


* Dclaration de l'adresse ADR3

ORG
LDX
LDY
LDD
ADDD
STD
CMPX
BNE
SWI

$0000
#ADR1
#ADR3
,X++
$1E,X
,Y++
#ADR1+20
Boucle

*
*
*
*
*
*
*

ORG
FCB
FCB

$0050
* Dbut de la ADR1
$00,$00,$00,$01,$10,$13,$52,$30,$56,$89
$21,$54,$14,$25,$01,$25,$87,$28,$45,$78

ORG
FCB
FCB

$0070
* Dbut de la ADR2
$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
$01,$01,$01,$01,$01,$01,$01,$01,$01,$01

Chargement du pointeur X
Chargement du pointeur Y
Chargement de D et incrmentation de 2
Addition de D avec le contenue de X+$1E
Mmorisation de D et incrmentation de 2
Si X = ADR1+20 alors fin de la table
et du programme

Etat de la mmoire aprs excution du programme

Table 1 l'adresse ADR1

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

Table 2 l'adresse ADR2

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

ADR1+ADR2 l'adresse ADR3

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

Copyright 19962000, @Pepper's.

P5 Transfert d'une table de donnes d'une zone mmoire vers une autre

15

Systmes Microprocesseurs 6809

P6 Dtermination logicielle de la parit croise d'une


table de donnes
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
..:: Dtermination logicielle de la parit d'un mot de 8 bits ::..

COMPTEUR
TABLE

DATA

BOUCLE
RETOUR

INCREM
PARITE

EQU
EQU
ORG
LDX
CLRB
CLR
LDA
CMPX
BEQ
LSLA
BCS
CMPA
BEQ
BRA
INC
BRA
LDA

$0080
$00A0

$0000
#TABLE
COMPTEUR
,X+
#TABLE+11
FIN
INCREM
#$00
PARITE
BOUCLE
COMPTEUR
RETOUR
COMPTEUR

* Dclaration de la variable COMPTEUR


* Dclaration de la table TABLE
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Dbut du programme
Chargement du pointeur X
RAZ de B
RAZ de COMPTEUR
Chargement et incrmentation de X
Si on a atteint la fin de la table
alors FIN
Dcalage logique gauche de A
Branchement si Carry = 1
Comparaison de A avec $00
Si A = $00 > PARITE
sinon > BOUCLE
Incrmentation de COMPTEUR
Aller RETOUR
Chargement de A avec COMPTEUR

P6 Dtermination logicielle de la parit croise d'une table de donnes

16

Systmes Microprocesseurs 6809

IMPAIR

FIN

ANDA
CMPA
BNE
BRA
LDA
ORA
STA
CLR
BRA
SWI

#$11
#$00
IMPAIR
DATA
,X
#$80
,X+
COMPTEUR
DATA

*
*
*
*
*
*
*
*
*
*

ET logique entre A et $11 pour dterminer la parit


Comparaison de A avec $00
Si A est diffrent de $00 > IMPAIR
Sinon > DATA
Chargement et incrmentation de X
OU logique entre A et $08
Mmorisation de A et incrmentation pointeur
RAZ COMPTEUR
Retour DATA
Fin du programme

ORG
FCB

$00A0
* Dbut de la table TABLE
'a','b','c','a','b','c','a','b','c','d'

Etat de la mmoire avant excution du programme

Table de donnes

00A0 61 62 63 61 62 63 61 62 63 64 00 00 00 00 00 00

Etat de la mmoire aprs excution du programme

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
..:: Dtermination logicielle de la parit croise d'une table de donnes ::..

P6 Dtermination logicielle de la parit croise d'une table de donnes

17

Systmes Microprocesseurs 6809

COMPTEUR
COMPTEURT
TABLE

EQU
EQU
EQU

ORG
LDX
CLRB
CLR
DATA
LDA
CMPX
BEQ
BOUCLE LSLA
BCS
RETOUR CMPA
BEQ
BRA
INCREM INC
BRA
PARITE LDA
ANDA
CMPA
BNE
BRA
IMPAIR LDA
ORA
STA
INC
CLR
BRA
TRANS
LDA
ANDA
CMPA
BNE
LDA
STA
BRA
IMPAIRT LDA
STA
FIN
SWI
ORG
FCB

$0000
#TABLE

$0080
$0081
$00A0

* Dclaration de la variable COMPTEUR


* Dclaration de la variable COMPTEURT
* Dclaration de la table TABLE

* Dbut du programme
* Chargement du pointeur X
* RAZ de B
COMPTEUR
* RAZ de COMPTEUR
,X+
* Chargement et incrmentation de X
#TABLE+11
* Si on a atteint la fin de la table
TRANS
* alors > TRANS
* Dcalage logique gauche de A
INCREM
* Branchement si Carry = 1
#$00
* Comparaison de A avec $00
PARITE
* Si A = $00 > PARITE
BOUCLE
* Sinon retour BOUCLE
COMPTEUR
* Incrmentation de COMPTEUR
RETOUR
* Retour BOUCLE
COMPTEUR
* Chargement de A avec le contenue de VALEUR
#$11
* ET logique entre A et $11 pour dterminer la parit
#$00
* Comparaison de A avec $00
IMPAIR
* Si A est diffrent de 0 > IMPAIR
DATA
* Sinon retour DATA
,X
* Dcrmentation de X et chargement de A
#$80
* OU logique entre A et $08
,X+
* Mmorisation de A
COMPTEURT
* Incrmentation de COMPTEURT
COMPTEUR
* RAZ de COMPTEUR
DATA
* Retour DATA
COMPTEURT
* Chargement de A avec COMPTEUR
#$11
* ET logique entre A et $11
#$00
* Comparaison entre A et $00
IMPAIRT
* Si A est diffrent de $00 > IMPAIR
#$00
* Chargement de A avec $00
TABLE+10
* Mmorisation de A en TABLE+10
FIN
* > Fin du programme
#$01
* Chargement de la valeur $01 dans A
TABLE+10
* Mmorisation de A en TABLE+10
* Fin du programme
$00A0
* Dbut de la table TABLE
'a','c','a','c','a','a','a','a','a','a'

Etat de la mmoire avant excution du programme

Table de donnes

00A0 61 63 61 63 61 61 61 61 61 61 00 00 00 00 00 00

Etat de la mmoire aprs excution du programme

P6 Dtermination logicielle de la parit croise d'une table de donnes

18

Systmes Microprocesseurs 6809


Donnes + cls de parit

00A0 E1 63 E1 63 E1 E1 E1 E1 E1 E1 01 00 00 00 00 00

NB: Cl de parit longitudinale

Copyright 19962000, @Pepper's.

P6 Dtermination logicielle de la parit croise d'une table de donnes

19

Systmes Microprocesseurs 6809

P7 Tri des donnes d'une table


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
TABLEC
TABLED
COMPTEUR
VALEUR

Copy

Boucle

Data

EQU
EQU
EQU
EQU
EQU
ORG
LDX
LDY
LDA
STA
CMPX
BNE
CLRB
LDB
LDX
LDA
STA
CMPB
BEQ
CLRB
CMPX
BEQ
LDA
CMPA
BLO
BRA

$0080
$00A0
$00C0
$00D0
$00E0

*
*
*
*
*

Dclaration
Dclaration
Dclaration
Dclaration
Dclaration

$0000
#TABLE
#TABLEC
,X+
,Y+
#TABLE+10
Copy

*
*
*
*
*
*
*

Dbut du programme
Chargement du pointeur X
Chargement du pointeur Y
Chargement et incrmentation du pointeur X
Chargement et incrmentation du pointeur Y
Si le pointeur dpasse la fin de la table
alors Copy

COMPTEUR
#TABLEC
B,X
VALEUR
#$0A
FIN

*
*
*
*
*
*
*
*
*
*
*
*
*

Chargement dans B du contenue de COMPTEUR


Chargement du pointeur X
Chargement de A avec le contenue de X+B
Mmorisation de A l'adresse VALEUR
Si B = nombre de donne de la table
alors FIN
RAZ de l'accumulateur B
Si pointeur X est gal fin de table
alors > Mem, mmorisation de la donne
Chargement et incrmentation du pointeur X
Si A est strictement plus petit que VALEUR
alors > Compt
Sinon > Data

#TABLEC+10
Mem
,X+
VALEUR
Compt
Data

P7 Tri des donnes d'une table

de
de
de
de
de

la
la
la
la
la

table TABLE
table TABLEC
table TABLED
variable COMPTEUR
variable VALEUR

20

Systmes Microprocesseurs 6809


Compt
Mem

Egal

FIN

INCB
BRA
LDX
LDA
CMPA
BEQ
LDA
LDX
STA
LDX
LDA
STA
INC
BRA
INCB
LDA
CMPA
BEQ
LDA
LDX
STA
LDX
LDA
STA
INC
BRA
SWI

Data
#TABLED
B,X
#$01
Egal
VALEUR
#TABLE
B,X
#TABLED
#$01
B,X
COMPTEUR
Boucle
B,X
#$01
Egal
VALEUR
#TABLE
B,X
#TABLED
#$01
B,X
COMPTEUR
Boucle

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Incrmentation de B
Retour Data
Chargement du pointeur X
Chargement de A avec le contenue de
Si A = $01
alors pointeur dj utilis > Egal
Chargement de A avec le contenue de
Chargement du pointeur X
Mmorisation de A l'adresse X+B
Chargement du pointeur X
Chargement de A avec $01
Case mmoire utilise > $01
Incrmentation de COMPTEUR
Retour Boucle
Incrmentation de B
Chargement de A avec le contenue de
Si A = $01
alors pointeur dj utilis > Egal
Chargement de A avec le contenue de
Chargement du pointeur X
Mmorisation de A l'adresse X+B
Chargement du pointeur X
Chargement de A avec $01
Case mmoire utilise > $01
Incrmentation de COMPTEUR
Retour Boucle
Fin du programme

X+B

VALEUR

X+B

VALEUR

ORG
$0080
* Dbut de TABLE
FCB 1,6,0,1,1,2,1,4,1,5

Etat de la mmoire avant excution du programme

Table de donnes

0080 01 06 00 01 01 02 01 04 01 05 00 00 00 00 00 00

Etat de la mmoire aprs excution du programme


Table de donnes aprs le tri

0080 00 01 01 01 01 01 02 04 05 06 00 00 00 00 00 00

Copyright 19962000, @Pepper's.

P7 Tri des donnes d'une table

21

Systmes Microprocesseurs 6809

P1 Dtection et correction d'erreurs


Sujet
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
si C = 0 le rsultat non sign est correct sur 8 bits ;
si C = 1 il y a dpassement de capacit sur 8 bits (rsultat correct sur 9 bits avec C = 9me bit du rsultat).
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
si V = 0 le rsultat sign en C2 est correct sur 8 bits ;
si V = 1 dpassement de capacit en C2 sur 8 bits (rsultat correct sur 9 bits avec C = bit de signe).
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
P1 Dtection et correction d'erreurs

22

Systmes Microprocesseurs 6809


retenue C dans l'accumulateur A par le biais de l'instruction ROLA.
Le rsultat corrig est ensuite plac en mmoire par stockage du contenu de D l'adresse $0052.
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

SUITE

FIN

CLRA
LDB
ADDB
BCS
STB
LDB
ADDB
BVS
STB
SWI

$0050
$0051
CORRUNS
$0052
$0050
$0051
CORRSIG
$0054

* Correction de l'addition non signe


CORRUNS ROLA
STD
BRA

$0052
SUITE

* Correction de l'addition signe


CORRSIG RORB
SEX
ROLB
STD
BRA

DATA

ORG
FCB

$0054
FIN
$0050
$BC,$23

Copyright 19962000, @Pepper's.

P1 Dtection et correction d'erreurs

23

Systmes Microprocesseurs 6809

P2 Table de correspondance hexadcimaldcimal


Question 1
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

BOUCLE

CLRA
LDU
LDX
TFR
EXG
STA
CMPX
BEQ
INCA
PSHUA
ANDA
CMPA
PULU
BNE

DAA
BRA
SWI
END

#$0050
#$0100
X,D
A,B
,X+
#$0164
FIN

#$0A
#$0A
A
BOUCLE

BOUCLE

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.
P2 Table de correspondance hexadcimaldcimal

24

Systmes Microprocesseurs 6809

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

ADRESSE EQU
LDX
BOUCLE TFR
CMPB
BHI
NEXT
STB
CMPX
BNE
SWI

$0126
#ADRESSE
X,D
#$09
CORRIGE
,X+
#0164
BOUCLE

* Adresse de base de la table

* Si l'octet de poids faible est > $09 > CORRIGE

* Traitement des dizaines


CORRIGE CMPB
BHI
ADDB
BRA

#$13
CORRIGE1
#$06
NEXT

* Si l'octet de poids faible est > $13 >CORRIGE1


* sinon ajustement dcimal

*Traitement des vingtaines


CORRIGE1
CMPB
BHI
ADDB
BRA

#$1D
CORRIGE2
#$0C
NEXT

* Si l'octet de poids faible est > $1D >CORRIGE2


* sinon double ajustement dcimal

* Traitement des trentaines


CORRIGE2
CMPB
BHI
ADDB
BRA

#$27
CORRIGE3
#$12
NEXT

* Si l'octet de poids faible est > $27 >CORRIGE3


* sinon triple ajustement dcimal

CORRIGE3
CMPB

#$31

P2 Table de correspondance hexadcimaldcimal

25

Systmes Microprocesseurs 6809


BHI
ADDB
BRA

CORRIGE4
#$18
NEXT

CORRIGE4
CMPB
BHI
ADDB
BRA

#$3B
CORRIGE5
#$1E
NEXT

CORRIGE5
CMPB
BHI
ADDB
BRA

#$45
CORRIGE6
#$24
NEXT

CORRIGE6
CMPB
BHI
ADDB
BRA

#$4F
CORRIGE7
#$2A
NEXT

CORRIGE7
CMPB
BHI
ADDB
BRA

#$59
CORRIGE8
#$30
NEXT

CORRIGE8
ADDB
BRA
END

#$36
NEXT

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

ADR

EQU
JSR
LDX
LECTURE LDA
CMPA

$0100
TABLE
#TABLE
,X+
$0060

* Dfinition de l'adresse de base de la table


* Stockage de la table en mmoire
* Lecture de la table

P2 Table de correspondance hexadcimaldcimal

26

Systmes Microprocesseurs 6809


BNE
LEAX

LECTURE
1,X

TFR
STB
SWI

X,D
$0061

* Sous programme de rangement de la table de correspondance en mmoire


TABLE

BOUCLE

FIN

DATA

CLRA
LDU
LDX
TFR
EXG
STA
CMPX
BEQ
INCA
PSHUA
ANDA
CMPA
PULUA
BNE
DAA
BRA
RTS
ORG
FCB
END

#$0050
#ADR
X,D
A,B
,X+
#$0164
FIN

#$0A
#$0A
BOUCLE
BOUCLE

$0060
$23

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.

Copyright 19962000, @Pepper's.

P2 Table de correspondance hexadcimaldcimal

27

Systmes Microprocesseurs 6809

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

A < donne DCB B <0

Compteur < 8

Tant que (Compteur > 0)


Dcalage vers la droite des contenus
combins des registres A et B
Si(a[3]= l) alors
A < A $03
Fin si
Compteur < Compteur l
Fin tant que

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

LDA$
CLRB

0050

P3 Conversion DCBbinaire

* Charge dans A la donne traduire

28

Systmes Microprocesseurs 6809

DECALE

SUITE

DATA

LDX
LSRA
RORB
BITA
BEQ
SUBA
LEAX
BNE
STB
SWI

#$0008

#$08
SUITE
#$03
1,X
DECALE
$0051

*
*
*
*
*
*
*
*
*

L'index X, utilis comme pointeur, est initialis 8


Dcalage droite de A (a[0] > C)
Rotation droite de B (C > b[7])
Test du bit a[3]
Si a[3] = 0 on continue en SUITE
sinon on retranche $03
Dcrmentation du compteur
S'il est non nul on poursuit les dcalages
sinon on stocke le rsultat l'adresse $005l

ORG
FCB

$0050
$28

* Donne DCB traduire

Remarque
Aprs excution, on trouvera la donne $1C l'adresse $0051.

Copyright 19962000, @Pepper's.

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

A < 0

B < multiplicateur

$0050 < multiplicande

Compteur < 8

Tant que (Compteur > 0)


Si (b[0] = 1) alors
A < A + multiplicande
Fin Si
Dcalage vers la droite des contenus
combins des registres A et B
Compteur = Compteur l
Fin Tant que

Remarque
En fin d'excution, le rsultat de la multiplication est situ dans D.
Programme

DEBUT

LDX
CLRA
LDB
BITB
BEQ
ADDA

#$0008

* Compteur

$0051
#$01
DECALE
$0050

*
*
*
*

Le multiplicateur est plac dans B


Test b[0]
Si b[0] = 0 on passe en DECALE
sinon on additionne le multiplicande

* Dcalage droite de AB dans le cas o b[0] = l


RORA
RORB

P4 Multiplication

* Rotation droite de A C > a[7]


*
et a[0] > C
* Rotation droite de B C = a[0] > b[7]

30

Systmes Microprocesseurs 6809


LEAX
BNE
STD
SWI

1,X
DEBUT
$0052

* Dcalage droite de AB dans le cas o b[0] = 0


DECALE

LSRA
RORB
LEAX
BNE
STD

DATA

ORG
FCB
END

* Rotation droite de A 0 > a[7]


*
et a[0] > C
* Rotation droite de B C = a[0] > b[7]
1,X
DEBUT
$0052
$0050
$FF,$48

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
LDB
MUL
STD

$0050
$0051
$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

DEBUT

LDX
CLR
CLR
LDD
STA
STB
BITB
BEQ
LDD
ADDD

#$00l0
$0054
$0055
$0052
$0056
$0057
#$01
DECALE
$0054
$0050

* Initialise le compteur

* Place le multiplicateur en $0056 et $0057


* Teste le bit de poid faible du multiplicateur
* S'il est gal 0 on passe en DECALE
* S'il est 1, on additionne le multiplicande
* au contenu des adresses $0054 et $0055

* Dcalage droite du contenu combin des adresses $0054 $0057


* dans le cas o le bit test est gal 1
RORA
STA
RORB
STB
LDD
RORA
STA
RORB
STB
LEAX
BNE
SWI

* Rotation droite du contenu des adresses $0054 et $0055


* de maniere prendre en compte la retenue issue de l'addition
$0054
$0055
$0056
* Rotation droite du contenu des adresses $0056 et $0057
$0056
$0057
1,X
DEBUT

* Dcalage droite du contenu combin des adresses $0054 $0057


* dans le cas o le bit test est gal 0
DECALE

DATA

LDD
LSRA
STA
RORB
STB
LDD
RORA
STA
RORB
STB
LEAX
BNE

$0054

ORG
FDB
END

$0050
$04FF,$0336

$0054
$0055
$0056
$0056
$0057
1,X
DEBUT

Remarque
A l'issue de l'excution, le rsultat de la multiplication plac de $0054 $0057 est gal $00100ACA.
Copyright 19962000, @Pepper's.

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

A < 0

B < dividende

$0051 < diviseur

Compteur < 8

Tant que (Compteur > 0)


Dcalage gauche des registres
combins A et B
Si (A < diviseur) alors
b[0] < 0
sinon
A < A diviseur
b[0] < 1
Finsi
Compteur < Compteur l
Fin Tant que

En fin d'excution, le quotient est situ dans B et le reste dans A.


Programme

DEBUT

CLRA
LDB
LDX
ASLB

$0050
#$0008

*
*
*
*

Place le dividende dans B


Compteur
Dcalage gauche des
registres A et B

* attention ici il faut commencer par l'octet de poids faible


* afin de faire le report correctement sur l'octet de poids fort
ROLA
CMPA
BLO

P5 Division

$0051
SUITE

* Si A < diviseur > SUITE

33

Systmes Microprocesseurs 6809

SUITE

DATA

SUBA
ORB
LEAX
BNE
STB
STA
SWI

$0051
#$01
1,X
DEBUT
$0052
$0053

ORG
FCB
END

$0050
$FC,$26

* sinon on retranche le diviseur


* et on force b0 l

* Range le quotient en $0052


* Range le reste en $0053

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

BOUCLE

DIVISE

DEBUT

SUITE

DATA

LDY
JSR
STA
CMPB
BNE
SWI
CLRA
LDB
LDX
ASLB
ROLA
CMPA
BLO
SUBA
ORB
LEAX
BNE
STB
RTS

#$0051
DIVISE
,Y+
#$00
BOUCLE

ORG
FCB

$0050
$DC

$0050
#$0008

#$0A
SUITE
#$0A
#$01
1,X
DEBUT
$0050

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
Proposer un programme de division travaillant sur des donnes de 8 bits signes.
On rappelle que l'algorithme de division de nombres signs se prsente sous la forme suivante
Algorithme

M < diviseur

RQ < dividende

Compteur < n

S < R[n1]

Tant que (Compteur > 0)


Dcalage gauche des registres combins R et Q
T < R
Si ( R[n1] = M[n1]) alors
R < RM
sinon
R < R+M
Finsi
Si ( R[n1] = T[n1]) OU ( R = 0 ET Q = 0 ) alors
Q[0] < 1
sinon
Q[0] < 0
R < T (restaure le contenu de R)
Finsi
Compteur < Compteur l
Fin Tant que
Si (S <> M[n1]) alors
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
$0002
$0003
$0004
$0005
$0006

dividende
signe du dividende (S)
diviseur (M)
quotient (Q)
reste (R)
registre temporaire (T)

Programme

NEXT

ORG
LDA
BMI
CLRA
STA
LDB
SEX
STB
STA
LDB
STB

$0020
$0001
SIGNE
$0002
$0001
$0004
$0005
#$08
$000A

* Charge le dividende dans A


* S'il est ngatif on passe en SIGNE
* S'il est positif, on fixe S=$00
*
*
*
*
*
*

Charge le dividende dans B


Etend le signe du dividende dans laccumulateur A
Initialise Q avec le dividende
Initialise R avec le signe du dividende
Initialise le compteur
Compteur plac l'adresse $000A

* Dcalage gauche des registres combins RQ


DEBUT

LDA
ASLA
STA
LDA
ROLA
STA
STA
LDA
BMI
LDA
BMI
BRA

$0004
$0004
$0005
$0005
$0006
$0003
NEGATIF
$0005
ADDITION
SOUSTRAIT

*
*
*
*
*
*

Sauvegarde temporaire
Charge M dans A
S'il est ngatif on passe en NEGATIF
Sil est positif on charge le reste dans R
Si M > 0 et R < 0 an passe en ADDITION
On passe en SOUSTRAIT car M > 0 et R > 0

* Vrification de la condition R[n1] = T[n1]


TEST2

QUN

COMPT

P5 Division

LDA
BMI
LDA
BMI
LDA
ORA
STA
DEC
BNE
LDA
BMI
CLRA
CMPA

$0006
NEGATIF2
$0005
RESTAURE
$0004
#$01
$0004
$000A
DEBUT
$0003
NEG3

*
*
*
*
*

Si T < 0 on passe en NEGATIF2


Si T > 0 on charge R dans A
Si T > 0 et R < 0 on passe en RESTAURE
Cas T > 0 et R > 0
On force Q[0] l

* Dcrmente le compteur
* Tant que compteur > 0 on retourne en DEBUT
* Si M < 0 on passe en NEG3
* Cas M > 0 : on teste ta condition M[n1] = S

$0002

36

Systmes Microprocesseurs 6809


BEQ
COMPLEM LDA
NEGA
STA
FIN
SWI

FIN
$0004

* Si M[n1] = S on passe en FIN


* Cas M[n1] <> S, on prend le C2 du quotient

$0004

* Lorsque le dividende est ngatif, on fixe S = $01


SIGNE

LDA
STA
BRA
SWI

#$01
$0002
NEXT

* Cas M < 0, tude du signe de R


NEGATIF LDA
BMI
BRA
SWI
ADDITION
ADDA
STA
BEQ
BRA
SWI
SOUSTRAIT
SUBA
STA
BEQ
BRA
SWI

$0005
SOUSTRAIT
ADDITION

* Si R < 0 on passe en SOUSTRAIT


* Cas R > 0 on passe en ADDITION

$0003
$0005
TEST
TEST2

* Si R = 0 on passe en TEST
* Cas R <> 0, on passe en TEST2

$0003
$0005
TEST
TEST2

* Si R = 0 on passe en TEST
* Cas R <> 0, on passe en TEST2

* Cas R = 0, teste si Q = 0
TEST

LDA
BEQ
BRA
SWI

$0004
QUN
TEST2

* Si Q = 0 on passe en QUN
* Cas Q <> 0, on passe en TEST2

* Cas T < 0. tude du signe de R


NEGATIF2
LDA
BMI
BRA
SWI

$0005
QUN
RESTAURE

* Si R < 0 on passe en QUN


* Cas R > 0, on passe en RESTAURE

RESTAURE
LDA
STA
BRA
SWI

$0006
$0005
COMPT

* Cas M < 0, teste la condition M[n1] = S


NEG3

LDA
CMPA
BEQ
BRA
SWI

ORG
DIVIDENDE

P5 Division

#$01
$0002
FIN
COMPLEM

* Si M[n1] = S on passe en FIN


* Cas M[n1] <> S, on passe en COMPLEM

$0001

37

Systmes Microprocesseurs 6809


FCB

$8F

ORG

$0003

DIVISEUR
FCB

$FD

END

Copyright 19962000, @Pepper's.

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 :

CB2
X
O

B7....B0
XXXXXXXX
OOOOOOOO
Port B

CB1
X
O

CA2
X
O

CA1
X
O

Interrupteurs
|
|
\
\...\
|
|
X
X

MasseSortie
X

5V
X

|
X

A7....A0
XXXXXXXX
OOOOOOOO
Port A
CB2
X

CB1
X

[Cble Limande]
Vers le P

NB: X > fiches femelles et O > leds


Les leds permettent de visualiser l'tat des diverses lignes.
Les interrupteurs, munis d'antirebond, sont relis des fiches femelles et permettent d'imposer un niveau logique 0
ou 1 sur ces fiches.
La masse du microprocesseur est ramene sur la fiche Masse de la platine d'tude !
Copyright 19962000, @Pepper's.

Introduction

39

Systmes Microprocesseurs 6809

P1 Etude des Ports Entre / Sortie


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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

ORG
CLRA
STA
STA
LDA
STA
LDA
STA
SWI

$0000

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

*
*
*
*
*
*
*
*

CRA
DDRA
#$04
CRA
ORA
$0100

Effacement de A
Stock A dans CRA pour demande d'accs DDRA
Dclaration du port A en entre
|
| Demande d'accs ORA
Chargement du registre ORA
Stockage de la valeur l'adresse $0100
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

Rptition du pas I1

Question 1 :
P1 Etude des Ports Entre / Sortie

40

Systmes Microprocesseurs 6809


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.
Remarque : la broche 0 V du moteur doit tre relie la masse du microprocesseur.
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.
Soit 24 x 4 x 3,75 = 360
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.

Calcul de la vitesse 1MHz


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
..:: Sens Antihoraire ::..

DDRB
ORB
CRB

EQU
EQU
EQU

$8002
$8002
$8003

*|
*| Dfinition des adresses de port DDRB, ORB, CRB
*|

ORG

$0000

* Dbut du programme l'adresse $0000

* INITIALISATION DU PIA

DEBUT
L1

CLRA
STA
LDA
STA
LDA
STA
CLRB
LDY
LDA

CRB
#$FF
DDRB
#$04
CRB
#DATA
,Y+

P1 Etude des Ports Entre / Sortie

*
*
*
*
*
*
*
*
*

Effacement du registre A
Stock A dans CRB pour demande d'accs DDRB
|
| Dclaration du port B en sortie
|
| Demande d'accs ORB
RAZ du registre B qui va compter le NB de squence
Chargement de l'adresse de dbut des donnes
Chargement de la donne.

41

Systmes Microprocesseurs 6809


STA
JSR
CMPY
BNE
INCB
CMPB
BNE
SWI

ORB
TEMPO
#DATA+4
L1

*
*
*
*
*
*
*
*

#25
DEBUT

Envoi du mot de commande


Appel du sousprogramme TEMPO
Compare Y l'adresse de Fin des donnes
Si pas gal on boucle sur L1
Sinon, Incrmente B
Compare B la valeur 25
Si pas gale on boucle sur DEBUT
Sinon, Fin du programme.

* DONNEES POUR UNE ROTATION AU PAS DE 3.75

DATA

ORG
FCB

$0200
$03,$06,$0C,$09

* SOUSPROGRAMME TEMPO

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
Sinon > Retour au programme appelant.

Programme
..:: Sens horaire ::..
Pour la rotation en sens inverse on changera seulement la squence des donnes pour la rotation

DATA

FCB

$09, $0C, $06, $03

Copyright 19962000, @Pepper's.

P1 Etude des Ports Entre / Sortie

42

Systmes Microprocesseurs 6809

P2 Etude des Interruptions


Sujet 1
..:: Programme chenillard ::..
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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme

* INITIALISATION DU PIA
CLRA
STA
LDA
STA
LDA
STA

CRA
#$FF
DDRA
#$04
CRA

*
*
*
*
*
*

Effacement de A
Stock A dans CRA pour accs DDRA
|
| Place le port A en sortie.
|
| Demande d'accs ORA

*
*
*
*
*
*
*

Chargement de l'adresse de dbut des donnes


Chargement des donnes
Stockage de A sur les sorties ORA
Temporisation
Compare Y a l'adresse de fin des donnes
Si pas gale > boucle sur L1
Sinon > boucle sur DEBUT

* PROGRAMME PRINCIPAL
DEBUT
L1

LDY
LDA
STA
JSR
CMPY
BNE
BRA

#DATA
,Y+
ORA
TEMPO
#DATA+8
L1
DEBUT

* DONNEES pour un dfilement de b0 b7.

DATA

ORG
FCB

$0200
$01,$02,$04,$08,$10,$20,$40,$80

* Sous Programme TEMPO

P2 Etude des Interruptions

43

Systmes Microprocesseurs 6809

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
Sinon > Retour au programme appelant.

Question 2
..:: Interruption par test d'tat ::..
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
dfilement normal du chenillard A0, A1,......., A7 ;
test d'tat du registre CRA ;
s'il n'y a pas eu de demande d'interruption, poursuite du dfilement normal du chenillard avec nouveau test
d'tat aprs l'allumage de A7 ;
s'il y a eu demande d'interruption, extinction pendant 5 s environ de toutes les lampes du port A (sous
programme d'interruption) puis reprise du dfilement du chenillard.
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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme l'adresse $0000

* INITIALISATION DU PIA
CLRA
STA
LDA
STA

CRA
#$FF
DDRA

P2 Etude des Interruptions

*
*
*
*

Effacement de A
Stock A dans CRA pour accs DDRA
|
| Place le port A en sortie.

44

Systmes Microprocesseurs 6809


LDA
STA

#$06
CRA

* | Demande d'accs ORA et validation des


* | interruptions.

* PROGRAMME PRINCIPAL
DEBUT
L1

LDY
LDA
STA
JSR
CMPY
BNE
LDA
ANDA
CMPA
BEQ

#DATA
,Y+
ORA
TEMPO
#DATA+8
L1
CRA
#$80
#$00
DEBUT

*
*
*
*
*
*
*
*
*
*

Chargement de l'adresse de dbut des donnes


Chargement des donnes
Stockage de A sur les sorties ORA
Temporisation
Compare Y a l'adresse de fin des donnes
Si pas gale > boucle sur L1
Chargement du registre d'tat CRA
Masque pour rcuprer le bit b7 de CRA
Compare 0
Si pas d'interruption, boucle sur DEBUT , sinon

* SOUS PROGRAMME D'INTERRUPTION.


CLRA
STA
LDA
JSR
DECA
BNE
LDA
BRA

L2

ORA
#$08
TEMPO
L2
ORA
DEBUT

* |
* | Extinction des sorties
*
*
*
*
*

Appel du sous programme TEMPO


Dcrmente A de 1
Si A n'est pas nul on boucle sur L2
Sinon, lecture de ORA pour RAZ du bit b7 de CRA
Sinon > boucle sur DEBUT

* DONNEES

DATA

ORG
FCB

$0200
$01,$02,$04,$08,$10,$20,$40,$80

* Sous Programme TEMPO

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
Sinon > Retour au programme appelant.

Question 3
..:: Interruption vectorise ::..
Modifier le programme du chenillard de sorte qu'il soit susceptible d'tre interrompu par une interruption vectorise et
de raliser les squences suivantes
dfilement normal du chenillard ;
demande d'interruption vectorise dclenche par front montant sur CA2 ralis manuellement comme
prcdemment ;
excution, le cas chant, du programme d'interruption qui consiste allumer toutes les lampes du port A
durant 5s environ, puis retour au programme principal.
Tester le programme et conclure.
P2 Etude des Interruptions

45

Systmes Microprocesseurs 6809


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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme l'adresse $0000

* INITIALISATION DU PIA
CLRA
STA
LDA
STA
LDA
STA
LDY
STY
ANDCC

*
*
*
*
*
*
*
*
*

Effacement de A
Stock A dans CRA pour accs DDRA
|
| Place le port A en sortie.
| Demande d'accs ORA et validation des
| interruptions sur front montant.
| Chargement de l'adresse du sous programme
| d'interruption.
Forage du bit b4 du CCR 0

*
*
*
*
*
*
*

Chargement de l'adresse de dbut des donnes


Chargement des donnes
Stockage de A sur les sorties ORA
Temporisation
Compare Y a l'adresse de fin des donnes
Si pas gale > boucle sur L1
Retour DEBUT

CRA
#$FF
DDRA
#$1C
CRA
#INTVECT
$3FF8
#$EF

* PROGRAMME PRINCIPAL
DEBUT
L1

LDY
LDA
STA
JSR
CMPY
BNE
BRA

#DATA
,Y+
ORA
TEMPO
#DATA+8
L1
DEBUT

* SOUS PROGRAMME D'INTERRUPTION.


ORG
INTVECT LDA
STA
LDA
L2
JSR
DECA
BNE
LDA
RTI

$0150
#$FF
ORA
#$08
TEMPO
L2
ORA

P2 Etude des Interruptions

*
*
*
*
*
*
*
*

|
| Allumage des sorties
Temporisation de 5S
Appel du sous programme TEMPO
Dcrmente A de 1
Si A n'est pas nul on boucle sur L2
Sinon, lecture de ORA pour RAZ du bit b7 de CRA
Retour au programme principal

46

Systmes Microprocesseurs 6809


* DONNEES

DATA

ORG
FCB

$0200
$01,$02,$04,$08,$10,$20,$40,$80

* Sous Programme TEMPO

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
Sinon > Retour au programme appelant.

Programme Global
..:: Interruption vectorise + Interruption d'tat ::..

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme l'adresse $0000

* INITIALISATION DU PIA
CLRA
STA
LDA
STA
LDA
STA
LDY
STY
ANDCC

CRA
#$FF
DDRA
#$1E
CRA
#INTVECT
$3FF8
#$EF

*
*
*
*
*
*
*
*
*

Effacement de A
Stock A dans CRA pour accs DDRA
|
| Place le port A en sortie.
| Demande d'accs ORA et validation des
| interruptions.
| Chargement de l'adresse du sous programme
| d'interruption.
Forage du bit b4 du CCR 0

*
*
*
*
*
*
*
*
*
*

Chargement de l'adresse de dbut des donnes


Chargement des donnes
Stockage de A sur les sorties ORA
Temporisation
Compare Y a l'adresse de fin des donnes
Si pas gale > boucle sur L1
Chargement du registre d'tat CRA
Masque pour rcuprer le bit b7 de CRA
Compare 0
Si pas d'interruption, boucle sur DEBUT , sinon

* PROGRAMME PRINCIPAL
DEBUT
L1

LDY
LDA
STA
JSR
CMPY
BNE
LDA
ANDA
CMPA
BEQ

#DATA
,Y+
ORA
TEMPO
#DATA+8
L1
CRA
#$80
#$00
DEBUT

* SOUS PROGRAMME D'INTERRUPTION par TEST D'ETAT


CLRA
STA
LDA

ORA
#$08

P2 Etude des Interruptions

* |
* | Extinction des sorties
* Temporisation de 5s

47

Systmes Microprocesseurs 6809


L2

JSR
DECA
BNE
LDA
BRA

TEMPO
L2
ORA
DEBUT

*
*
*
*
*

Appel du sous programme TEMPO


Dcrmente A de 1
Si A n'est pas nul on boucle sur L2
Sinon, lecture de ORA pour RAZ du bit b7 de CRA
Sinon > boucle sur DEBUT

* SOUS PROGRAMME D'INTERRUPTION VECTORISEE


ORG
INTVECT LDA
STA
LDB
L3
JSR
DECB
BNE
LDA
RTI

$0150
#$FF
ORA
#$08
TEMPO
L3
ORA

*
*
*
*
*
*
*
*

|
| Allumage des sorties
Temporisation de 5S
Appel du sous programme TEMPO
Dcrmente B de 1
Si B n'est pas nul on boucle sur L3
Sinon, lecture de ORA pour RAZ du bit b7 de CRA
Sinon > Retour au programme principal.

* DONNEES

DATA

ORG
FCB

$0200
$01,$02,$04,$08,$10,$20,$40,$80

* Sous Programme TEMPO

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
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.

Copyright 19962000, @Pepper's.

P2 Etude des Interruptions

48

Systmes Microprocesseurs 6809

P3 Etude des Lignes de Dialogues


Question 1
..:: Mode programm (SetReset) ::..
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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme

* PROGRAMME PRINCIPAL
DEBUT

LDA
STA
JSR
LDA
STA
JSR
BRA

#$38
CRA
TEMPO
#$30
CRA
TEMPO
DEBUT

*
*
*
*
*
*
*

|
| Allumage de la LED
Temporisation
|
| Extinction de la LED
Temporisation
Retour au DEBUT du programme.

*
*
*
*

Chargement de X par $FFFF


X=X1
Si X<>0 > boucle sur T2
Sinon > Retour au programme appelant.

* Sous Programme TEMPO

TEMPO
T2

ORG
LDX
LEA
BNE
RTS

$0250
#$FFFF
X,X
T2

Question 2
..:: Mode impulsion (Pulse Strobe) ::..
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
P3 Etude des Lignes de Dialogues

49

Systmes Microprocesseurs 6809


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.
La squence de conversion est la suivante :

CONVERT _____

_________
|_|

___
|_|

1
______
_____
_____|
|____|
<20ms>
2
____
DONNEES ____________/
\_____
VALIDE
\____/
STATUS

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

______________
______________
________
|
D7|/_______\|
|/_______\|
|
>|I/P
D0|\
/|PortA
|\
1
/|
|
|
|
|
|
|
|
| ADCONVERTER |
|
PIA
|/_______\|
P
|
|
|
|
|\
2
/|
|
|
|
|
|
|
|
|
CONVERT|< CA2 |
|/_______\|
|
|
STATUS| CA1 >|
|\
3
/|
|
|______________|
|______________|
|________|

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.
P3 Etude des Lignes de Dialogues

50

Systmes Microprocesseurs 6809


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

DDRA
ORA
CRA

EQU
EQU
EQU

$8000
$8000
$8001

*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|

ORG

$0000

* Dbut du programme

* PROGRAMME PRINCIPAL
CLRA
STA
STA
CONVERT LDA
STA
ETAT
LDA
ANDA
BEQ
LDA
STA
SWI

CRA
DDRA
#$3C
CRA
CRA
#$80
ETAT
ORA
>$0100

*
*
*
*
*
*
*
*
*
*

|
| Demande daccs DDRA
| Configuration du port A en entre
|
| Chargement du mot de commande dans CRA.
Chargement du registre d'tat CRA
Masquage du bit b7
Si pas d'interruption > boucle sur ETAT
sinon > Conversion termine => Lecture conversion
Stockage de la conversion l'adresse $0100

Copyright 19962000, @Pepper's.

P3 Etude des Lignes de Dialogues

51

Vous aimerez peut-être aussi