Sunteți pe pagina 1din 17

FACULTE DES SCIENCES ET TECHNIQUES DE TANGER

DEPARTEMENT DE GENIE ELECTRIQUE


CYCLE GENIE ELECTRIQUE ET MANAGEMENT INDUSTRIEL
-----------------------------------------------------------------------------------------------------------

Module : Système à Microprocesseurs et à microcontrôleurs

Compte Rendu de TP N° 5

Réalisé par : Encadré par :


✓ ATTOU Mohamed ✓ Mr. M. JBILOU
Objectif :
L’objectif de ce TP est la maitrise de la communication entre le microprocesseur
8086 et le circuit d’interfaçage parallèle (PPI 8255). Pour cette raison, on va
essayer dans un premier temps, on va réaliser une horloge numérique contrôler par
le 8086 et on terminera par la manipulation des afficheurs LCD à deux lignes
(2*16).

Rappel sur 8255 :


Le 8255 est un circuit programmable de 40 broches (voir figure 1) d'interface
d'entrée/sortie parallèle qui a été conçu pour travailler avec les microprocesseurs de
la famille INTEL. Il est formé par trois ports d'entrées/sorties, chaque port est de 8
bits qui peuvent être programmés en entrée ou en sortie avec trois modes différents
(mode zéro, mode un et mode deux).
Remarque :
Le port C est divisé en deux port C haut et port C bas
Le schéma bloque du 8255A est donné par la figure suivante :

Le schéma bloc du 8255 montre bien qu'il est divisé en deux groupes :
Groupe A : formé par le port A et le port C haut.
Groupe B : formé par le port B et le port C bas.
Le registre de données (Data buffer Bus) assure la liaison entre le bus de
données extérieur et le registre de contrôle ainsi que les ports
d'entrées/sorties.
La sélection du 8255A se fait par l'intermédiaire de la pine CS (qui est en général
fournie par une logique de décodage qui permet la sélection du 8255A : voir plus
loin les exemples d'applications)
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 :

Le 8255 est connecté avec le système à base de microprocesseur comme le


montre la figure suivante :
Interfaçage avec le bus et mode de fonctionnement du 8255A

Manipe n°1 : Horloge numérique


1. Compteur :
Dans cette partie, on va utiliser six afficheurs 7 segments multiplexés pour
représenter les heures, les minutes et les secondes (HH :MM : SS). Pour se
familiariser avec ce genre de circuit, développer deux programmes en assembleur :
le premier pour le comptage de 00 à 99 et le deuxième de 00 à 59 avec seulement
un circuit de deux afficheurs multiplexés.
2 afficheurs 7 segments
multiplexés

Montage :

Pour utiliser l’afficheur 7 segment il faut mémoriser un tableau des chiffres de 0 à 9

P G F E D C B A Chiffre
1 1 0 0 0 0 0 0 0
1 1 1 1 1 0 0 1 1
1 0 1 0 0 1 0 0 2
1 0 1 1 0 0 0 0 3
1 0 0 1 1 0 0 1 4
1 0 0 1 0 0 1 0 5
1 0 0 0 0 0 1 0 6
1 1 1 1 1 0 0 0 7
1 0 0 0 0 0 0 0 8
1 0 0 1 1 0 0 0 9

Pour afficher les chiffres de 0 à 9 on va déclarer un tableau dans la mémoire

Voici le programme de compteur 0 à 99 :


data segment
portA equ 300H ; adresses des registres du 8255
portB equ 302H
portC equ 304H
controle equ 306H
comp db 0
tab db
11000000b,11111001b,10100100b,10110000b,10011001b,10010010b,10000010b,111
11000b,10000000b,10011000b
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax

mov dx,controle ;initialiser le porte A entree


mov al,80H
out dx,al ;envoyer la commande 10000010b au
mov comp,00h
mov si,offset tab
abc:
mov bx,offset tab
mov cx,0h
ab:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00000001b
mov dx,portB
out dx,al

mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00000010b
mov dx,portB
out dx,al

mov al,[bx]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al

inc bx
inc cx
cmp cx,10
jne ab
inc si
inc comp
mov cl,comp
cmp cl,10
jne abc

code ends
end start
2. Horloge
Pour monter l’horloge on va utiliser :

6 afficheurs 7 segments multiplexés

Le montage :

Le programme :
data segment
portA equ 300H ; adresses des registres du 8255
portB equ 302H
portC equ 304H
controle equ 306H
comp1 db 0
comp2 db 0
comp3 db 0
comp4 db 0
comp5 db 0
comp6 db 0
adre1 dw 0
adre2 dw 0
adre3 dw 0
adre4 dw 0
adre5 dw 0
adre6 dw 0

tab db
11000000b,11111001b,10100100b,10110000b,10011001b,10010010b,10000010b,111
11000b,10000000b,10011000b
data ends
code segment
assume cs:code, ds:data
start:
mov ax,data
mov ds,ax

