Chapitre 6
Chapitre 6
Chapitre 6
Chapitre 6
L’INTERFACE PARALLELE LE 8255A
I ) Introduction :
Remarque :
Le registre de données (Data buffer Bus) assure la liaison entre le bus de données
extérieur et le registre de controle ainsi que les ports d'entrées/sorties.
Le bus d'adresse du 8255A est formé essentiellement par deux pines (A0et A1) qui
permettent de sélectionner les ports ainsi que le registre de contrôle comme le
montre le tableau suivant :
Plus en détail l'adressage des différents ports en entrée sortie se fait selon la table
de vérité suivante :
II ) Programmation du 8255A :
Le format ainsi que le choix des modes se fait à partir du mot de contrôle suivant :
II-1 ) Le mode 0 du 8255 :
En mode zéro les ports du 8255A peuvent être programmés en entrée ou en sortie :
8 bits pour le port A , 8 bits pour le port B et le port C est formé de deux quartes ( un
quarte haut et un quarte bas ) , donc il y a 16 combinaisons possibles :
Exemple si on veut configurer le port A en sortie , port B en entrée , portc haut entrée
et port C bas sortie le mot de commande est 93H
Le programme :
A/ on veut écrire un programme qui permet de faire clignoter les diodes Led . Jusqu'à
l'appui sur SW0
C ) On veut écrire un programme qui permet de faire clignoter les diodes paires si on
appuie sur SW0 et les diodes impaires si on appuie sur SW1
On suppose que les adresses des ports est comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
A /Pour faire clignoter les diodes led il faut envoyer une fois 0FH puis effectuer une
temporisation puis envoyer 00H et effectuer une temporisation voici l'organigramme
qui assure ce fonctionnement :
Le programme est le suivant :
Donnee SEGMENT
PortA EQU 300H
PortC EQU 300H
Reg_com EQU 306H
Mot_com EQU 91H
Masque_SW0 EQU 01H
Diode_allume EQU 0FH
Diode_etainte EQU 00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee ; pointer le data segment
MOV DS,AX
MOV AL,Mot_com ; configurer les ports en sorties
OUT Reg_com,AL
Debut: MOV AL,Diode_allume ; D3D2D1D0 = FH led allumé
OUT PortA,AL
CALL Tempo ; temporisation
MOV AL,Diode_etainte ; D3D2D1D0 = 0H led etainte
OUT PortA,AL
CALL Tempo ; temporisation
IN AL,PortC ; Lecture du portC
AND AL,01H ; verifier s'il a appui sur SW0
CMP AL,01H
JNZ Debut
MOV AX,4C00H
INT 21H
Prog endp
Tempo: MOV CX,7FFFH ; Effectuer une temporisation
Temp1: PUSh CX ; avec deux boucles imbriqués
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET Code
ends
End prog
Le battement signifie qu'on allume la diode puis on l'éteint une seule fois car dans
notre cas il faut toujours lire les switches car l'utilisateur peut changer l'état des
switches à tout moment.
Donnee SEGMENT
PortA EQU 300H
PortC EQU 302H
Reg_com EQU 306H
Mot_com EQU 91H
Masque_SW0 EQU 01H
Diode_allume EQU 0FH
Diode_etainte EQU 00H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee ; pointer le data segment
MOV DS,AX
MOV AL,Mot_com ; configurer les ports en sorties
OUT Reg_com,AL
DEBUT: IN AL,PortC
AND AL,03H
CMP AL,01
JZ Diode_paire ; si SW=1 alors battement paire
CMP AL,02
JZ Diode_impaire ; si SW=1 alors battement impaire
JMP DEBUT
Diode_paire : MOV AL,05H ; Battement des diodes paire
OUT PortA,AL
CALL Tempo ; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo ; Temporisation
JMP DEBUT
Diode_impaire : MOV AL,0AH ; Battement des diodes impaire
OUT PortA,AL
CALL Tempo ; Temporisation
MOV AL,00H
OUT PortA,AL
CALL Tempo ; Temporisation
JMP DEBUT
MOV AX,4C00H
INT 21H
Prog endp
Tempo : MOV CX,7FFFH ; Effectuer une temporisation
Temp1: PUSh CX ; avec deux boucles imbriqués
MOV CX,7FFFH
Temp2: NOP
NOP
NOP
NOP
LOOP Temp2
POP CX
LOOP Temp1
RET
Code ends
End prog
Exemples 2 :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306
Enfin Rd/Rw : c'est pour donner l'ordre de lecture ou écriture sur LCD. Parmis les
commandes on trouve :
Exemple de programme qui affiche le message ‘bonjour iset n' sur LCD
Avant de commencer le programme il faut déterminer les mots qu'il faut envoyer au
portB pour valider une donnée ou valider une commande d'où le tableau suivant :
On suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
Donnee SEGMENT
Message db ‘bonjour iset n'
PortB EQU 302H
PortC EQU 304H
Reg_com EQU 306H
Mot_com EQU 80H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
Prog Proc
MOV AX,donnee ; pointer le data segment
MOV DS,AX
MOV AL,Mot_com ; configurer les ports en sorties
OUT Reg_com,AL
LEA SI,message ; Pointe le message à afficher
MOV CX,14 ; on 14 caractère à afficher
CALL Init_LCD ; initialisation de l'LCD
DEBUT :
MOV AL,[SI] ; programme principal
OUT PortC,AL ; envoie de la donnée
CALL Vali_donnée ; validation de la donnée
INC SI
LOOP DEBUT
Init_LCD : MOV AL,01 ; effacer LCD
OUT PortC,AL
CALL Vali_commande ; Validation de l'effacement
MOV AL,0EH ; effectuer un Home pour LCD
OUT PortC,AL
CALL Vali_commande ; Valide le HOME
MOV AL,06 ; Ecriture vers la droite
OUT PortC,AL
CALL Vali_commande ; valide le mode d'écriture.
RET
Vali_commande :
MOV AL,04 ; Sous programme validation
OUT PortB,AL ; de la commande
MOV AL,00
OUT PortB,AL
RET
Vali_donnée :
MOV AL,05 ; Sous programme validation
OUT PortB,AL ; de la donnée
MOV AL,01
OUT PortB,AL
RET
MOV AX,4C00H
INT 21H
Prog endp
Exemple 4 : Commande d'un moteur Pas à Pas
Les différentes phases sont les suivantes (en mode avancement par demi pas):
La commande des phases du moteur pas à pas bipolaire a aimant permanent
est donnée par le tableau suivant :
D'où le programme par exemple qui fait tourner le moteur pas à pas de 90° : On
suppose que les adresses des ports est donner comme suit :
Port A : 300H
Port B : 302H
Port C : 304H
Registre de commande : 306H
1 pas = 0.9°
A+ est connecté avec PA0
B+ est connecté avec PA1
A- est connecté avec PA2
B- est connecté avec PA3
Donnee SEGMENT
Phase db 03H, 06H, 0CH, 09H, 03H, 06H, 0CH, 09H
PortA EQU 300H
Reg_com EQU 306H
Mot_com EQU 80H
Donnee ENDS
Code SEGMENT
Assume CS : code, DS :donnee
Prog Proc
MOV AX,donnee ; pointer le data segment
MOV DS,AX
MOV AL,Mot_com ; configurer les ports en sorties
OUT Reg_com, AL
MOV CX, 100 ; 100 * 0.9° = 90°
DEBUT1 : LEA SI, phase ; Pointer sur le tableau des phases
DEBUT2 : MOV AL,[SI]
OUT portA, AL ; Envoie des différentes phases
INC SI
CMP SI,7
JNZ DEBUT2
LOOP DEBUT1
MOV AX, 4C00H ; Retour au DOS INT 21H
Prog endp
Code ENDS
END PROG
II-2 ) Le Mode 1 du 8255A :
En mode 1 , les ports A et B sont utilisés en entrée ou en sortie gérées par les accès
du portC .
Mode 1 : en entrée :
En entrée les ports A et B sont configurés en entrée alors que le PC0, PC1 et Pc2
assure le handshake pour B et PC3, PC4 et Pc5 pour le A (PC6 et PC7 peuvent être
programmés en entrée ou en sortie). STB : (Strobe input) : Au niveau bas , charge
les données dans le verrou d'entrée . IBF : (Input Buffer Full) : Au niveau haut
les données ont été verrouillées :
Remarque :
Le signal INTE est contrôlé par le mot de commande du portC (PC4 pour le Port A
et PC2 pour le Port B)
La figure suivante illustre ce mode de fonctionnement pour les portA et portB avec
leur mot de commande respectif.
Remarque :
On ne trouve plus dans ce cas l'organisation symétrique du portc (c,a,d portc haut et
portc bas)
ACK : (Acknowledge Input) : = 0 signifie que les données ont été acquises.
Le port A ainsi que le Port B peuvent être mis en entrée ou en sortie individuellement
dans le mode 1 : c'est le mode mixte
* STB : (Strobe Input : E) : Niveau bas : les données sont chargées dans le verrou.
* IBF : (Input Buffer Full : E) : Haut : les données ont été chargées.
PC4.
Pour connecter une interface de 8 bits (le 8255A) avec un bus de données de 16 bits
(Le 8086) il faut prendre des précautions en effet on a vu dans le paragraphe «
organisation physique de la mémoire » qu'avec le microprocesseur 8086 si on
accède à une adresse paire les données serons transmises sur le bus de données
D0-D7 mais si on accède à une adresse impaire les données seront transmises sur
D8-D15, Or avec la mémoire on veut que le Bank 0 est connecte au signal BHE et le
bank1 est lié avec A0 ( pine d'adresse). Dans le cas du 8255 on a le même problème
qu'il faut résoudre lorsque on veut connecter cette interface avec un
microprocesseur 8086.on prenons en considération le tableau suivant :
1er solution : utilisation des adresses paires : c'est-à-dire que les pines A1 et
A2 du microprocesseur seront connecté respectivement au pine A0 et A1 du
8255. Le schéma de la solution est donné comme suit :