Vous êtes sur la page 1sur 49

Académie Royale Militaire

Système à microprocesseur
P 6809

Présenté par Pr. Adil SAADI


Microprocesseur
Académie Royale
Militaire

Un microprocesseur est un circuit intégré complexe caractérisé par une très


grande intégration et doté des facultés fonctionnelles d’interprétation et
d’exécution des instructions d’un programme.
Comme dans tout circuit intégré la technologie de fabrication impose au
microprocesseur des caractéristiques tels que :
 le temps de réponse qui se traduit par une plus ou moins grande vitesse
d’exécution des instructions du programme.
 la consommation

Exemple : le microprocesseur 6809 est fabriqué en technologie MOS canal N. Son


fonctionnement est synchronisé par une horloge dont la fréquence peut être 1, ou
1.5 ou 2 Mhz. Sa consommation type est de 0.5 W.
Environnement minimal pour un microprocesseur
Académie Royale
Militaire

Le microprocesseur ne peut fonctionner sans un environnement minimal comportant:


 Une zone de mémoire vive pour les données et les résultats
 Une zone de mémoire morte pour le programme
 Une ou plusieurs interfaces pour les périphériques
Schéma fonctionnel du microprocesseur 6809
Académie Royale
Militaire

On peut faire une petite simulation

Horloge
externe

interruptions Zone de mémoire utilisation


organisation interne du microprocesseur 6809
Académie Royale
Militaire

a) Unité Arithmétique et logique (ALU) :


L'ALU accomplit les opérations :
_ Arithmétiques : Addition, soustraction, multiplication, ....etc.
_ Logique : Et, ou, ou exclusif, complément à1, complément à2, ...
_ Décalage et rotation.
L'entrée de L'UAL est connectée au bus interne via
-) des registres "temporaires"
-) un registre particulier appelé "accumulateur". La sortie de l'UAL est connectée
uniquement à l'entrée de l'accumulateur.

b) Accumulateurs A, B et D :
Les calculs arithmétiques et les manipulations des données se font grâce
aux accumulateurs A et B de 8 bits.

Certains microprocesseur, possèdent des


accumulateurs de longueur double tel D
chez Motorola et HL chez Intel - dissociés
en deux et généralement baptisés
individuellement A et B ou H et L
respectivement.
Écriture hexadécimale

Exemple :
LDA # $1A $1A est de 8 bits (A est un registre 8 bits).
LDD # $13F4 $13F4 est de 16 bits (D est un registre 16 bits).
Chargement immédiat
Instruction de
chargement

A 0 0 0 1 1 0 1 0

0 0 0 1 0 0 1 1 1 1 1 1 0 1 0 0

D= A B

Cette adressage est appelé adressage immédiat


Adressage étendu
Soit une zone mémoire adressée par &2221 jusqu’à &2224 :

Pour charger la valeur contenue dans $2222 dans l’accumulateur A:

LDA $2222

Cette instruction est équivalente à charger le registre A avec le contenu


de l'adresse mémoire $2222 : ($2222) A (A =1Ø).

Remarque : la taille de A est 8 bits et celle de l’adresse est de 8 bits

Exemple : LDX $2222


Le registre X est de 16bits, donc il sera chargé par deux cases mémoires:
Charger le registre X avec le contenu des adresses mémoires $2222 et $2223 :
($2222 ; $2223)X (X = 1ØFF).
Une zone mémoire peut être adressée par le poids faible et le pois fort
séparément, cette technique peut être réalisée en moyennant un registre appelé
registre de page DP :

Exemple: le contenu de l’adresse &1050 peut être transféré vers l’accumulateur A


par :
LDA $5Ø Si DP = $1Ø; Charger le registre A avec le
contenu de l'adresse mémoire $1Ø5Ø : ($1Ø5Ø) A (A =$3Ø).

LDX $5Ø Si DP = $1Ø; Charger le registre X avec le


contenu de des adresses mémoires $1Ø50 et $1Ø51 :
($1Ø50 ; $1Ø51) X (X = $3Ø4F).

Ce type d’adressage est appelé adressage direct


