Académique Documents
Professionnel Documents
Culture Documents
Systemes A Microprocesseurs 6809
Systemes A 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
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
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
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
Boucle1
SWI
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
TABLE
EQU
FIN_TAB EQU
$1000
$1009
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
$1000
* Dbut de la TABLE
1,1,0,5,8,7,0,9,2,6
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
..:: Tri de donnes paires ou impaires ::..
TABLE
EQU
FIN_TAB EQU
Boucle
Pair
FIN
$1000
$1009
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
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
..:: Tri de donnes suivant la valeur du bit 3 de la donne ::..
TABLE
EQU
FIN_TAB EQU
Boucle
FIN
$1000
$1009
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
Rsultat du dnombrement
P2 Dnombrement de donnes spcifiques dans une table
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
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
1000 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
B = 12
P3 Multiplication
MIN
MAX
TABLE
Boucle
Hight
Low
FIN
EQU
EQU
EQU
$0050
$0060
$1200
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
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
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
10
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
$1200
* Dbut de la TABLE
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
11
ADR1
ADR2
Boucle
EQU
EQU
$0050
$0060
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
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
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
*
*
*
*
*
*
*
*
*
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
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
ADR1
ADR3
Boucle
EQU
EQU
$0050
$0090
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
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
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
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
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
16
IMPAIR
FIN
ANDA
CMPA
BNE
BRA
LDA
ORA
STA
CLR
BRA
SWI
#$11
#$00
IMPAIR
DATA
,X
#$80
,X+
COMPTEUR
DATA
*
*
*
*
*
*
*
*
*
*
ORG
FCB
$00A0
* Dbut de la table TABLE
'a','b','c','a','b','c','a','b','c','d'
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
..:: Dtermination logicielle de la parit croise d'une table de donnes ::..
17
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
* 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'
Table de donnes
00A0 61 63 61 63 61 61 61 61 61 61 00 00 00 00 00 00
18
00A0 E1 63 E1 63 E1 E1 E1 E1 E1 E1 01 00 00 00 00 00
19
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
*
*
*
*
*
*
*
*
*
*
*
*
*
#TABLEC+10
Mem
,X+
VALEUR
Compt
Data
de
de
de
de
de
la
la
la
la
la
table TABLE
table TABLEC
table TABLED
variable COMPTEUR
variable VALEUR
20
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
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
21
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
SUITE
FIN
CLRA
LDB
ADDB
BCS
STB
LDB
ADDB
BVS
STB
SWI
$0050
$0051
CORRUNS
$0052
$0050
$0051
CORRSIG
$0054
$0052
SUITE
DATA
ORG
FCB
$0054
FIN
$0050
$BC,$23
23
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
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
#$13
CORRIGE1
#$06
NEXT
#$1D
CORRIGE2
#$0C
NEXT
#$27
CORRIGE3
#$12
NEXT
CORRIGE3
CMPB
#$31
25
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
26
LECTURE
1,X
TFR
STB
SWI
X,D
$0061
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.
27
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
Compteur < 8
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
28
DECALE
SUITE
DATA
LDX
LSRA
RORB
BITA
BEQ
SUBA
LEAX
BNE
STB
SWI
#$0008
#$08
SUITE
#$03
1,X
DECALE
$0051
*
*
*
*
*
*
*
*
*
ORG
FCB
$0050
$28
Remarque
Aprs excution, on trouvera la donne $1C l'adresse $0051.
P3 Conversion DCBbinaire
29
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
Compteur < 8
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
*
*
*
*
P4 Multiplication
30
1,X
DEBUT
$0052
LSRA
RORB
LEAX
BNE
STD
DATA
ORG
FCB
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
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
DEBUT
LDX
CLR
CLR
LDD
STA
STB
BITB
BEQ
LDD
ADDD
#$00l0
$0054
$0055
$0052
$0056
$0057
#$01
DECALE
$0054
$0050
* Initialise le compteur
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
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
Compteur < 8
DEBUT
CLRA
LDB
LDX
ASLB
$0050
#$0008
*
*
*
*
P5 Division
$0051
SUITE
33
SUITE
DATA
SUBA
ORB
LEAX
BNE
STB
STA
SWI
$0051
#$01
1,X
DEBUT
$0052
$0053
ORG
FCB
END
$0050
$FC,$26
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
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]
Dans le programme propose cidessous, les cases mmoire utilises se prsentent comme suit :
P5 Division
35
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
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
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
*
*
*
*
*
* 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
FIN
$0004
$0004
LDA
STA
BRA
SWI
#$01
$0002
NEXT
$0005
SOUSTRAIT
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
$0005
QUN
RESTAURE
RESTAURE
LDA
STA
BRA
SWI
$0006
$0005
COMPT
LDA
CMPA
BEQ
BRA
SWI
ORG
DIVIDENDE
P5 Division
#$01
$0002
FIN
COMPLEM
$0001
37
$8F
ORG
$0003
DIVISEUR
FCB
$FD
END
P5 Division
38
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
Introduction
39
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
DDRB
ORB
CRB
EQU
EQU
EQU
$8002
$8002
$8003
*|
*| Dfinition des adresses de port DDRB, ORB, CRB
*|
ORG
$0000
* INITIALISATION DU PIA
DEBUT
L1
CLRA
STA
LDA
STA
LDA
STA
CLRB
LDY
LDA
CRB
#$FF
DDRB
#$04
CRB
#DATA
,Y+
*
*
*
*
*
*
*
*
*
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
ORB
TEMPO
#DATA+4
L1
*
*
*
*
*
*
*
*
#25
DEBUT
DATA
ORG
FCB
$0200
$03,$06,$0C,$09
* SOUSPROGRAMME TEMPO
TEMPO
T2
ORG
LDX
LEA
BNE
RTS
$0250
#$FFFF
X,X
T2
*
*
*
*
Programme
..:: Sens horaire ::..
Pour la rotation en sens inverse on changera seulement la squence des donnes pour la rotation
DATA
FCB
42
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
*
*
*
*
*
*
*
* PROGRAMME PRINCIPAL
DEBUT
L1
LDY
LDA
STA
JSR
CMPY
BNE
BRA
#DATA
,Y+
ORA
TEMPO
#DATA+8
L1
DEBUT
DATA
ORG
FCB
$0200
$01,$02,$04,$08,$10,$20,$40,$80
43
TEMPO
T2
ORG
LDX
LEA
BNE
RTS
$0250
#$FFFF
X,X
T2
*
*
*
*
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
* INITIALISATION DU PIA
CLRA
STA
LDA
STA
CRA
#$FF
DDRA
*
*
*
*
Effacement de A
Stock A dans CRA pour accs DDRA
|
| Place le port A en sortie.
44
#$06
CRA
* 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
*
*
*
*
*
*
*
*
*
*
L2
ORA
#$08
TEMPO
L2
ORA
DEBUT
* |
* | Extinction des sorties
*
*
*
*
*
* DONNEES
DATA
ORG
FCB
$0200
$01,$02,$04,$08,$10,$20,$40,$80
TEMPO
T2
ORG
LDX
LEA
BNE
RTS
$0250
#$FFFF
X,X
T2
*
*
*
*
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
DDRA
ORA
CRA
EQU
EQU
EQU
$8000
$8000
$8001
*|
*| Dfinition des adresses de port DDRA, ORA, CRA
*|
ORG
$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
*
*
*
*
*
*
*
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
$0150
#$FF
ORA
#$08
TEMPO
L2
ORA
*
*
*
*
*
*
*
*
|
| 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
DATA
ORG
FCB
$0200
$01,$02,$04,$08,$10,$20,$40,$80
TEMPO
T2
ORG
LDX
LEA
BNE
RTS
$0250
#$FFFF
X,X
T2
*
*
*
*
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
* 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
*
*
*
*
*
*
*
*
*
*
* 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
ORA
#$08
* |
* | Extinction des sorties
* Temporisation de 5s
47
JSR
DECA
BNE
LDA
BRA
TEMPO
L2
ORA
DEBUT
*
*
*
*
*
$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
TEMPO
T2
ORG
LDX
LEA
BNE
RTS
$0250
#$FFFF
X,X
T2
*
*
*
*
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.
48
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.
*
*
*
*
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
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
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
51