Exercices Assembleur MEHDI

download Exercices Assembleur MEHDI

of 52

Transcript of Exercices Assembleur MEHDI

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.

1

Systmes Microprocesseurs 6809

P1 Cration d'une table de donnesSujet 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 Boucle SWI

* * * * *

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

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 2

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 Boucle #$00 ,Y+ #$7F Fin Boucle1 SWI

* * * * * *

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 * 1ere donne positive * Chargement et incrmentation du pointeur Y * Si donne = $7F fin des donnes positives * Incrmentation de la donne

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

3

Systmes Microprocesseurs 6809

P2 Dnombrement de donnes spcifiques dans une tableSujet 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 ORG 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

$1000 $1009 $0000 #TABLE #FIN_TAB+1 FIN ,X+ Negatif Nul >$0050 >$0050 Boucle >$0051 >$0051 Boucle >$0052 >$0052 Boucle

* Dclaration du dbut de table * Dclaration du pointeur de fin de table * Dbut du programme * * * * * * * * * 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 4

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 ORG LDX CMPX BEQ LDA ANDA CMPA BEQ LDB INCB STB BRA LDB INCB STB BRA SWI ORG FCB

$1000 $1009 $0000 #TABLE #FIN_TAB+1 FIN ,X+ #$11 #$00 Pair >$0050 >$0050 Boucle >$0051 >$0051 Boucle

* Dclaration du dbut de table * Dclaration du pointeur de fin de table * * * * * * * 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

Boucle

* Sinon la donne est impaire * Incrmentation du compteur * Mmorisation du compteur * La donne est paire * Incrmentation du compteur * Mmorisation du compteur

Pair

FIN

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

Etat de la mmoire aprs excution du programme

P2 Dnombrement de donnes spcifiques dans une table

5

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 ORG LDX CMPX BEQ LDA ANDA CMPA BEQ LDB INCB STB BRA SWI ORG FCB

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

* Dclaration du dbut de table * Dclaration du pointeur de fin de table * * * * * * * 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

Boucle

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

FIN

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

Etat de la mmoire aprs excution du programme

Rsultat du dnombrement P2 Dnombrement de donnes spcifiques dans une table 6

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

7

Systmes Microprocesseurs 6809

P3 MultiplicationQuestion 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

8

Systmes Microprocesseurs 6809

P4 Dtermination du maximum ou du minimum d'une tableQuestion 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

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

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

* Dclaration de l'adresse du MAX * Dclaration de l'adresse du MIN * Dclaration du pointeur de fin de table * * * * * * * * * 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

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

Hight

Low

FIN

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

Etat de la mmoire aprs excution du programme P4 Dtermination du maximum ou du minimum d'une table 9

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

EQU EQU EQU ORG LDX LDA STA STA CMPX BEQ LDA CMPA

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

* Dclaration de l'adresse du MAX * Dclaration de l'adresse du MIN * Dclaration du pointeur de fin de table * * * * * * * * * 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

Boucle

P4 Dtermination du maximum ou du minimum d'une table

10

Systmes Microprocesseurs 6809BGT 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

Hight

Low

FIN

$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 autreQuestion 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

EQU EQU ORG LDX LDY LDA STA CMPX BNE SWI ORG FCB

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

* Dclaration de l'adresse ADR1 * Dclaration de l'adresse ADR2

Boucle

* * * * * *

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 0,1,9,3,4,5,2,7,5,9

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

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

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

* Dclaration de l'adresse de TABLE

Boucle

#$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

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

EQU EQU ORG LDX LDY LDD ADDD STD CMPX BNE SWI ORG FCB FCB ORG FCB FCB

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

* Dclaration de l'adresse ADR1 * Dclaration de l'adresse ADR3

Boucle

* * * * * * *

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 * Dbut de la ADR1 $00,$00,$00,$01,$10,$13,$52,$30,$56,$89 $21,$54,$14,$25,$01,$25,$87,$28,$45,$78 $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

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 68090080 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 donnesQuestion 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 ORG LDX CLRB CLR LDA CMPX BEQ LSLA BCS CMPA BEQ BRA INC BRA LDA

EQU EQU $0000 #TABLE

$0080 $00A0

* 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

DATA

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

BOUCLE RETOUR

INCREM PARITE

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

16

Systmes Microprocesseurs 6809ANDA CMPA BNE BRA LDA ORA STA CLR BRA SWI ORG FCB #$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

IMPAIR

FIN

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