Adressage étendu indirect

Exemple :
LDA#$BF
STA$01EC
LDA#$01
STA $0000
LDA#$EC
STA$0001
LDA [$0000]
END
Adressage indexé

Adressage indexé auto-incrémenté

LDA, X+
END

LDA, -X
END

LDD, X++
END
Adressage indexé avec déplacement
 Déplacement Constant : LDA#$BF
STA$0004
CLRA
LDA $04, X
END

 Déplacement Variable (Accumulateur): LDY#$0100


LDA#$CF
STA$010E
LDA#$0E
STA$0100
LDA A, Y
 Déplacement Variable (Pointeur): END

LDA#$02
STA$000C
LDA#$33
STA$000D
……
LDS#$000B
LDB[$01,S]
END
Jeu d’instruction du 6809

Instructions

Programme
LDB#$05
LDX#$0034
ABX
END
AAX! Non
Jeu d’instruction du 6809

LDA#$01 % Changement du CC
TFR A,CC LDA#$01
LDA#$05 TFR A,CC
ADCA#$05 LDA#$FF
END ADCA#$00
END
Jeu d’instruction du 6809

Un octet:

Deux octets:

LDA#$0A
STA$0000
LDA#$05
STA$0001
LDA#$03
LDB#$54
ADDD$0000
END
Jeu d’instruction du 6809

A, B : Registre

LDA#$0A LDA#$0A
STA$0000 STA$0000
LDA#$A0 LDB#$FF
ANDA$0000 ANDB$0000
END END
Jeu d’instruction du 6809

LDA#$FF
STA$00A0
ASL$00A0
END

LDA#$F1
LDA#$F1 ASRA
ASRA ASRA
END END
Exemple de Simulation de quelques d’instruction du
6809
1) Réaliser un programme permettant de 2) Réaliser un programme permettant
faire allumer la 1ère LED puis la 2ème LED de faire clignoter une ligne circulaire
d’une série de 8 LEDs . de LED en continu .
***** Initialisation du Port A **** ***** Initialisation du Port A ****
CLR$8001 CLR$8001
LDA#$FF LDA#$FF
STA$8000 STA$8000
LDB#$04 LDB#$04
STB$8001 STB$8001 Solution
*************** Fin *************** *************** Fin ***************
LDA#$01 LDA#$01
incomplète
ASLA ET1:
STA$8000 ASLA
END STA$8000
BRA ET1
END
***** Initialisation du Port A ****
CLR$8001
Solution de l’exercice 2 avec L’instruction ROL LDA#$FF
STA$8000
3) Réaliser un programme permettant de faire LDB#$04
STB$8001
clignoter une ligne circulaire de LED 10 fois. *************** Fin ***************
LDA#$01
ET1:
ROLA
STA$8000
BRA ET1
END
Exemple de Simulation de quelques d’instruction du
6809: branchement
LDA#$FF
STA$0000
ET1:
ASL$0000
BEQ ET1
END

