Vous êtes sur la page 1sur 11

Objectifs du TP 

 Programmer des interruptions


 Comparer les niveaux de priorité des trois interruptions matérielles : IRQ, FIRQ et NMI.

Première partie :
Programmation du PIA 6821

Exercice 1 :
On se propose de construire un programme qui permet d’allumer les quatre diodes rouges de
poids fort, reliées au port B et maintenir éteintes les quatre diodes rouges de poids faible du même port
B. une fois mis au point, on le chargera en mémoire à partir de l’adresse $0000, exécutera et vérifiera
l’état des diodes.
Le tableau suivant présente ce programme :

PROG 1

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0003 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0005 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0008 86 - 04 - - Lda #$04 Immédiat (A)=$04

$000A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$000D 86 - 0F - - Lda #$0F Immédiat (A)=$0F

$000F B7 - 80 02 - Sta $8002 Etendu Allumage des 4 diodes


MSB
$0012 3F - - - - Swi - Inhérent Fin programme

On a traduit ce programme en langage assembleur puis en langage machine, et on a constaté


après exécution du programme, l’allumage des diodes rouges de poids fort du port B, et l’extinction des
quatre diodes rouges de poids faible du même port B.
Exercice 2 :
On propose un sous-programme de temporisation DELAI qui consiste à occuper le processeur,
pendant un certain temps ∆T, à réaliser une tâche qui consiste à charger le registre d’index X par une
valeur quelconque, puis le décrémenter jusqu'à la valeur 0.
Le tableau suivant présente ce sous-programme :

Sous-programme DELAI

Adresse Code machine Etiq. Code assembleur Mode Commentaire


d’
Code Post octet Code Code Code adressage
opération En mode d opérande opération opérande
octet octet adressage octet octet
1 2 indexé 1 2
$0500 8E - - FC 30 - Ldx #$FC30 Immédiat (X)=$FC30

$0503 30 - 88 FF - L Leax $FF, x Indexé Décrémenter X

$0506 26 - - FB - - Bne L - Relatif branchement si


Z=0
$0508 39 - - - - - Rts - Inhérent Fin de sous-
programme

*Calcul du post octet :


On a un déplacement sur 8 bits, donc le post octet est 1RR01000, or pour le registre X on a RR=00
donc : post octet = (10001000)2 = (88) H
*Calcul du déplacement :
On a : Adresse effective = base + déplacement
Donc : déplacement = Adresse effective – base = 0503 - 0508 = -5
Or -5= (FB) H

Exercice 3 :
On modifie PROG 1 pour avoir un programme PROG 2 qui permet d’allumer alternativement
les 4 diodes rouges de poids fort et les 4 diodes rouges de poids faible. PROG 2, comme programme
principale, sous-entend donc l’appel périodique du sous-programme de temporisation DELAI.
Le tableau suivant présente ce programme :
PROG 2

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0003 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0005 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0008 86 - 04 - - Lda #$04 Immédiat (A)=$04

$000A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$000D 86 - 0F - loop Lda #$0F Immédiat (A)=$0F

$000F B7 - 80 02 - Sta $8002 Etendu Allumage des 4 diodes


MSB
$0012 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0015 43 - - - - Coma - Inhérent Complément à 1 de A

$0016 B7 - 80 02 - Sta $8002 Etendu Allumage des 4 diodes


LSB
$0019 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$001C 20 - EF - - Bra Loop Relatif Se brancher à Loop

$001E 3F - - - - Swi - Inhérent Fin de programme

*Calcul du déplacement :
On a : Adresse effective = base + déplacement
Donc : déplacement = Adresse effective – base = 000D - 001E = (EF)
Après exécution du programme, on a constaté l’allumage alternatif des 4 diodes rouges de poids
fort et les 4 diodes de poids rouges de poids faible du port B.
Exercice 4 :
On modifie PROG 2 pour avoir un programme PROG 3 qui permet d’allumer puis d’éteindre
périodiquement les 8 diodes rouges du port B.
Le tableau suivant présente ce programme :

PROG 3

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0003 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0005 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0008 86 - 04 - - Lda #$04 Immédiat (A)=$04

$000A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$000D 4F - - - loop Clra Inhérent (A)=$00

$000E B7 - 80 02 - Sta $8002 Etendu 8 diodes du port B


allumé
$0011 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0014 43 - - - - Coma - Inhérent Complément à 1 de A