EQU EQU EQU $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 tableQuestion 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 ORG LDX LDY LDA STA CMPX BNE CLRB LDB LDX LDA STA CMPB BEQ CLRB CMPX BEQ LDA CMPA BLO BRA

EQU EQU EQU EQU EQU

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

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

Dclaration Dclaration Dclaration Dclaration Dclaration

de de de de de

la la la la la

table TABLE table TABLEC table TABLED variable COMPTEUR variable VALEUR

Copy

$0000 #TABLE #TABLEC ,X+ ,Y+ #TABLE+10 Copy COMPTEUR #TABLEC B,X VALEUR #$0A FIN #TABLEC+10 Mem ,X+ VALEUR Compt Data

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

Boucle

Data

P7 Tri des donnes d'une table

20

Systmes Microprocesseurs 6809Compt Mem 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 * * * * * * * * * * * * * * * * * * * * * * * * * * * 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

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

X+B

VALEUR

Egal

X+B

VALEUR

FIN

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'erreursSujet 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 ORG FCB

$0054 FIN $0050 $BC,$23

DATA

Copyright 19962000, @Pepper's.

P1 Dtection et correction d'erreurs

23

Systmes Microprocesseurs 6809

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

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

#$0A #$0A A BOUCLE

DAA BRA SWI END

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 CORRIGE3 CMPB #$31 #$27 CORRIGE3 #$12 NEXT * Si l'octet de poids faible est > $27 >CORRIGE3 * sinon triple ajustement dcimal

P2 Table de correspondance hexadcimaldcimal

25

Systmes Microprocesseurs 6809BHI ADDB BRA CORRIGE4 CMPB BHI ADDB BRA CORRIGE5 CMPB BHI ADDB BRA CORRIGE6 CMPB BHI ADDB BRA CORRIGE7 CMPB BHI ADDB BRA CORRIGE8 ADDB BRA END #$36 NEXT #$59 CORRIGE8 #$30 NEXT #$4F CORRIGE7 #$2A NEXT #$45 CORRIGE6 #$24 NEXT #$3B CORRIGE5 #$1E NEXT CORRIGE4 #$18 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 6809BNE LEAX TFR STB SWI LECTURE 1,X X,D $0061

* Sous programme de rangement de la table de correspondance en mmoire TABLE CLRA LDU LDX TFR EXG STA CMPX BEQ INCA PSHUA ANDA CMPA PULUA BNE DAA BRA RTS ORG FCB END

BOUCLE

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

#$0A #$0A BOUCLE BOUCLE

FIN

DATA

$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 DCBbinaireQuestion 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 SUITE

P5 Division

33

Systmes Microprocesseurs 6809SUBA ORB LEAX BNE STB STA SWI ORG FCB END $0051 #$01 1,X DEBUT $0052 $0053 * sinon on retranche le diviseur * et on force b0 l

SUITE

* Range le quotient en $0052 * Range le reste en $0053

DATA

$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

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

#$0051 DIVISE ,Y+ #$00 BOUCLE

$0050 #$0008

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

DATA

$0050 $DC

Remarque P5 Division 34

Systmes Microprocesseurs 6809 La donne binaire $DC = 1101 1100 doit tre traduite en BCD par 0010 0010 000 (soit $0220 en hexadcimal). A l'issue de l'excution de ce programme, on trouve en fait $00, $02, $02 aux adresses $0051, $0052 et $0053 ce qui traduit le fait que les restes sont ici calculs sur 8 bits. Ainsi, le rsultat souhait est obtenu en examinant les 4 bits de poids faibles de ces trois donnes.

Question 3 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 0, on passe en RESTAURE

* Cas M < 0, teste la condition M[n1] = S NEG3 LDA CMPA BEQ BRA SWI #$01 $0002 FIN COMPLEM

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

ORG DIVIDENDE

$0001

P5 Division

37

Systmes Microprocesseurs 6809FCB ORG DIVISEUR FCB END $FD $8F $0003

Copyright 19962000, @Pepper's.

P5 Division

38

Systmes Microprocesseurs 6809

IntroductionL'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

CB1 X O

CA2 X O

CA1 X O

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

| | X

MasseSortie X

5V X

B7....B0 XXXXXXXX OOOOOOOO Port B

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 / SortieSujet 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 ORG CLRA STA STA LDA STA LDA STA SWI

$8000 $8000 $8001 $0000 CRA DDRA #$04 CRA ORA $0100

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

* * * * * * * *

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 1 2 3 4 5