LDA#$FF
STA$0000
ET1:
***** Initialisation du Port A ****
ASL$0000 CLR$8001
BNE ET1 LDA#$FF
STA$8000
END LDB#$04
STB$8001
*************** Fin ***************
LDB#$59
LDA#$01
ET1:
Soustrait 1 à l’accumulateur A ou B , une adresse STA$8000
mémoire ROLA
DECB
LDA#$A0 BEQ ET2
DECA BRA ET1
END ET2:
END
Exemple de Simulation
3) Réaliser un programme permettant ***** Initialisation du Port A ****
de faire clignoter une ligne circulaire CLR$8001
de LED 10 fois, puis une rotation en LDA#$FF
continu à droite. STA$8000
LDB#$04
STB$8001
*************** Fin ***************
LDB#$59
LDA#$01
ET1:
STA$8000
ROLA
DECB
BEQ ET2
BRA ET1
ET2:
LDA#$80
ET3:
RORA
STA$8000
BRA ET3
END
Exemple de Simulation
4) Refaire le programme avec un nombre de rotation à saisir.
1) Etape de configuration
****** Initialisation du Port A en sortie**** 2) Etape de saisie
CLR$8001
LDA#$FF BITA ou BITB ****** Initialisation du Port A en sortie****
CLR$8001
STA$8000
LDA#$FF
LDB#$04
STA$8000
STB$8001 LDA#$0F LDB#$04
****Initialisation Port B en entrée
CLR$8003 ET1: STB$8001
****Initialisation Port B en entrée
LDA#$00 BITA#$10 CLR$8003
STA$8002
LDB#$04 BNE ET1 LDA#$00
STA$8002
STB$8003 END LDB#$04
*************** Fin ***************
STB$8003
LDA$8002
*************** Fin ***************
END
ET1:
LDA #$80
BITA$8002
BEQ ET1
LDA $8002
LDB#$7F
ANDB$8002
END
LDA#$0F
ET1:
Résultat : On affecte pas l’accumulateur, c’est BITA#$01
une opération de test. BNE ET1
END
Exemple de Simulation
3) Réaliser un programme permettant
de faire clignoter une ligne circulaire de LED 10 fois, puis une rotation en continu à droite et enfin saisir des données
provenant du port 2 vers l’accumulateur B.

***** Initialisation du Port A en sortie****


***** Initialisation du Port A en sortie****
CLR$8001
CLR$8001
LDA#$FF
4) Refaire le LDA#$FF
STA$8000 programme STA$8000
LDB#$04
LDB#$04
STB$8001 avec un STB$8001
****Initialisation Port B en entrée
CLR$8003
nombre de ****Initialisation Port B en entrée
CLR$8003
LDA#$00 rotation à LDA#$00
STA$8002
LDB#$04 saisir STA$8002
LDB#$04
STB$8003 STB$8003
*************** Fin ***************
*************** Fin ***************
CLRB
LDB#$59
ET4:
LDB$8002 LDA#$01
BEQ ET4 ET1:
LDA#$01 STA$8000
ET1: ROLA
STA$8000 DECB
ROLA BEQ ET2
DECB BRA ET1
BEQ ET2 ET2:
BRA ET1 LDA#$80
ET2: ET3:
LDA#$80
RORA
ET3:
RORA STA$8000
STA$8000 LDB$8002
BRA ET3
BRA ET3 END
END
Jeu d’instruction du 6809

LDX#$AFDC
CMPX#$AFDA
END
CMPS#$AFDA
END

Complément à un d’une mémoire, accumulateur A et B LDA#$F0


STA$0000
INC COMA
END
Soustrait 1 à l’accumulateur A ou B , une adresse mémoire DEC$0001
END
LDA#$80
LDX#$AFDC
DECA
Programme permettant de saisir une ****** Initialisation du Port A en sortie****
CLR$8001
donnée en appuyant sur le bit 0. LDA#$FF
STA$8000
LDB#$04
STB$8001
****Initialisation Port B en entrée
CLR$8003
LDA#$00
STA$8002
LDB#$04
STB$8003
*************** Fin ***************
ET6:
LDA$8002
BITA#$01
BEQ ET6
ANDA#$FE
STA$0000
ET1:
LDB#$08
LDA#$01
ET2:
STA$8000
ASLA
DECB
BNE ET2
DEC$0000
BNE ET1
END
Exemple de Simulation
5) Réaliser un programme permettant selon les données transmises du scanner de
limiter la montée de l’ascenseur.
***** Initialisation du Port A en sortie**** Etage Code
CLR$8001
LDA#$FF 1 3E
STA$8000
LDB#$04
STB$8001
2 FA
****Initialisation Port B en entrée
CLR$8003
3 DC
LDA#$00
STA$8002 4 B7
LDB#$04
STB$8003 5 97
*************** Fin ***************
CLRB 6 C8
ET4:
LDB$8002 7 AB
CMPB#$3E
BEQ ET1
CMPB#$FA
BEQ ET2
BNE ET4
ET1:
LDA#$02
STA$8000
BRA ET6
ET2:
LDA#$04
STA$8000
BRA ET6
*****compléter le programme*****
ET6:
END
Exemple de Simulation
Exercice : faire correspondre à chaque étage une vitesse de montée que vous
devez communiquer au variateur de vitesse à l’aide du quartet b 0b1b2b3.
Faire le schéma de câblage et le programme.
Etages Vitesse/
Code binaire
1-3 V1 : /1010