mov dx,controle ;initialiser le porte A entree


mov al,80H
out dx,al ;envoyer la commande 10000010b au
mov comp1,00h
mov comp2,00h
mov si,offset tab
mov adre1,si
mov adre2,si
heure:
mov comp3,00h
mov comp4,00h
mov si,offset tab
mov adre3,si
mov adre4,si
minute:
mov comp5,00h
mov comp6,00h
mov si,offset tab
mov adre5,si
mov adre6,si
seconde:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00000001b
mov dx,portB
out dx,al
mov si,adre1
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00000010b
mov dx,portB
out dx,al
mov si,adre2
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00000100b
mov dx,portB
out dx,al
mov si,adre3
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00001000b
mov dx,portB
out dx,al
mov si,adre4
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00010000b
mov dx,portB
out dx,al
mov si,adre5
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,00100000b
mov dx,portB
out dx,al
mov si,adre6
mov al,[si]
mov dx,portA
out dx,al
mov al,11111111b
mov dx,portA
out dx,al
;;;;;;;;;;;
inc adre6
inc comp6
mov cl,comp6
cmp cl,10
jne seconde
;;;;;;;;;;;
mov si,offset tab
mov adre6,si
mov comp6,00h
inc adre5
inc comp5
mov cl,comp5
cmp cl,6
jne seconde
;;;;;;;;;;;
inc adre4
inc comp4
mov cl,comp4
cmp cl,10
jne minute
;;;;;;;;;;;
mov si,offset tab
mov adre4,si
mov comp4,00h
inc adre3
inc comp3
mov cl,comp3
cmp cl,6
jne minute
;;;;;;;;;;;;;;
inc adre2
inc comp2
mov cl,comp2
cmp cl,10
jne heure
;;;;;;;;;;
mov si,offset tab
mov adre2,si
mov comp2,00h
inc adre1
inc comp1
mov cl,comp1
cmp cl,2
jne heure

code ends
end start
Manipe n°2 : Afficheur LCD (16x2):
Pour commander un afficheur LCD 16*2 ( 16 caractères , 2 lignes ) on propose le
schéma du montage suivant :

Un LCD est formé essentiellement par un bus de donnée de 8 bits et un bus de


commande et contrôle formé par trois pines (E, Rd/Rw, RS) :
E : entrée de validation un front descendant sur cette pine provoque la validation
de la donnée ou de la commande.
RS : elle permet de distinguer les commandes et les données. RS = 0 le bus D0-
D7 accepte des commandes RS = 1 le bus D0-D7 accepte des données
Enfin Rd/Rw : c'est pour donner l'ordre de lecture ou écriture sur LCD. Parmi les
commandes on trouve :
de programme qui affiche le message ‘cycle ing GEMI’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
Le programme est comme suit :
Donnee SEGMENT
Message db 'cycle ing GEMI'
PortB EQU 302H
PortC EQU 304H
Reg_com EQU 306H
Mot_com EQU 80H
Donnee ENDS
Code SEGMENT
Assume CS :code , DS :donnee
start:
MOV AX,donnee ; pointer le data segment
MOV DS,AX
MOV AL,Mot_com ; configurer les ports en sorties
mov dx,Reg_com
OUT dx,AL
LEA SI,message ; Pointe le message à afficher

MOV AL,01 ; effacer LCD


mov dx,PortC
OUT dx,AL ; envoie de la donnée
MOV AL,04 ; Sous programme validation
mov dx,Portb
OUT dx,AL ; envoie de la donnée ; de la commande
MOV AL,00
mov dx,Portb
OUT dx,AL ; envoie de la donnée
MOV AL,0EH ; effectuer un Home pour LCD
mov dx,PortC
OUT dx,AL ; envoie de la donnée
MOV AL,04 ; Sous programme validation
mov dx,Portb
OUT dx,AL ; envoie de la donnée ; de la commande
MOV AL,00
mov dx,Portb
OUT dx,AL ; envoie de la donnée
MOV AL,06 ; Ecriture vers la droite
mov dx,PortC
OUT dx,AL ; envoie de la donnée
MOV AL,04 ; Sous programme validation
mov dx,Portb
OUT dx,AL ; envoie de la donnée ; de la commande
MOV AL,00
mov dx,Portb
OUT dx,AL ; envoie de la donnée
MOV CX,14 ; on 14 caractère à afficher
DEBUT :
MOV AL,[SI] ; programme principal
mov dx,PortC
OUT dx,AL ; envoie de la donnée
MOV AL,05 ; Sous programme validation
mov dx,Portb
OUT dx,AL ; envoie de la donnée ; de la donnée
MOV AL,01
mov dx,Portb
OUT dx,AL ; envoie de la donnée

INC SI

LOOP DEBUT

code ends
end start

S-ar putea să vă placă și