$0015 B7 - 80 02 - Sta $8002 Etendu 8 diodes du port B


éteinte
$0018 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$001B 20 - F0 - - Bra Loop Relatif Se brancher à Loop

$001D 3F - - - - Swi - Inhérent Fin de programme

*Calcul du déplacement :
On a : Adresse effective = base + déplacement
Donc : déplacement = Adresse effective – base = 000D – 001D = (F0)
Après exécution du programme, on a constaté l’allumage puis l’extinction périodique des 8 diodes
rouges du port B.

Exercice 5 :
On modifie PROG 3 pour avoir un PROG 4 qui permet d’allumer puis d’éteindre
périodiquement les 8 diodes vertes du port A.
Le tableau suivant présente ce programme :

PROG 4

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 80 01 - Clr $8001 Etendu Autorisation d’écriture
dans DDRA
$0003 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0005 B7 - 80 00 - Sta $8000 Etendu Port A déclarer en


sortie
$0008 86 - 04 - - Lda #$04 Immédiat (A)=$04

$000A B7 - 80 01 - Sta $8001 Etendu Autorisation d’écriture


dans ORA
$000D 4F - - loop Clra Inhérent (A)=$00

$000E B7 - 80 00 - Sta $8000 Etendu 8 diodes du port A


allumé
$0011 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0012 43 - - - - Coma - Inhérent Complément à 1 de A

$0015 B7 - 80 00 - Sta $8000 Etendu 8 diodes du port A


éteinte
$0018 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$001B 20 - F0 - - Bra Loop Relatif Se branche à loop

$001D 3F - - - - Swi - Inhérent Fin de programme

*Calcul du déplacement :
On a : Adresse effective = base + déplacement
Donc : déplacement = Adresse effective – base = 000D – 001D = (F0)
Après exécution du programme, on a constaté l’allumage puis l’extinction périodique des 8
diodes du port A.

Exercice 6 :
On modifie PROG 3 pour avoir un PROG 5 qui permet de réaliser un chenil lard sur les 8 diodes
du port B.
Le tableau suivant présente ce programme :

PROG 5

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0003 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0005 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0008 86 - 04 - - Lda #$04 Immédiat (A)=$04

$000A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$000D 86 - 7F - L Lda #$7F Immédiat (A)=$7F

$000F B7 - 80 02 - Sta $8002 Etendu Allumage de la


première diode
$0012 43 - - - - Coma - Inhérent Complément à 1 de A

$0013 44 - - - - Lsra - Inhérent Décalage à droite de A

$0014 43 - - - - Coma - Inhérent Complément à 1 de A

$0015 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-


programme
$0018 81 - FF - - Cmpa #$FF Immédiat Comparer A avec $FF

$001A 27 - F1 - - Beq L Relatif Branchement si Z=1

$001C 7E - 00 0F - Jmp $000F Etendu Saut à $000F

$001F 3F - - - Swi - Inhérent Fin de programme

*Calcul du déplacement :
On a : Adresse effective = base + déplacement
Donc : déplacement = Adresse effective – base = 000D – 001C = (F1)
Après exécution du programme, on a constaté que les 8 diodes rouges s’allume et s’éteint, à tour de rôle

Seconde partie :
Etude des niveaux de priorité des trois interruptions matérielles IRQ, FIRQ et
NMI

Exercice 7 :
On se propose de mettre au point un programme principal PROG 6 qui répondra aux spécifications
suivantes :
1) L’exécution du programme PROG 6 en permanence les diodes rouges du port B dans l’état :
ETAT Rch (chenillard, exercice 6).
2) La provocation d’une demande d’interruption IRQ basculera le clignotement sur les 8 diodes
vertes du port A selon ETAT V8 (exercice 5).
3) La provocation d’une demande d’interruption FIRQ basculera le clignotement sur les 8 diodes
rouges du port B selon ETAT R8 (exercice 4).
4) La provocation d’une demande d’interruption NMI basculera le clignotement des diodes rouges
du port rouges du port B selon ETAT R44 (exercice3).
Mise au point des programmes :
1) Sous programme d’interruption IRQ :

Sous-programme IRQ

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0200 7F - 80 01 - Clr $8001 Etendu Autorisation d’écriture
dans DDRA
$0203 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0205 B7 - 80 00 - Sta $8000 Etendu Port A déclarer en


sortie
$0208 86 - 04 - - Lda #$04 Immédiat (A)=$04

$020A B7 - 80 01 - Sta $8001 Etendu Autorisation d’écriture