4-5 V2 : /1101

6-7 V3 : /0110
Jeu d’instruction du 6809: Branchement
ET1:
LDA#$FF
STA$00A0
ASL$00A0
BCC ET1
END
LDA#$FF
STA$0000
ET1:
ASL$0000
BCS ET1
END
LDA#$FF
STA$0000
ET1:
ASL$0000
LDA#$FF BEQ ET1
STA$0000 END
ET1:
ASL$0000
BNE ET1
END
Jeu d’instruction du 6809: Branchement
LDA#$F0
ET1:
ASRA
BRA ET1
END
% Compteur de programme
LDA#$F0
STA$0000
ET2:
ASRA
BSR ET1
END
ET1:
ASLA
BSR ET2
END
Jeu d’instruction du 6809
LDX#$AFDC
EXG X,Y
Les registres X, Y, S, U et D: deux octets. END
Les registres A,B,CC et DP : Un octet. LDA#$80
LDX#$AFDC
EXG B,CC
END
LDA#$F0
STA$0000
JMP $FC00
BITA ou BITB END

LDA#$0F
ET1:
BITA#$10
BNE ET1
LDA#$0F END
Résultat : On affecte pas l’accumulateur, c’est ET1:
une opération de test. BITA#$01
BNE ET1
Affecte le flag Z, si le résultat est zéro, Z=1 END
Programmation du microprocesseur 6809
Académie Royale
Militaire

Programme 1 : on désire chercher dans une zone mémoire de taille 5 K débutant à


l’adresse $OO1O, s’il y a une valeur nulle, fin du programme.
Instruction test Instruction de Introduction de Recherche d’une PROGRAMME
valeur nulle boucle variable adresse valeur nulle COMPLET

LDA $0010 ETQ1: LDX#$0010 LDX#$0010 LDA#$12


TSTA LDA $0010 ETQ1: ETQ1: STA $0010
END TSTA LDA,X+ LDA,X+ LDA#$42
BEQ ETQ1 TSTA TSTA STA $0011
END BEQ ETQ1 BNE ETQ1 LDA#$AF
END END STA $0012
LDA#$00
STA $0013
LDA#$1C
STA $0014
LDX#$0010
ETQ1:
LDA,X+
TSTA
BNE ETQ1
END
Programmation du microprocesseur 6809
Académie Royale
Militaire

Programme 2 : on désire chercher dans une zone mémoire de taille 5 Koctets


débutant à l’adresse $OO1O, la fin de la ligne d’un texte, qui se termine par un
retour chariot , fin du programme.
Instruction Instruction de Introduction de PROGRAMME CR EQU $0D
retour chariot comparaison variable adresse COMPLET LDA#$12
CR EQU $0D STA $0010
CR EQU $0D CR EQU $0D LDA#$42
LDA#CR LDX#$0010
LDA#CR STA $0011
CMPA #CR ET1:
END LDA#$AF
END LDA,X+
CMPA #CR STA $0012
BNE ET1 LDA#$0D
END STA $0013
LDA#$1C
STA $0014
LDX#$0010
ET1:
LDA,X+
LDY#$00C0 CMPA #CR
LDB #$12 BNE ET1
STB,--Y END
end
Registres pointeurs du microprocesseur 6809
Académie Royale
Militaire

2) Registres de piles S et U

Les pointeurs de pile U et S (système) sont utilisés par le µp pour gérer la


sauvegarde de ses registres internes pendant l'exécution des programmes
d'interruptions ou de sous-programmes.