I1 1 0 0 1

I2 1 1 0 0

I3 0 1 1 0

I4 0 0 1 1

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 ORG

$8002 $8002 $8003 $0000

*| *| Dfinition des adresses de port DDRB, ORB, CRB *| * Dbut du programme l'adresse $0000

* INITIALISATION DU PIA CLRA STA LDA STA LDA STA CLRB LDY LDA * * * * * * * * * 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.

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

DEBUT L1

P1 Etude des Ports Entre / Sortie

41

Systmes Microprocesseurs 6809STA 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 ORG FCB $0200 $03,$06,$0C,$09

DATA

* SOUSPROGRAMME TEMPO ORG LDX LEA BNE RTS $0250 #$FFFF X,X T2

TEMPO T2

* * * *

Chargement de X par $FFFF X=X1 Si X0 > 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 InterruptionsSujet 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 ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * Dbut du programme

* INITIALISATION DU PIA CLRA STA LDA STA LDA STA * * * * * * Effacement de A Stock A dans CRA pour accs DDRA | | Place le port A en sortie. | | Demande d'accs ORA

CRA #$FF DDRA #$04 CRA

* PROGRAMME PRINCIPAL DEBUT L1 LDY LDA STA JSR CMPY BNE BRA #DATA ,Y+ ORA TEMPO #DATA+8 L1 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 Sinon > boucle sur DEBUT

* DONNEES pour un dfilement de b0 b7. ORG FCB $0200 $01,$02,$04,$08,$10,$20,$40,$80

DATA

* 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 X0 > 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 ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * Dbut du programme l'adresse $0000

* INITIALISATION DU PIA CLRA STA LDA STA * * * * Effacement de A Stock A dans CRA pour accs DDRA | | Place le port A en sortie.

CRA #$FF DDRA

P2 Etude des Interruptions

44

Systmes Microprocesseurs 6809LDA 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 * | * | 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

L2

ORA #$08 TEMPO L2 ORA DEBUT

* DONNEES ORG FCB $0200 $01,$02,$04,$08,$10,$20,$40,$80

DATA

* Sous Programme TEMPO ORG LDX LEA BNE RTS $0250 #$FFFF X,X T2

TEMPO T2

* * * *

Chargement de X par $FFFF X=X1 Si X0 > 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 ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * 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

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 * * * * * * * 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

* SOUS PROGRAMME D'INTERRUPTION. ORG INTVECT LDA STA LDA L2 JSR DECA BNE LDA RTI $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

P2 Etude des Interruptions

46

Systmes Microprocesseurs 6809* DONNEES ORG FCB $0200 $01,$02,$04,$08,$10,$20,$40,$80

DATA

* Sous Programme TEMPO ORG LDX LEA BNE RTS $0250 #$FFFF X,X T2

TEMPO T2

* * * *

Chargement de X par $FFFF X=X1 Si X0 > boucle sur T2 Sinon > Retour au programme appelant.

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

DDRA ORA CRA

EQU EQU EQU ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * 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. | Chargement de l'adresse du sous programme | d'interruption. Forage du bit b4 du CCR 0

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

* 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 par TEST D'ETAT CLRA STA LDA * | * | Extinction des sorties * Temporisation de 5s

ORA #$08

P2 Etude des Interruptions

47

Systmes Microprocesseurs 6809L2 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 * DONNEES ORG FCB $0200 $01,$02,$04,$08,$10,$20,$40,$80 $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.

DATA

* Sous Programme TEMPO ORG LDX LEA BNE RTS $0250 #$FFFF X,X T2

TEMPO T2

* * * *

Chargement de X par $FFFF X=X1 Si X0 > 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 DialoguesQuestion 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 ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * 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.

* Sous Programme TEMPO ORG LDX LEA BNE RTS $0250 #$FFFF X,X T2

TEMPO T2

* * * *

Chargement de X par $FFFF X=X1 Si X0 > boucle sur T2 Sinon > Retour au programme appelant.

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

_________ |_|

___

______ _____ _____| |____| 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|| |\ 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 ORG

$8000 $8000 $8001 $0000

*| *| Dfinition des adresses de port DDRA, ORA, CRA *| * Dbut du programme

* PROGRAMME PRINCIPAL CLRA STA STA CONVERT LDA STA ETAT LDA ANDA BEQ LDA STA SWI * * * * * * * * * * | | 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

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

Copyright 19962000, @Pepper's.

P3 Etude des Lignes de Dialogues

51