dans ORA
$020D 4F - - loop Clra Inhérent (A)=$00

$020E B7 - 80 00 - Sta $8000 Etendu 8 diodes du port A


allumé
$0211 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0212 43 - - - - Coma - Inhérent Complément à 1 de A

$0215 B7 - 80 00 - Sta $8000 Etendu 8 diodes du port A


éteinte
$0218 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$021B 20 - F0 - - Bra Loop Relatif Se branche à loop

$021D 3F - - - - Swi - Inhérent Fin de programme

2) Sous programme d’interruption FIRQ :


Sous- programme FIRQ

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0400 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0403 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0405 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0408 86 - 04 - - Lda #$04 Immédiat (A)=$04

$040A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$040D 4F - - - loop Clra Inhérent (A)=$00

$040E B7 - 80 02 - Sta $8002 Etendu 8 diodes du port B


allumé
$0411 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0414 43 - - - - Coma - Inhérent Complément à 1 de A

$0415 B7 - 80 02 - Sta $8002 Etendu 8 diodes du port B


éteinte
$0418 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$041B 20 - F0 - - Bra Loop Relatif Se brancher à Loop

$041D 3F - - - - Swi - Inhérent Fin de programme

3) Sous programme d’interruption NMI :


Sous- programme NMI

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0100 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$0103 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0105 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0108 86 - 04 - - Lda #$04 Immédiat (A)=$04

$010A B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$010D 86 - 0F - loop Lda #$0F Immédiat (A)=$0F

$010F B7 - 80 02 - Sta $8002 Etendu Allumage des 4 diodes


MSB
$0112 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$0115 43 - - - - Coma - Inhérent Complément à 1 de A

$0116 B7 - 80 02 - Sta $8002 Etendu Allumage des 4 diodes


LSB
$0119 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-
programme
$011C 20 - EF - - Bra Loop Relatif Se brancher à Loop

$011E 3F - - - - Swi - Inhérent Fin de programme

4) Programme principal d’interruption :

Programme principal d’interruption 

Adresse Code machine Etiq. Code assembleur Mode Commentaire


D’adressage
Code Code Code Code
opération opérande opération opérande
Octet Octet Octet Octet
1 2 1 2
$0000 7F - 0F 60 - Clr $0F60 Etendu

$0003 7F - 0F 61 - Clr $0F61 Etendu Autorisation de


l’interruption NMI
$0006 7C - 0F 60 - Inc $0F60 Etendu

$0009 7F - 0F 67 - Clr $0F67 Etendu ($0F67)=$00

$000C 86 - 04 - - Lda #$04 immédiat (A)=$04

$000E B7 - 0F 66 - Sta $0F66 Etendu ($0F66)=$04

$0011 7F - 0F 69 - Clr $0F69 Etendu ($0F69)=$00

$0014 86 - 02 - - Lda #$02 immédiat (A)=$02

$0016 B7 - 0F 68 - Sta $0F68 Etendu ($0F68)=$02

$0019 1C - AF - - ANDCC #$AF Immédiat Autorisation des interr.


masquables IRQ et
FIRQ
$001B 7F - 80 03 - Clr $8003 Etendu Autorisation d’écriture
dans DDRB
$001E 86 - FF - - Lda #$FF Immédiat (A)=$FF

$0020 B7 - 80 02 - Sta $8002 Etendu Port B déclarer en


sortie
$0023 86 - 04 - - Lda #$04 Immédiat (A)=$04

$0025 B7 - 80 03 - Sta $8003 Etendu Autorisation d’écriture


dans ORB
$0028 86 - 7F - L Lda #$7F Immédiat (A)=$7F

$002A B7 - 80 02 - Sta $8002 Etendu Allumage de la


première diode
$002D 43 - - - - Coma - Inhérent Complément à 1 de A

$002E 44 - - - - Lsra - Inhérent Décalage à droite de A


Complément à 1 de A
$002F 43 - - - - Coma - Inhérent

$0030 BD - 05 00 - Jsr $0500 Etendu Appelle de sous-


programme
Comparer A avec $FF
$0033 81 - FF - - Cmpa #$FF Immédiat

$0035 27 - F1 - - Beq L Inhérent Branchement si Z=1

$0037 7E - 00 0F - Jmp $002A Etendu Saut à $001A


$003A 3F - - - - Swi - Inhérent Fin de programme

Vous aimerez peut-être aussi