1) Saut de programme
LDA#$07
STA $0000 2) Registres PCL, PCH,UL, UH, YL, YH, XL,
LDS#$0040 XH ,DP, B, A , CCR.
BSR CALCUL
end
CALCUL:
LDA#$13
ADDA $0000
STA $0000
RTS
Registres pointeurs du microprocesseur 6809
Académie Royale
Militaire
Exercice
Enoncé : Une table de données consiste en une liste de données quelconques logées
en mémoire à des adresses successives. L'adresse de la première donnée est
qualifiée d'adresse de base de la table.
Proposer un programme permettant de ranger en mémoire dans l'ordre croissant
l’ensemble des données 8 bits signées à partir de l'adresse de base $0200.

Il faudra en premier lieu charger la mémoire avec les nombres négatifs en


décrémentant de $FF à $80, puis charger les nombres positifs en incrémentant de
$00 à$7F.
Problème :
On dispose d’une zone mémoire de 60 octets placée à partir de $1000, on veut réaliser
l’opération suivante :
On prend une adresse, par exemple l’adresse $1000, dont le contenu est :

[$1000]= . . . . . . . .

Quartet poids fort Quartet poids faible

On inter-change les quartets c.à.d. le nouveau contenu devient et sera stocké dans :

[$10A0]= . . . . . . . .

Quartet poids faible Quartet poids fort

Application Numérique :
[$1000] = 1110 0001
Le nouveau contenu devient :
[$10A0]= 0001 1110

Question : Faire le programme permettant de réaliser cette opération.


Correction

LDX#$0100 LDA#$04
LDA#$3C STA$0003
STA$0004 ET2:
ET0: LSL$0002
LDA#$F8 LSR$0001
STA ,X+ DEC$0003
DEC$0004 BNE ET2
BNE ET0 LDA$0001
LDB#$3C ADDA$0002
LDX#$0100 STA $A0,X
ET1: DECB
LDA ,X+ BNE ET1
STA $0000 END
ANDA#$F0
STA$0001
LDA$0000
ANDA#$0F
STA$0002
LDA#$A3
LDB#$24
MUL
END

ORG $FCA0
LDS#$000D
LDA#$A3
LDB#$24
JMP $FCAB
END
MUL
RTS
ORG $FCA0
LDS#$000D
LDA#$A3
LDB#$24
RORA
ROLB
END
Interruptions du microprocesseur 6809
Académie Royale
Militaire

Le microprocesseur 6809 possède quatre lignes d’interruptions matériels


(Hardware):
 Reset
 NMI (No masquable Interrupt).
 FIRQ (Fast Interrupt Request).
 IRQ ( Interrupt Request).
Hormis les demandes d’interruptions matérielles, il existe des interruptions
logicielles, ce sont des demandes insérées dans le programme. Le UP en possède
trois:
 SWI (Software Interrupt priotaire à FIRQ et IRQ).
 SWI 2 (Software Interrupt 2).
 SWI 3 ( Software Interrupt 3).
Vecteurs d’interruptions : FFFF/FFFE RESET
Lors d’une interruption matérielle FFFD/FFFC NMI
ou logicielle, le PC contient
FFFB/FFFA SWI
l’adresse du programme à
executer: FFF9/FFF8 IRQ
 Poids fort du PC dans la plus FFF7/FFF6 FIRQ
petite adresse.
FFF5/FFF4 SWI2
 Le poids faible dans la plus
grande adresse. FFF3/FFF2 SWI3
Interruptions du microprocesseur 6809
Académie Royale
Militaire

Instruction de retour d’interruption RTI:


Toutes les séquences de traitement d’interruption doivent se terminer par
l’instruction RTI (Return from Interrupt) pour éviter toute mauvaise manipulation
de pile
Interface Périphérique
PIA 6821
Interface Périphérique PIA 6821
Académie Royale
Militaire

L’interface parallèle de type PIA 6821 (Peripherical Interface Adapter) fournit un


moyen d’interface des appareils périphériques avec un microprocesseur 680X. Ce
circuit interface le MPU avec les périphériques par deux bus de données 8 bits
bidirectionnels et quatre lignes de contrôle. La configuration fonctionnelle du PIA
est programmée habituellement par le MPU pendant l’initialisation du système.
Chacune des lignes de données vers la périphérie (Port A et B) peut être
programmée pour être utilisée soit en entrée, soit en sortie à partir des registres
internes et du bus de données.

6821 : Port A : La charge maximale d'une entrée représente 1,5 charge TTL
standard. Les broches du Port A peuvent être lues par le µp6809 à la seule
condition de respecter les niveaux de tensions.
 U > 2 volts pour un 1 logique
 U < 0,8 volts pour un 0 logique

6821 : Port B : Broches en logique trois états ce qui permet de les mettre en
haute impédance lorsque le PIA n'est pas sélectionné. Les sorties du port B
(PB0 à PB7) sont compatibles TTL et peuvent fournir jusqu'à 1 mA sous 1,5
volts
PIA 6821: Organisation interne
Académie Royale
Militaire
Adressage du PIA 6821
Académie Royale
Militaire

Chip select Boitier


Sélection ‘Hard’ des
Registres

Registres ont même adresses


Adresses pour accéder aux registres
Registres du PIA 6821: Direction
Académie Royale
Militaire

Registres de direction de données DDRA et DDRB (Data Direction Register


A et B) Ils définissent (bit à bit) le sens de travail de chacune des broches des
ports A et B. Accessible en lecture comme en écriture. Px0 à Px7 des ports A
et B
= 0 la broche est une ENTREE
= 1 la broche est en SORTIE

Exemple 1 : définir le sens de travail de chacune des broches PA0 à PA7 et PB0
à PB7 = $00 toutes les 8 broches sont en Entrée = $FF toutes les 8 broches
sont en Sortie

Exemple 2: pour mettre la ligne PB4 en entrée et toutes les autres en sortie, il
faut écrire la valeur $10 dans le registre DDRB.
Registres du PIA 6821: Sortie
Registres de sortie ORA – ORB :
Ce sont les registres dans lesquels vont transiter les données. Pour lire une donnée
reçue par un port, il suffira de lire le contenu de ce registre.

Ils mémorisent les informations envoyées à l'extérieur sur les ports A et B.

En sortie : Si une des broches PA0 à PA7 ou PB0 à PB7 est en sortie, ce sera le
contenu du bit correspondant au registre ORA ou ORB qui influencera cette broche.
Dans ce cas le µp6809 devra écrire dans le registre ORx. Si on écrit une donnée
dans le registre ORx, celle-ci se trouvera automatiquement sur les broches du port
x (A ou B). Permettant de mémoriser une donnée lors d'une écriture. Si les lignes de
données fonctionnent comme des sorties, une lecture des registres de données est
possible. Elle fournit en fait l'ancienne valeur.

En entrée : Si une des broches PA0 à PA7 ou PB0 à PB7 est en entrée, ce sera
l'état du signal présent sur la broche qui influencera le contenu du registre ORx.
Dans ce cas le µp6809 devra lire dans le registre ORx. Si les broches Px0 à Px7
reçoivent une donnée alors on aura la possibilité de lire le registre ORx pour
récupérer la donnée représentant les états du port. Les données présentes sur les
ports A et B sont prises en compte par une lecture de ORA et ORB mais ne sont pas
mémorisées dans ces registres. Il faut donc que ces données soient présentes
suffisamment longtemps pour être lue.
Registres du PIA 6821: Contrôle
Académie Royale
Militaire

Registre de contrôle CRA - CRB :


Ce registre permet la commande et le contrôle des ports de sortie A et B. Pour y
accéder, il suffit de fixer les entrées RS1 et RS0.
Ce registre va permettre d’accéder aux autres registres : DDRA-DDRB et ORA-
ORB à partir du bit 2 du registre de contrôle

Registre
E/S

Registre
Direction
Organigramme d’initialisation du PIA 6821
(port A en entrée) port B en sortie).
Cryptage d’un mot binaire: Inversion des quartets

LDA #$3A
STA $0000
LDB#$F0
STB $0001
ANDA $0001
STA $0002
LDA $0000
LDB#$0F
STB $0001
ANDA $0001
STA $0003
LDA#$04
ET1:
ROR $0002
ROL $0003
DECA
BNE ET1
LDA $0002
ADDA $0003
STA $0004
end

Vous aimerez peut-être aussi