Fascicule de Travaux Pratiques Circuits d`Interfaces

publicité
République Tunisienne
Ministère de l’Enseignement
Supérieur
Institut Supérieur des Etudes
Technologiques de Mahdia
Fascicule de Travaux Pratiques
Circuits d’Interfaces
4ème niveau Informatique Industrielle
MOHAMED ALI KAMMOUN
Année Universitaire : 2006-2007
Version : 2.0
AVANT-PROPOS
Organisation des séances de travaux pratiques
Ce manuel rassemble une série d’exercices pratiques ayant pour but de permettre à l’étudiant
de mieux comprendre les implications pratiques de son cours de Circuits d’Interfaces.
L’accent y est mis sur l’utilisation pratique de la maquette didactique MTS-86C pour la
conception de quelques processus industriels qu’on peut les commander à travers des
interfaces associées a un microprocesseur de type i80x86. L’assembleur est en effet un
langage largement répandu depuis bien longtemps, et y reste aujourd’hui, autant dans les
universités que dans les centres de recherche et développement, ainsi que dans l’industrie.
L’ouvrage est divisé en 8 laboratoires. Les laboratoires ont pour objet de fournir aux étudiant
un certains nombres d’informations qui leurs sera utiles pour débuter leurs projets de fin
d’étude dont un nombre important est consacré à l’étude de des principes de programmation
des circuits d’interfaces. Le but de ces TP est de stimuler l’intérêt de l’étudiant pour l’usage
du langage assembleur pour la commande industrielle, à travers une démarche de synthèse
plutôt que par le biais de travaux d’analyse. Il ne s’agit donc pas ici d’illustrer le cours, mais
bien de le mettre en pratique.
Dans cette perspective, les laboratoires préparent l’étudiant à acquérir une certaine pratique de
manipuler les interfaces programmables, en le dotant d’un ensemble d’outils : programmation
assembleur, électronique, manipulation des registres internes des interfaces, etc.…. On y
aborde donc les problèmes suivants :
1. Programmation de l’interface parallèle i8255
2. Programmation de l’interface série i8251
3. Programmation d’un contrôleur d’interruption i8259
4. Programmation d’un Timer i8253
Appréciation du travail de l’étudiant
L’étudiant sera coté en fonction de son niveau de participation aux séances de laboratoires,
ainsi que de la qualité (fond et forme) de ses comptes-rendus. Ce rapport devra expliciter le
plus clairement possible :
• Les techniques utilisées : principe, structure, prévision des problèmes à résoudre pour
la mise en œuvre ;
• Les détails des modules implémentés sous la forme de fonctions ;
• Une analyse des résultats fournis.
Table des matières
PRESENTATION DU KIT MTS-86C ................................................................................................................ 2
1.
LE MATERIEL MTS8-86C ....................................................................................................................... 2
2.
LA DISQUETTE ......................................................................................................................................... 2
3.
LE MICROSYSTEME MTS-86C.............................................................................................................. 2
3.1.
3.2.
3.3.
4.
DESCRIPTION ........................................................................................................................................ 2
PLAN DE L’ESPACE MEMOIRE ................................................................................................................ 3
ADRESSAGE DES ENTREES/SORTIES ...................................................................................................... 3
LE MICROPROCESSEUR 8086............................................................................................................... 4
4.1.
ARCHITECTURE GENERALE ................................................................................................................... 4
4.2.
EXECUTION UNIT .................................................................................................................................. 5
4.3.
BUS INTERFACE UNIT ........................................................................................................................... 5
4.4.
FONCTIONNEMENT ................................................................................................................................ 6
4.5.
LES REGISTRES ..................................................................................................................................... 7
4.6.
MODE D’ADRESSAGE ............................................................................................................................ 8
4.6.1. Adressage direct en mémoire .......................................................................................................... 8
4.6.2. Adressage direct par register .......................................................................................................... 8
4.6.3. Adressage immédiat ........................................................................................................................ 9
4.6.4. Adressage indirect........................................................................................................................... 9
4.7.
JEUX D’INSTRUCTIONS ........................................................................................................................ 10
MANIPULATION 1 : INITIATION A LA PROGRAMMATION EN ASSEMBLEUR ............................. 13
1.
LA CONNEXION ENTRE LE PC ET LA CARTE MTS-86C ............................................................. 13
2.
UTILISATION DE LA FENETRE DE CONNEXION ......................................................................... 14
MANIPULATION 2 : INITIATION A LA PROGRAMMATION EN LANGAGE MACHINE................ 16
1.
BUT DU TP................................................................................................................................................ 16
2.
LE CLAVIER DE LA CARTE MTS-86C............................................................................................... 16
3.
PROGRAMMATION EN LANGAGE MACHINE ............................................................................... 17
3.1.
INITIATION .......................................................................................................................................... 17
3.2.
PROGRAMMATION EN LANGAGE MACHINE .......................................................................................... 18
3.2.1. Programme 1................................................................................................................................. 18
3.2.2. Programme 2................................................................................................................................. 19
MANIPULATION 3 : PROGRAMMATION DU 8255................................................................................... 21
1.
BUT DU TP................................................................................................................................................ 21
2.
PRESENTATION...................................................................................................................................... 21
3.
LE PPI 8255 ............................................................................................................................................... 21
3.1.
3.2.
3.3.
4.
MANIPULATION..................................................................................................................................... 22
4.1.
4.2.
5.
FONCTIONS DES BROCHES ................................................................................................................... 21
LE CONTROLE DES GROUPES ............................................................................................................... 22
LA SELECTION DES MODES .................................................................................................................. 22
EXEMPLE DE PROGRAMMATION .......................................................................................................... 22
PROGRAMMATION DE L’INTERFACE 8255 ........................................................................................... 23
ANNEXE .................................................................................................................................................... 24
MANIPULATION 4 : PROGRAMMATION DU 8251................................................................................... 27
1.
BUT DU TP................................................................................................................................................ 27
2.
PRESENTATION...................................................................................................................................... 27
3.
LE 8251....................................................................................................................................................... 27
3.1.
FONCTIONS DES BROCHES ................................................................................................................... 27
3.2.
PROGRAMMATION DU 8251 ................................................................................................................ 29
3.2.1. L’instruction de mode (Mode Instruction) .................................................................................... 29
3.2.2. L’instruction de commande (Command Instruction)..................................................................... 32
3.2.3. Définition du mot d’état (Status Read).......................................................................................... 33
3.3.
APPLICATION DU 8251........................................................................................................................ 33
4.
MANIPULATION..................................................................................................................................... 34
MANIPULATION 5 : PROGRAMMATION DU 8259................................................................................... 37
1.
BUT DU TP................................................................................................................................................ 37
2.
LES INTERRUPTIONS ........................................................................................................................... 37
3.
LE 8259....................................................................................................................................................... 37
4.
REGISTRES ET PROGRAMMATION DU 8259.................................................................................. 38
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.
4.9.
ICW1 : REGISTRE MODE DE FONCTIONNEMENT................................................................................... 38
ICW2 : REGISTRE VECTEUR D'INTERRUPTION ..................................................................................... 38
ICW3 : REGISTRE CONFIGURATION EN CASCADE ................................................................................ 39
ICW4 : REGISTRE FIN D'INTERRUPTION ............................................................................................... 39
OCW1 : REGISTRE MASQUE DES INTERRUPTIONS (LECTURE/ECRITURE) ............................................ 40
OCW2 : REGISTRE PRIORITE DES INTERRUPTIONS ............................................................................... 40
OCW3 : REGISTRE GESTION DES INTERRUPTIONS ............................................................................... 41
IRR : (INTERRUPT REQUEST REGISTER = REGISTRE DEMANDE D'INTERRUPTION) ............................... 41
ISR : (IN SERVICE REGISTER = REGISTRE INTERRUPTION EN SERVICE) ............................................... 42
5.
SIGNAUX DES ENTREES SORTIES DU 8259 .................................................................................... 42
6.
MANIPULATION..................................................................................................................................... 42
6.1.
6.2.
EXEMPLE DE PROGRAMMATION .......................................................................................................... 43
PROGRAMMATION DU 8259 ................................................................................................................ 44
MANIPULATION 6 : PROGRAMMATION DU 8253................................................................................... 46
1.
BUT DU TP................................................................................................................................................ 46
2.
LE 8253....................................................................................................................................................... 46
3.
PROGRAMMATION DU 8253................................................................................................................ 48
3.1.
FORMAT DU MOT DE CONTROLE .......................................................................................................... 48
3.1.1. Définitions des bits ........................................................................................................................ 48
3.1.2. Les modes ...................................................................................................................................... 49
3.2.
PROCEDURES DE LECTURE/ECRITURE.................................................................................................. 51
3.2.1. Procédure d’écriture ..................................................................................................................... 51
3.2.2. Procédure de lecture ..................................................................................................................... 52
4.
MANIPULATION..................................................................................................................................... 52
4.1.
4.2.
EXEMPLE ............................................................................................................................................ 52
TRAVAIL DEMANDE ............................................................................................................................ 54
MANIPULATION 7 : PROGRAMMATION DU PORT SERIE SOUS VISUAL BASIC .......................... 56
1.
PRESENTATION DU TP......................................................................................................................... 56
2.
LE MICROSOFT COMM CONTROL 6.0............................................................................................. 56
3.
LES PROPRIETES DE BASE DU MICROSOFT COMM CONTROL ............................................. 57
4.
MANIPULATION : COMMUNIQUER AVEC UN AUTRE PC VIA LE PORT COM .................... 60
5.
ANNEXE .................................................................................................................................................... 62
MANIPULATION 8 : PROGRAMMATION DE L’INTERFACE PARALLELE SOUS VISUAL BASIC
.............................................................................................................................................................................. 65
1.
INTRODUCTION ..................................................................................................................................... 65
2.
LES MODES DU PORT PARALLELE.................................................................................................. 65
3.
HARDWARE............................................................................................................................................. 65
4.
PROGRAMMATION ............................................................................................................................... 67
5.
LA THEORIE « INPOUT32.DLL » ........................................................................................................ 67
6.
MANIPULATION..................................................................................................................................... 68
6.1.
6.2.
EXEMPLE DE PROGRAMMATION .......................................................................................................... 68
PROGRAMMATION .............................................................................................................................. 69
Présentation du Kit MTS-86C
Objectif :
Cette partie est consacrée à la présentation du Kit MTS-86C. Ce kit sera utilisé par la suite
comme matérielle au cours des séances de travaux pratiques « Circuits d’Interfaces ». Cette
présentation rappelle l’étudiant des notions de la programmation assembleur basée sur les
instructions du 8086.
Matériels utilisés :
-
Le kit MTS-86C.
-
Un ordinateur PC ou compatible doté d’un port de communication série.
Logiciel :
-
Système d’exploitation Microsoft Windows.
Durée :
1H30mn
Med Ali KAMMOUN
Présentation du Kit MTS-86C
Présentation du Kit MTS-86C
Le système MTS-86C est développé autour du microprocesseur 8086 de INTEL. Il reprend dans son architecture
les principales caractéristiques (matériel et logiciel) qui ont fait le succès du MTS-86C. Il comprend :
1. Le matériel MTS8-86C
Cette carte est équipée de :
- Un microprocesseur 8086.
- Une mémoire RAM de 64 Ko.
- Une mémoire ROM de 64 Ko.
- Une interface parallèle 8255 (3).
- Une interface série 8251 (2).
- Une interface TIMER 8253.
- Un contrôleur de clavier 8279.
- Un convertisseur analogique/numérique ADC0809.
- Un convertisseur numérique/analogique DAC0808.
- Un clavier de 24 touches.
- Un afficheur LCD (16x2lignes).
- Des diodes et un afficheur 7 segments.
- 2 hauts parleurs.
- 2 connecteurs parallèles.
- 2 connecteurs séries.
- Un port d’extension.
2. La disquette
La disquette fournie avec le kit de développement MTS-86C comporte des exemples en assembleur ainsi que le
manuel expliquant le procédé de communication entre le PC et le MTS-86C.
La disquette comporte aussi :
- Un éditeur de texte (Ne.exe).
- Les utilitaires de compilation (Bin2hex.exe, Exe2bin.exe, Link.exe, Masm.exe).
La connexion doit être effectuée à travers un ordinateur PC ou compatible auquel on connecte la carte MTS-86C
à travers la ligne série (Com1 ou Com2). Avec le système MTS-86C on peut :
- Développer des programmes pour le microprocesseur 8086.
- Ecrire des applications de gestions des différents périphériques du système : liaison série, liaison
parallèle, compteur (TIMER).
- Tester une autre application à base du 8086 en la reliant à la carte MTS-86C.
3. Le microsystème MTS-86C
3.1. Description
Le clavier et l’afficheur LCD
Le clavier comporte 16 touches pour les digits hexadécimaux et 8 touches fonctions. Le clavier et l’afficheur
permettent une utilisation du système MTS-86C en mode autonome. On peut rentrer le programme en hexa sur le
clavier et visualiser le contenu de la mémoire sur l’afficheur.
Le moniteur
ISET Mahdia
Informatique Industrielle 4ème niveau
2
Med Ali KAMMOUN
Présentation du Kit MTS-86C
Le système MTS-86C est piloté par un moniteur en ROM. En mode autonome, le moniteur assure la gestion de
la saisie du clavier, l’affichage du contenu de la mémoire ou des messages de dialogues et l’exécution des
commandes de l’utilisateur. En mode liaison, le moniteur assure le dialogue avec le PC et l’exécution des
requêtes de celui-ci (chargement de programme utilisateur en RAM, exécution du programme, lecture/écriture de
la mémoire et des ports,…).
La mémoire RAM
Le MTS-86C possède une RAM de 64 Ko (de 00000H jusqu’à 0FFFFH) et une EPROM utilisée comme une
ROM système.
Le moniteur utilise les cases mémoires s’étendant de F8000H jusqu’à FDFFFH, le programme principal (pour le
contrôle du clavier) utilise les cases de FE000H jusqu’à FFFFFH.
Les adresses de la mémoire utilisateur est E0000H-EFFFFHet elle est utilisée par le ROM et la RAM.
3.2. Plan de l’espace mémoire
FFFFFH
F8000H
EFFFFH
E0000H
DFFFFH
10000H
FFFFH
400H
3FFH
0H
MONITOR PROGRAM
Exercise Program
ROM
USER MEMORY
ROM, RAM
OPEN
User program
RAM
INTERRUPT VECTOR TABLE
3.3. Adressage des Entrées/Sorties
ISET Mahdia
Informatique Industrielle 4ème niveau
3
Med Ali KAMMOUN
Adresse du port
FFFFH
FFFDH
FFFBH
FFF9H
FFFEH
FFFCH
FFFAH
FFF8H
FFF2H
FFF0H
FFFAH
FFE8H
FFDEH
FFDCH
FFDAH
FFD8H
FFD2H
FFD0H
FFCAH
FFC8H
3FF0H
3FD8H
3FD6H
3FD4H
3FD2H
3FD0H
3FCEH
3FCCH
3FCAH
3FC8H
Présentation du Kit MTS-86C
Fonction du port
PPI-1 Control Word Resister
PPI-1 C port
PPI-1 B port
PPI-1 A port
PPI-2 Control Word Resister
PPI-2 C port
PPI-2 B port
PPI-2 A port
8251-1 command
8251-1 data
8279 Status OR command
8279 Data
8253 command
8253 count2
8253 count1
8253 count0
8251-2 command
8251-2 data
8259 command
8259 data
FND
D/A converter
PPI-3 Control Word Resister
PPI-3 C port
PPI-3 B port
PPI-3 A port
A/D converter IN3 or IN7
A/D converter IN2 or IN6
A/D converter IN1 or IN5
A/D converter IN0 or IN4
Parallel I/O No 1
Parallel I/O No 2
RS232C port 1
Keypad control
Counter & Timer
RS232C port 2
Interrupt control
Display
8 bits D/A converter
Parallel I/O No 3
<for experiment>
8 bits A/D converter
4. Le microprocesseur 8086
Le 8086 a initié l'avènement de la famille des microprocesseurs Intel 80x86. Bien que sa conception s'appuie sur
celle des microprocesseurs 8 bits qui l'on précédé (i.e. le 8080 et le 8085), il n'est pas directement compatible
avec eux.
Le 8086 a été le premier microprocesseur 16 bits à être largement utilisé, et son implantation au sein des
premiers IBM PC lui a permis d'imposer sa famille au premier rang des microprocesseurs 16 bits. Ses
successeurs ont alors largement profité de leur compatibilité logicielle, pour s'assurer la fidélité d'une large base
installée.
4.1. Architecture générale
Le séquenceur du 8086 est micro programmé, mais comporte également de nombreuses fonctions câblées, de
manière à optimiser la taille du microcode. Les micro-instructions sont de type vertical, d'une largeur de 21 bits.
La ROM de microprogramme comporte 504 micro-instructions. L'adresse de début du microcode d'une
instruction est obtenue à l'aide d'un PLA.
Le 8086 comporte deux unités fonctionnelles susceptibles de travailler en parallèle : l'unité d'interface bus (BIU Bus Interface Unit) et l'unité d'exécution (EU - Execution Unit).
ISET Mahdia
Informatique Industrielle 4ème niveau
4
Med Ali KAMMOUN
Présentation du Kit MTS-86C
4.2. Exécution Unit
L'unité arithmétique et logique peut être chargée à partir de trois registres temporaires (TMPA, TMPB, TMPC)
et effectuer des opérations sur des mots de 8 bits ou de 16 bits. Le résultat d'un opératiopn pourra être stocké
dans un de ces trois registres, ou dans n'importe quel autre registre situé sur le bus de données interne. Ces
registres, tous d'une largeur de 16 bits, se décomposent en quatre registres d'intérêt général nommés AX, BX,
CX et DX, deux pointeurs de pile (SP et BP), et deux registres d'index (SI et DI).
Ces registres sont interfacés au bus de données interne à travers un opérateur [X] permettant si nécessaire de
permuter les 8 bits de poids forts avec les 8 bits de poids faibles d'un mot de 16 bits lors d'un transfert, et ce dans
les deux sens (lecture/écriture).
4.3. Bus Interface Unit
L'unité d'interface Bus sert à calculer les adresses. Cette unité comporte deux registres temporaires pour le calcul
d'adresses en adressage indirect, quatre registres de segments (DS, CS, SS et ES), le compteur programme (IP Instruction Pointer), et une pile de 6 octets pour stocker les codes opération et les données en attente.
Une petite ROM fournit des constantes courantes, par exemple 1 pour incrémenter IP.
ISET Mahdia
Informatique Industrielle 4ème niveau
5
Med Ali KAMMOUN
Présentation du Kit MTS-86C
4.4. Fonctionnement
Les deux unités (BIU et EU) fonctionnent en parallèle en préchargeant les instructions dans la pile de l'unité
d'interface. Cette pile de type FIFO (First-In First-Out) permet d'aller chercher jusqu'à 6 octets en avant de
l'instruction en cours de traitement ce qui résulte en une optimisation de l'utilisation des bus. Pour exécuter une
instruction de saut, il est nécessaire de vider la pile, puisque les instructions préchargées n'ont pas à être
exécutées.
Le préchargement des instructions peut singulièrement compliquer le déverminage d'un système à base de 8086,
puisque l'activité du bus n'est pas directement reliée à l'activité de l'unité d'exécution. Certaines instructions qui
ont été chargées peuvent n'être jamais exécutées, ou alors plusieurs cycles mémoire plus tard.
ISET Mahdia
Informatique Industrielle 4ème niveau
6
Med Ali KAMMOUN
Présentation du Kit MTS-86C
4.5. Les registres
Bien que l'ensemble des registres de l'unité d'exécution soient relativement interchangeables, certaines
instructions ou classes d'instructions existent qui exploitent plus particulièrement l'un ou l'autre des registres. Ces
cas particuliers, qui tendent à spécialiser chacun des registres sont présentés ci-dessous.
AX : C’est l'accumulateur. Il est plus particulièrement utilisé pour les opérations avec l'unité arithmétique et
logique. Les autres registres peuvent également être utilisés dans ce but, mais les instructions correspondantes
sont plus longues et plus lentes.
BX : C’est un registre d'index amené à contenir des adresses pour pointer sur la mémoire.
CX : Cest optimisé pour contenir un compteur de boucle. Il sera automatiquement décrémenté à chaque itération
et la boucle s'arrêtera automatiquement lorsque son contenu sera nul.
DX : C’est utilisé pour contenir les poids forts d'opérandes sur 32 bits (AX contiendra alors les 16 bits de poids
faible) lors de multiplications 16 bits (résultat sur 32 bits) ou de divisions (dividende sur 32 bits).
Chacun des registres ci-dessus peut être considéré comme l'association de deux registres 8 bits, et être utilisé
comme tel. On parlera alors respectivement de AH et AL (respectivement poids forts et poids faibles de AX), de
BH et BL (poids forts et poids faibles de BX) etc... Ces registres 8 bits sont une réminiscence du 8080.
Les registres SI et DI sont utilisés par des instructions de traitement de chaînes de caractères. Une chaîne de
caractères est constituée par de nombreux octets consécutifs en mémoire (les codes ASCII des caractères).
Une opération de ce type requiert en général l'adresse de la chaîne source spécifiée dans SI (Source Index)
donnée par rapport au registre de segment DS (Data Segment), et l'adresse de la chaîne de destination dans DI
(Destination Index) par rapport au registre de segment ES (Extra Segment).
BP et SP sont en principe destinés à gérer la pile. En général, lors d'un appel de sous-programme, on stocke dans
la pile non seulement l'adresse de retour, mais également les paramètres passés au sous-programme.
Dans ce cas, BP (Base Pointer) pointe au bas du paquet d'informations passées au sous-programme, et SP (Stack
Pointer) indique comme d'habitude le sommet de la pile. Une variable peut ainsi être aisément retrouvée avec
une adresse relative à BP.
Les quatre registres de segment et le compteur programme, parties de l'unité d'interface bus ont déjà été évoqués.
Le registre de codes condition contient les indicateurs suivants :
OF - Overflow Flag - Signale un dépassement lors d'opérations arithmétiques signées.
DF - Direction Flag - Donne la direction lors d'opérations sur des chaînes.
IF - Interrupt Flag - Autorise ou masque les interruptions externes.
TF - Trap Flag - Utilisé pour la mise au point en mode pas-à-pas.
SF - Sign Flag - Donne le signe du résultat d'une opération.
ZF - Zero Flag - Indique si le résultat d'une opération est nul.
AF - Auxilliary carry Flag - Indicateur de retenue auxilliaire, utilisé lors d'opérations arithmétiques en code
BCD.
PF - Parity Flag - Donne la parité du résultat d'une opération.
CF - Carry Flag - Indique un dépassement lors d'opérations arithmétiques non signées.
ISET Mahdia
Informatique Industrielle 4ème niveau
7
Med Ali KAMMOUN
Présentation du Kit MTS-86C
4.6. Mode d’adressage
4.6.1. Adressage direct en mémoire
L'instruction spécifie l'adresse de la donnée en mémoire. Sauf contre-indication, l'adresse physique est
déterminée par rapport au registre de segment DS.
L'exemple ci-dessous illustre l'utilisation d'expressions constantes correspondant à des opérandes de type "direct
memory".
table
.DATA
DB
.CODE
mov
mov
mov
"Ceci est un message"
ax,table ; ax <-- "C"
ax,table+5 ; ax <-- "e"
ax,table[9] ; ax <-- "u"
Il est important de comprendre que dans cet exemple l'adresse spécifiée est bien une constante, c'est l'assembleur
qui calcule par exemple l'offset de table+5 ou de table[9], et lors de l'exécution le processeur voit une constante.
Les labels définis dans le segment de données représentent une valeur à une adresse, tandis que les labels définis
dans le segment de code représentent l'adresse elle-même. Cette subtilité est illustrée par l'exemple suivant :
truc
.DATA
DW
suite
.CODE
mov
mov
ax,truc
; ax <-- valeur(truc) = suite
bx,OFFSET truc ; bx <-- adresse(truc)
jmp
jmp
jmp
jmp
truc
suite
ax
[bx]
; ip <-- valeur(truc) = suite
; ip <-- suite
; ip <-- (ax) = suite
; ip <-- ((bx)) = (adresse(truc)) = suite
suite :
Les quatre instructions de saut reviennent à charger la même valeur dans le compteur programme IP.
Pour spécifier une adresse à l'aide d'une constante numérique, il faut obligatoirement spécifier le segment de
référence :
mov
ax,100h
; ax <-- 100h
mov
ax,[100h] ; ax <-- 100h
mov
mov
ax,DS:100h ; ax <-- (DS:100h)
ax,DS:[100h] ; ax <-- (DS:100h)
4.6.2. Adressage direct par register
Ce mode d'adressage s'applique lorsque la (ou les) donnée(s) se trouve(nt) déjà dans un registre.
Source et destination sont "register direct" ...
add
mov
xor
ISET Mahdia
ax,bx
ds,ax
ah,bl
; ax <-- (ax) + (bx)
; ds <-- (ax)
; ah <-- (ah) [+] (bl)
Informatique Industrielle 4ème niveau
8
Med Ali KAMMOUN
Présentation du Kit MTS-86C
Seule la source est "register direct" ...
mem
table
.DATA
db
dq
0eaH
0fedcba9876543210h
.CODE
and
sub
mem,dx
; mem <-- (mem) . (dx)
table[bx][si],ax ; table+(bx)+(si)<--(table+(bx)+(si))-(ax)
Seule la destination est "register direct" ...
compt
dw
01234h
shl
cmp
ax,1
; ax <-- (ax) << 1
cx,compt ; indicateurs pour (cx)-(compteur)
Instructions à opérande unique :
mul
pop
inc
bx
cx
ah
; dx,ax <-- (ax) x (bx)
; cx <-- ((sp)), sp <-- (sp)+2
; ah <-- (ah) + 1
Note : lorsqu'une instruction admet deux opérandes, au moins l'un des opérandes doit être spécifié en
adressage direct par registre.
4.6.3. Adressage immédiat
La donnée est spécifiée directement dans le corps du programme :
mov
ax,247h
; ax <-- 247h
add
ax,52ah
; ax <-- (ax) + 52ah
and
ax,100h
; ax <-- (ax) . 100h
Ou encore, en utilisant des symboles :
un
equ
1
; un = 1
mov
add
and
ax,un
ax,un
ax,un
; ax <-- un
; ax <-- (ax) + un
; ax <-- (ax) . un
4.6.4. Adressage indirect
L'instruction spécifie un registre dans lequel se trouve l'adresse de la donnée.
Seuls les registres BX, BP, SI et DI peuvent être utilisés en mode indirect. Par défaut le segment utilisé est DS
sauf avec BP qui utilise SS.
valeur
.DATA
DW
1234h
.CODE
mov
mov
si, OFFSET valeur
ax,[si]
ISET Mahdia
; si <-- adresse(valeur)
; ax <-- ((si)) = 1234h
Informatique Industrielle 4ème niveau
9
Med Ali KAMMOUN
Présentation du Kit MTS-86C
4.7. Jeux d’instructions
ISET Mahdia
Informatique Industrielle 4ème niveau 10
Med Ali KAMMOUN
ISET Mahdia
Présentation du Kit MTS-86C
Informatique Industrielle 4ème niveau 11
Initiation à la programmation assembleur
Objectif :
L’objectif de cette manipulation est de rappeler l’étudiant les notions de la programmation
assembleur selon les instructions du 8086. On procèdera par la suite à introduire la procédure
d’utilisation du Kit MTS-86C en utilisant des programmes assembleur simples. A la fin de la
manipulation l’étudiant sera capable de :
•
Ecrire un programme assembleur ;
•
Etablir la connexion entre le PC et le Kit ;
•
Compiler le programme éditer et créer le fichier hexadécimal ;
•
Transférer le fichier vers le Kit à travers une connexion série et le
logiciel HyperTerminal de Windows.
Matériels utilisés :
-
Le Kit MTS-86C.
-
Un PC ou compatible doté d’un port de communication série.
Logiciels :
-
Microsoft Windows.
-
Hyper Terminal.
Durée :
1H30mn
Med Ali KAMMOUN
Initiation à la programmation en assembleur
Manipulation 1 : Initiation à la programmation
en assembleur
1. La connexion entre le PC et la carte MTS-86C
Vous trouvez sur votre disque dur un répertoire nommé « MTS-86C »
 Travail demandé :
•
•
•
Ouvrez le fichier Mts-86C link-PC.pdf et lisez son contenu.
Décrivez les étapes de connexion entre le PC et la carte MTS-86C.
Tapez « H » en ligne de commande pour visualiser l’aide des commandes et décrivez-les
brièvement.
 On rappelle la forme d’un programme assembleur qui s’écrit comme suit :
CODE SEGMENT
;start of logic segment
ASSUME CS:CODE, DS:CODE
ORG 0
START: MOV AX,CX
MOV DS,AX
MOV ES,AX
; starting address
;agreement segment
…………………(Votre code)…………………
MOV AH,4CH
INT 21H
CODE ENDS
END
;go to serial monitor program after finished program
; end of logical segment (CS)
; end of program
 Editez alors le programme en assembleur suivant :
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 0
START: MOV AX,CX
MOV DS,AX
MOV ES,AX
MOV AL,00000101b
MOV BL,0Ah
MOV CL,10o
ADD AL,BL
SUB AL,CL
MOV AH,4CH
INT 21H
CODE ENDS
END
ISET Mahdia
Informatique Industrielle 4ème niveau 13
Med Ali KAMMOUN
Initiation à la programmation en assembleur
 Présenter par un organigramme les étapes de compilation d’un programme assembleur. Créer alors un
fichier Batch « .bat » permettant la création du fichier « hex » en utilisant les exécutables Bin2hex.exe,
Exe2bin.exe, Masm.exe et link.exe. Dressez un organigramme représentant les étapes de création du
fichier « hex ».
 Vous êtes maintenant connectés à la carte, transférez le fichier « hex » vers la carte.
2. Utilisation de la fenêtre de connexion
 Faire un tournage à la main du programme précédant et calculer la valeur de AX, BX et CX à chaque
instruction.
 Vérifiez vos résultats en compilant le programme ci-dessus étapes par étapes et en visualisant le
contenu des registres AX, BX et CX à chaque instruction en utilisant les commandes de la fenêtre de
connexion.
Etapes
1
2
3
4
5
6
AX
BX
CX
 Quel(s) sont (est) le(s) type(s) d’adressage utilisés dans ce programme.
 Donner le programme en assembleur permettant d’implanter l’organigramme suivant :
 Editer votre programme et transférer-le vers la carte MTS-86C.
 Retirer les valeurs des registres à chaque pas.
 Conclure.
ISET Mahdia
Informatique Industrielle 4ème niveau 14
Initiation à la programmation en langage
machine
Objectifs :
L’objectif de cette manipulation est de rappeler l’étudiant les notions de la programmation en
langage machine. On procèdera par la suite à introduire la procédure d’utilisation du Kit
MTS-86C en utilisant seulement les touches du clavier pour saisir des programmes simples. A
la fin de la manipulation l’étudiant sera capable de :
•
Ecrire un programme en langage machine ;
•
Utiliser le clavier du Kit MTS-86C ;
•
Saisir un programme en langage machine ;
•
Comparer l’utilisation du langage machine et du langage assembleur.
Matériels utilisés :
-
Le Kit MTS-86C.
Durée :
1H30mn
Med Ali KAMMOUN
Initiation à la programmation en langage machine
Manipulation 2 : Initiation à la programmation
en langage machine.
1. But du TP
Au cours de ce TP on va essayer de toucher de près la programmation en langage machine en utilisant le clavier
de la carte de MTS-86C.
2. Le clavier de la carte MTS-86C
Le clavier de la carte MTS-86C comporte 24 touches et il apparaît comme suit :
Touches de fonctions
Touches Hexadécimales
RESET
NMI
C
/IP
D
/FL
E
F
+
-
8
IW/CS
9
OW/DS
A
/SS
B
/ES
:
REG
4
IB/SP
5
OB/BP
6
MV/SI
7
EW/DI
,
.
0
EB/AX
1
ER/BX
2
GO/CX
3
ST/DX
Les touches de fonctions
Touches
RESET
NMI
+
:
REG
,
.
ISET Mahdia
Description
La touche RESET vous permet d’initialiser la carte MTS-86C. Quand
la touche est pressée le 8086 envoie un message sur le LCD et le
monitor est près.
La touche NMI génère une interruption non masquable de type 2.
La touche + vous permet d’additionner 2 valeurs hexadécimale.
La touche – vous permet de substituer une valeur hexadécimale d’un
autre.
Cette touche vous permet de séparer une adresse entrée sur deux
parties ; la valeur de segment ou de l’offset.
Cette touche vous permet d’utiliser les contenus des registres du 8086
comme une adresse ou une donnée en entrée.
Cette touche sépare les entrées saisies à partir des touches du clavier et
incrémente l’adresse mémoire à chaque entrée.
Lorsque cette touche est appuyée la commande courante est exécutée.
Notez que lorsque la touche GO est appuyée, le 8086 lance l’exécution
à partir de l’adresse spécifiée quand la touche est pressée.
Informatique Industrielle 4ème niveau 16
Med Ali KAMMOUN
Initiation à la programmation en langage machine
Les touches hexadécimales
Touche Hexadicimale
0 EB/AX
1 ER/BX
2 GO/CX
3 ST/DX
4 IB/SP
5 OB/BP
6 MV/SI
7 EW/DI
8 IW/CS
9 OW/DS
A /SS
B /ES
C /IP
D /FL
E
F
Commande
Acronyme
EB
ER
GO
ST
IB
OB
MV
EW
IW
OW
non
non
non
non
non
non
Registre
Nom
Acronyme
Examine par Octet AX
Examine le registre BX
Go
CX
Un pas (STEP)
DX
Entrée Octet
SP
Sortie Octet
BP
Move
SI
Examine par Word DI
Entrée Word
CS
Sortie Word
DS
N/A
SS
N/A
ES
N/A
IP
N/A
FL
N/A
non
N/A
non
Nom
Examine par Octet
Base
Compteur
Données
Stacker Pointer
Base Pointer
Source Index
Destination Index
Code Segment
Data Segment
Stack Segment
Extra Segment
Pointeur d'instruction
Flag
N/A
N/A
3. Programmation en langage machine
3.1. Initiation
Soit le programme en assembleur suivant :
CODE SEGMENT
ASSUME CS : CODE, DS : CODE
MOV AX,1254H
MOV BX,4567H
MOV CX,AX
MOV AX,BX
MOV BX,CX
HLT
CODE ENDS
END
L’équivalent en hexadécimal de ce code est donné comme suit :
B8 54 12
BB 67 45
8B C8
8B C3
8B D9
F4
L’édition de ce code hexadécimal est possible grâce au clavier de notre Kit MTS-86C.
 L’insertion du programme à l’adresse 00H se fait en appuyant sur la séquence des boutons suivants :
EB – 1 – 0 – 0 - : - 0 - , (le «-»c’est pour séparer les boutons)
ISET Mahdia
Informatique Industrielle 4ème niveau 17
Med Ali KAMMOUN
Initiation à la programmation en langage machine
 Le programme doit être inséré en appuyant sur les boutons suivants :
; MOV AX,1254H
B–8-,
5–4-,
1–2-,
; MOV BX,4567H
B–B-,
6–7-,
4–5-,
; MOV CX,AX
8–B-,
C–8-,
; MOV AX,BX
8–B-,
C–3-,
; MOV BX,CX
8–B-,
D–9-,
;HLT
F–4-.
 Pour exécuter le programme pas à pas (mode STEP), il suffit d’appuyer sur la séquence des boutons
suivants :
ST – 1 – 0 - 0 - : - 0 - , - .
 On examine le contenu des registres AX, BX, CX, …en appuyant sur les touches suivantes :
ER – AX - , - , - .
 Pour passer à l’étape suivante il suffit d’appuyer une autre fois sur « , » suivi d’un « . ».
 Que fait ce programme ? Enregistrer les résultats.
3.2. Programmation en langage machine
3.2.1. Programme 1
Soit le programme en assembleur suivant :
MOV AL,11111111B
SHL AL,1
SHR AL,1
MOV AL,10001000B
ISET Mahdia
Informatique Industrielle 4ème niveau 18
Med Ali KAMMOUN
Initiation à la programmation en langage machine
MOV CL,3
SAR AL,CL
MOV AL,10000000B
ROL AL,1
ROR AL,1
MOV AL,10000000B
RCL AL,1
RCR AL,CL
HLT
 Dressez un organigramme expliquant le fonctionnement de ce programme.
 Emulez le programme et enregistrez les valeurs des registres AX et CX à chaque instruction.
 On vous donne l’équivalant en langage machine du programme ci-dessus :
Adresse
0000
0002
0004
0006
0008
000A
000C
000E
0010
0012
0014
0016
0018
Langage machine
B0 FF
D0 E0
D0 E8
B0 88
B1 03
D2 F8
B0 80
D0 C0
D0 C8
B0 80
D0 D0
D2 D8
F4
 Insérez le programme ci-dessus depuis l’adresse 00H.
 Enregistrez les valeurs des registres AX et CX à chaque instruction.
 Exécutez le programme complet avec le bouton [GO] et vérifiez vos résultats.
3.2.2. Programme 2
Soit le programme écrit en langage machine suivant :
Adresse
0000
0003
0004
0005
0006
0007
0008
0009
Â
Â
Â
Â
Â
Langage machine
B8 03 00
48
48
48
48
48
48
F4
Insérez le programme à l’adresse 100H :0H.
Enregistrez les valeurs du registre AX à chaque instruction.
Que fait ce programme ?
Donnez son équivalant en assembleur.
Vérifiez vos résultats et conclure.
ISET Mahdia
Informatique Industrielle 4ème niveau 19
Programmation du 8255
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les principes de la
programmation de l’interface parallèle 8255. L’expérimentation porte sur un port parallèle
implémenté sur le Kit MTS-86C et qui est piloté par un 8255. Le rôle de l’étudiant est de
manipuler ce port en écrivant des codes en assembleur permettant de commander des diodes
ou recevoir des informations depuis des boutons poussoirs. Dans une deuxième étape
l’étudiant devra commander un moteur pas-à-pas via cette interface en utilisant une carte
d’extension connectée sur le port parallèle du Kit.
Matériels utilisés :
-
Le Kit MTS-86C.
-
Un PC ou compatible doté d’un port de communication série.
-
Une carte d’extension fournie avec le Kit.
-
Un moteur pas-à-pas ou une plaque d’essais avec 4 diodes.
Logiciels :
-
Microsoft Windows
-
Hyper Terminal
Durée :
1ère étape : 3H00mn
2ème étape : 1H30mn
Med Ali KAMMOUN
Programmation du 8255
Manipulation 3 : Programmation du 8255
1. But du TP
Le but de cette manipulation est de se familiariser avec l’utilisation de l’interface de communication parallèle
8255 intégrée au système MTS-86C.
2. Présentation
Les échanges entre le microprocesseur et son environnement externe (clavier, écran, imprimante,…) se font à
l’aide de circuits d’interface appelés souvent « coupleurs d’Entrées/Sortie ». Ces échanges peuvent être effectués
en parallèle ou en série.
Dans le cadre de cette manipulation, nous allons utilisé un coupleur pour liaison parallèle de la famille 8200 de
Intel : il s’agit du PPI (Programmable Peripheral Interface) 8255.
3. Le PPI 8255
Le Intel 8255 est une interface programmable d’entrée/sortie destiné à l’utilisation avec les microprocesseurs
Intel. Elle possède 24 pins d’entrées/sorties programmable par deux groupes de 12 pins chacun et elle peut être
utilisée en 3 modes.
Dans le premier mode (MODE 0), chaque groupe de 12 pins peut être programmé par lot de 4 broches en entrée
ou en sortie. Dans le (MODE 1), le deuxième mode, chaque groupe peut être programmé de sorte que 8 lignes
soient configurées en entrées ou en sorties. Le troisième mode, (MODE 2), est un mode bidirectionnel où 8
lignes sont utilisées comme bus bidirectionnel.
3.1. Fonctions des broches
Data Bus Buffer
Ce bus bidirectionnel à 3 états est utilisé pour interfacer le 8255 au bus du système. Les données sont transmises
et reçues via le buffer suivant l’instruction de input ou de output générée par le microprocesseur. Le Control
Word et les informations de configuration sont aussi transmis via ce bus.
Read/Write et Control logic
La fonction de ce bloc est de gérer tous les transferts, internes et externes, des données, de contrôle ou du Status
Words.
__
CS
Cette broche, active à l’état bas, permet la communication entre le 8255 et le CPU.
__
RD
Cette broche, active à l’état bas, permet au 8255 de transférer les données ou les informations de configurations
au CPU via le data bus.
__
WR
Cette broche, active à l’état bas, permet au microprocesseur d’envoyer des données ou le Control Words vers le
8255.
ISET Mahdia
Informatique Industrielle 4ème niveau 21
Med Ali KAMMOUN
Programmation du 8255
A0 et A1
Ces broches d’entrées, conjuguées aux broches WR et RD, contrôlent la sélection des ports (A, B ou C) ou du
registre du Control Word.
A1
A0
__
__
__
RD
WR
CS
Opérations d’Input (Lire)
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
x
1
x
x
1
x
x
0
1
x
1
1
1
0
0
Port A->Data Bus
Port B->Data Bus
Port C->Data Bus
Opérations d’Output (Ecrire)
Data Bus -> Port A
Data Bus -> Port B
Data Bus -> Port C
Data Bus -> Control
Fonctions de désactivation
Data Bus -> 3 états
Condition illégale
Data Bus -> 3 états
3.2. Le contrôle des groupes
Le CPU envoie un Control Word vers le 8255 pour configurer les ports. Le Control Word contient des
informations comme : le mode, le bit set, le bit reset, etc.…
Chaque bloc de contrôle (Groupe A et Groupe B) accepte les commandes depuis le Read/Write Control logic, et
reçoit le Control Word depuis le bus interne des données et envoie les commandes au port qui lui est associé.
Le Groupe A de Contrôle --- Port A et Port C (de poids fort) [C7-C4].
Le Groupe B de Contrôle --- Port B et Port C (de poids faible) [C3-C0].
3.3. La sélection des modes
Il existe 3 modes d’utilisation de l’interface 8255 : Le Mode 0, le Mode 1 et le Mode 2.
Quand l’entrée RESET est à l’état haut, tous les ports sont configurés en entrée. Si l’entrée RESET est
désactivée, l’interface 8255 garde son état (en entrée) sans aucune initialisation préalable.
Les modes des ports A et B peuvent être configurés séparément. Cependant le port C est divisé en deux groupes
configurés suivants les besoins des ports A et B. (voir annexe)
4. Manipulation
Le système MTS-86C dispose de 3 interfaces parallèles programmable 8255. L’interface n°3 (PPI-3) est utilisée
pour l’expérimentation et elle est connectée aux diodes et aux boutons SW suivant les schémas électroniques
disponible en annexe.
D’après ces schémas, le port A est donc connecté aux boutons SW et le port B est connecté aux diodes via les
circuits 74LS240.
4.1. Exemple de programmation
Supposons que l’on veut écrire un programme en assembleur qui nous permet d’allumer la diode LED en
appuyant sur le bouton SW correspondant.
Le programme s’écrit alors comme suit :
ISET Mahdia
Informatique Industrielle 4ème niveau 22
Med Ali KAMMOUN
Programmation du 8255
CNT3 EQU 3FD6H; Assignation des adresses des ports
APORT3 EQU 3FD0H
BPORT3 EQU 3FD2H
CODE SEGMENT
ASSUMECS:CODE,DS:CODE
ORG 0
START : MOV SP,4000H
; Configuration du Stack Pointer
MOV AL,90H
; Configuration du Control Word du 8255
;(Port A=Input, Port B et C=Output)
MOV DX,CNT3
;Configuration du port de sortie
OUT DX,AL
; Ecriture du Control Word
J1:
MOV DX,APORT3 ; Configuration du port d’entrée
IN AL,DX
; Faire entrer les données
NOT AL
; Inverser le signal
MOV DX,BPORT3 ; Configuration du port de sortie
OUT DX,AL
; Faire sortir les données
JMP J1
; Reboucler vers J1
CODE ENDS
END START
 Tester le bon fonctionnement du programme précédant sur la carte MTS-86C.
4.2. Programmation de l’interface 8255
 Ecrire un programme permettant d’allumer toutes les LEDS.
 Ecrire un programme permettant d’afficher le nombre hexadécimal 95 sur les 8 LEDS.
 Ecrire un programme permettant d’alterner l’allumage des diodes de droite à gauche en continu (On
allume les 4 diodes de droite puis de gauche et on reprend).
 Modifier le programme précédent pour réaliser l’alternance 10 fois seulement.
 Soit à réaliser un chenillard sur le port B de la PPI 8255. Le principe est le suivant :
Etape1
Etape2
Etape3
Etape4
Etape5
Etape6
Etape7
Etape8
Etape9
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
Le 1 représente une LED éteinte et le 0 une LED allumé. Ecrire ce programme en utilisant l’instruction de
décalage adéquate. Conclure.
 Modifier le programme précédent pour n’exécuter ce défilement que 3 fois.
 Rédiger une conclusion générale à propos de cette manipulation.
ISET Mahdia
Informatique Industrielle 4ème niveau 23
Med Ali KAMMOUN
Programmation du 8255
5. Annexe
Format du Control Word en MODE 0
Format du Control Word en MODE 1
ISET Mahdia
Informatique Industrielle 4ème niveau 24
Med Ali KAMMOUN
Programmation du 8255
Format du Control Word en MODE 2
ISET Mahdia
Informatique Industrielle 4ème niveau 25
Programmation du 8251
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les principes de la
programmation de l’interface série 8251. L’expérimentation porte le port série implémenté sur
le Kit MTS-86C qui est piloté par un 8251. Le rôle de l’étudiant est de manipuler ce port en
écrivant des codes en assembleur permettant d’envoyer ou de recevoir des caractères entre le
Kit et le PC.
Matériels utilisés :
-
Le Kit MTS-86C.
-
Un PC ou compatible doté d’un port de communication série.
Logiciels :
-
Microsoft Windows
-
Hyper Terminal
Durée :
3H00mn
Med Ali KAMMOUN
Programmation du 8251
Manipulation 4 : Programmation du 8251
1. But du TP
Cette manipulation est une initiation à l’utilisation d’une interface de communication série programmable type
8251.
2. Présentation
Dans le cadre de cette manipulation, nous allons utilisé un coupleur pour liaison série de la famille 8200 de
Intel : il s’agit du USART (Universal Synchronous/Asynchronous Receiver/Transmitter) 8251.
3. Le 8251
Le Intel 8251 est une interface programmable d’entrée/sortie destinée à l’utilisation avec les microprocesseurs
Intel. Le 8251 est une interface programmable par le CPU et utilise toutes les techniques de transmissions séries
déjà développées (y compris le standard IBM « bi-sync »). Le 8251 accepte les données du CPU en format
parallèle et les convertis en format série prête à l’émission. En même temps, l’interface peut convertir les
données reçues sous format séries en données en format parallèle pour la transmission vers le CPU. Le USART
fait signe au microprocesseur quand il reçoit un caractère à transmettre ou en cas où il va envoyer un caractère
vers le CPU. Le processeur peut savoir le statut de l’interface à n’importe quel moment. Ceci inclut les signaux
de contrôle comme SYNDET, TxEMPTY, etc.…
3.1. Fonctions des broches
Data Bus Buffer
Ce bus bidirectionnel à 3 états est utilisé pour interfacer le 8251 au bus du système. Les données sont transmises
et reçues via le buffer suivant l’instruction de input ou de output générée par le microprocesseur. Le Control
Word, le Command Word et les informations de configuration sont aussi transmis via ce bus. Les Command
Status, Data-In et Data-Out communiquent aussi avec le bus système via le Data Bus Buffer.
Read/Write et Control logic
Ce bloc accepte les entrées depuis le contrôleur du bus système et génère les signaux de contrôle vers tous les
blocs opérationnels. Il contient les registres du Control Word et Command Word qui définissent la configuration
de l’interface.
RESET
Cette broche, active à l’état haut, force le 8251 en mode « idle ». L’interface garde son état « idle » jusqu’à une
nouvelle configuration définie par le Control Word.
CLK
L’entrée CLK est utilisée pour générer un Timer interne et elle doit être connectée à la phase 2 (TTL) du
temporisateur. La fréquence de CLK doit être 30 fois supérieur que le débit de transmission ou de réception.
__
WR
Cette broche, active à l’état bas, permet au microprocesseur d’envoyer des données ou le Control Words vers le
8251.
__
RD
Cette broche, active à l’état bas, permet au microprocesseur de lire les données ou les informations de
configurations du 8251.
__
CS
Cette broche, active à l’état bas, permet la communication entre le 8255 et le CPU.
ISET Mahdia
Informatique Industrielle 4ème niveau 27
Med Ali KAMMOUN
Programmation du 8251
__
C/D
Ces broches d’entrées, conjuguées aux broches WR et RD, informent le 8251 sur le type du mot existant sur le
Bus de données (Données, Control Word, informations de statut).
Modem control
Le 8251 dispose d’un ensemble d’entrées/sorties capable de faciliter l’interfaçage avec n’importe quel modem.
______
DSR
Cette entrée de 1 bit est utilisée pour tester les conditions sur le modem.
______
DTR
Cette entrée de 1 bit est utilisée aussi pour le contrôle du modem.
______
RTS
Comme la branche précédente, cette broche est utilisée pour le contrôle du modem et elle peut être programmée
par le Command Instruction Word.
L’interface Série 8251
__
ISET Mahdia
__
__
__
C/D
RD
WR
CS
0
0
1
1
x
x
0
1
0
1
1
x
1
0
1
0
1
x
0
0
0
0
0
1
8251 Data->Data Bus
Data Bus->8251 Data
STATUS->Data Bus
Data Bus->CONTROL
Data Bus -> 3-states
Data Bus -> 3-states
Informatique Industrielle 4ème niveau 28
Med Ali KAMMOUN
Programmation du 8251
______
CTS
Cette broche, active à l’état bas, permet la transmission des données en série si le bit TxEnable du Control Word
est affecté à 1.
Transmitter Buffer
Le Transmitter Buffer accepte des données parallèles à partir du Data Bus Buffer, et les convertis en données
séries et insère le bit approprié (suivant la technique de communication) et transmet en format série par le pin
______
TxD. La transmission commence si CTS =0.
Transmitter Control
Ce bloc gère les opérations associées à la transmission des données séries.
TxRDY
Cette broche en sortie signal au microprocesseur que le Transmitter est prêt à la réception des données. Ce pin
peut être utilisé comme interruption pour le système.
TxE
Si le 8251 n’a aucune donnée à émettre alors le TxE est à l’état haut. Ce pin peut être aussi utilisé pour signaler
la fin des transmissions.
______
TxC
Cette broche indique le débit à lequel les données vont être émises. En mode synchrone, le débit est égal à la
fréquence de TxC. En mode asynchrone, le débit est une fraction de la fréquence du TxC.
Receiver Buffer
Ce bloc accepte les données séries et les convertis en format parallèle en insérant le bit approprié suivant la
technique utilisé.
Receiver Control
Ce bloc gère toutes les opérations reliées à la réception des données.
RxRDY
Cette sortie indique que le 8251 contient des données et que l’interface est prête à les émettre au CPU. Ce pin
peut être utilisé comme interruption dans le système.
______
RxC
Le Receiver Clock contrôle le débit avec lequel les données sont reçues. En mode synchrone le débit de
réception est égal à la fréquence indiquée par le RxC. En mode asynchrone, le débit est une fraction de cette
fréquence.
3.2. Programmation du 8251
Avant d’effectuer les opérations de réception et de transmission, le 8251 doit être configuré par le mot de
contrôle (Control Word) généré par le CPU.
Le Control Word peut être définie suivant deux formats :
ƒ
ƒ
Instruction de mode (Mode Instruction) ;
Instruction de commande (Command Instruction).
3.2.1. L’instruction de mode (Mode Instruction)
Cette instruction définit les caractéristiques opérationnelles générales du 8251. Elle doit être définie après un
RESET et suivie d’une Instruction de commande ou d’une caractère SYNC.
3.2.1.1. Définition de l’instruction de mode
Le 8251 peut être utilisé soit en mode synchrone soit en mode asynchrone. Pour connaître comment le Mode
Instruction définit les opérations fonctionnelles du 8251, le constructeur aperçoit le composant comme étant
ISET Mahdia
Informatique Industrielle 4ème niveau 29
Med Ali KAMMOUN
Programmation du 8251
deux sous-systèmes séparés partageant le même package. La définition du format peut être changée seulement
après un RESET.
3.2.1.1.1 Mode asynchrone
Format de l’instruction de mode en mode asynchrone
Mode asynchrone
ISET Mahdia
Informatique Industrielle 4ème niveau 30
Med Ali KAMMOUN
Programmation du 8251
3.2.1.1.2 Mode synchrone
Format du Mode Instruction en mode synchrone
Format des données en mode synchrone
ISET Mahdia
Informatique Industrielle 4ème niveau 31
Med Ali KAMMOUN
Programmation du 8251
3.2.2. L’instruction de commande (Command Instruction)
Cette instruction définit un mot qui contrôle les opérations du 8251. Les instructions de Mode et de Commande
doivent se confirmer aux séquences des opérations indiquées par la figure ci-dessous.
Séquence des opérations
Format du Command Instruction
ISET Mahdia
Informatique Industrielle 4ème niveau 32
Med Ali KAMMOUN
Programmation du 8251
3.2.3. Définition du mot d’état (Status Read)
Dans les systèmes de communication il est nécessaire d’examiner le statut des périphériques actifs pour contrôler
les erreurs éventuelles. Le 8251 facilite la tâche au programmeur en lui permettant de « lire » le statut de la
communication en tout moment durant le fonctionnement de l’interface.
Format du Status Read
3.3. Application du 8251
Connexion du 8251 en mode asynchrone
ISET Mahdia
Informatique Industrielle 4ème niveau 33
Med Ali KAMMOUN
Programmation du 8251
Connexion du 8251 en mode synchrone
4. Manipulation
 Depuis la console Hyper Terminal transférer le programme suivant vers le système MTS-86C :
D_PORT EQU 0FFF0H
CS_PORT EQU 0FFF2H
CODE SEGMENT
ASSUME CS:CODE
ORG 0
MOV AL,40H ; Mise à zéro du 8251
MOV DX,CS_PORT ; Initialisation du port en sortie
OUT DX,AL ; Sortie
OUT DX,AL
OUT DX,AL
XOR AL,AL
OUT DX,AL
MOV AL,40H ;RESET
OUT DX,AL ;Sortie
MOV AL,4EH ; Setup Mode Byte
OUT DX,AL
MOV AL,27H ; Setup Comment
OUT DX,AL
J1:
CALL IN_RS ; Recevoir 1 caractère
CALL OUT_RS ; Emettre 1 caractère
JMP J1
IN_RS: MOV DX,CS_PORT;
IN AL,DX ;
AND AL,2;
JZ IN_RS ;
MOV DX,D_PORT;
IN AL,DX ;
MOV AH,AL ;
ISET Mahdia
Informatique Industrielle 4ème niveau 34
Med Ali KAMMOUN
Programmation du 8251
RET ;
OUT_RS: MOV DX,CS_PORT
IN AL,DX
AND AL,1 ;
JZ OUT_RS
MOV DX,D_PORT ;
MOV AL,AH
OUT DX,AL
RET
CODE ENDS
END
 Le programme précédant nous permet d’envoyer et de recevoir un caractère via le 8251. Exécuter le
programme. Que se passe-t-il ? Pourquoi ?
 Identifier la valeur de l’instruction de commande. Quel est l’état du port (émission ou réception) ?
 Identifier la valeur de l’instruction de mode. Déduire alors le mode de communication, la longueur du
caractère, la parité (activée ou non activée), le bit de parité et le facteur de débit.
 Commenter les routines IN_RS et OUT_RS et expliquer l’utilité des instructions AND AL,2 dans
IN_RS et AND AL,1 dans OUT_RS
 Développer un programme en assembleur qui nous permet de saisir un caractère à partir du clavier du
PC et de l’afficher à l’écran du PC (l’écran du terminal) via le 8251 de la carte MTS-86C.
ISET Mahdia
Informatique Industrielle 4ème niveau 35
Programmation du 8259
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les principes de la
programmation du contrôleur d’interruptions 8259. Dans une première étape, on rappelle la
notion de l’interruption et le principe de la prise en compte de l’interruption supporté par le
8086. Dans une deuxième étape, on présentera l’architecture du 8259 et ses différents
registres. L’expérimentation portera sur l’utilisation du 8259 implémenté sur le Kit pour tester
l’utilisation de deux types d’interruptions : une interruption non masquable, commandée par
le bouton NMI du clavier du Kit, et une interruption masquable commandée par un bouton
poussoir connecté au 8255.
Matériels utilisés :
-
Le Kit MTS-86C.
-
Un PC ou compatible doté d’un port de communication série.
Logiciels :
-
Microsoft Windows
-
Hyper Terminal
Durée :
3H00mn
Med Ali KAMMOUN
Programmation du 8259
Manipulation 5 : Programmation du 8259
1. But du TP
Cette manipulation est une initiation à la programmation d’un contrôleur d’interruptions programmable type
8259.
2. Les Interruptions
En général l’Unité de traitement exécute séquentiellement les instructions ou effectue des sauts programmes
(JMP, CALL). Mais il existe des situations où l’Unité de Traitement est déroutée de sa tâche :
Reset : signal envoyé au microprocesseur pour un redémarrage.
Exceptions (interruptions internes) : débordement de pile, dépassement de capacité, division par 0, etc.…
Appels systèmes (interruptions logicielles) : appel du programme lui-même « int 21h ».
Interruptions physiques (interruptions externes) : appels d’autres périphériques.
Les interruptions sont plus ou moins prioritaires ; dans le cas d’une interruption non masquable l’Unité de
Traitement est obligée de s’en occuper (RESET,…) et dans le cas d’une interruption masquable l’Unité de
traitement peut ne pas en tenir compte est ceci grâce au drapeau IF.
Chaque interruption possède un numéro de 0 à 255 (FFh) (ex : Int 21h). Lorsqu’une interruption est déclanchée,
l’U.T doit exécuter un bout de programme bien précis : le traitant de l’interruption. En effet, l’Unité de
Traitement doit savoir où se trouve l’adresse (CS : IP) du traitant numéro ‘n’. Cette information est stockée en
mémoire (0000 :0000 à 0000 : 03FFh).
Au démarrage, la table des interruptions contient des valeurs par défaut. Cependant, il est possible de modifier
cette table soit pour ajouter/supprimer un traitant, soit pour surcharger un traitant (ex : ajouter un message
d’erreur en plus du div/0).
3. Le 8259
Lorsqu'une demande d'interruption (IRQ) est détectée par le contrôleur maître, si l'interruption est validée, il
génère un signal INT de demande d'interruption vers le microprocesseur.
ISET Mahdia
Informatique Industrielle 4ème niveau 37
Med Ali KAMMOUN
Programmation du 8259
Si l'interruption est autorisée par le processeur, celui-ci exécute deux cycles INTA :
- le premier pour signaler que la demande est honorée,
- le second pour demander au contrôleur d'interruptions de déposer son vecteur d'interruption sur le bus de
données ; ce vecteur (de 0 à 255), multiplie par quatre, pointe l'emplacement en mémoire de l'adresse du
programme de gestion de l'interruption ; le microprocesseur se branche automatiquement a cette adresse après
avoir effectue une séquence de sauvegarde des registres.
4. Registres et programmation du 8259
La programmation de ce circuit comprend deux types de commandes :
- Les commandes d'initialisation effectuées par une séquence dans l'ordre
ICW1, ICW2, ICW3, ICW4
- Les commandes d'opérations générées a tout moment après les commandes d'initialisation : OCW1, OCW2,
OCW3.
Apres un reset, le contrôleur est dans l'état suivant :
- la détection des interruptions est remise a zéro,
- le masque d'interruption est efface,
- la priorité la plus basse est IRQ7,
- l'adresse du mode esclave est mise à 7,
- le mode de masque spécial est efface.
4.1. ICW1 : registre mode de fonctionnement
|---------------------------------------|
|
ICW1
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| X | X | X | 1 |LTIM| 1 |SNGL| 1 |
|----|----|----|----|----|----|----|----|
| 1 |
| 0 |
|----|
|----|
b4 : à 1 indique que c'est le registre ICW1 qui est adresse.
LITM : (Level Input Triggered Mode) détection des interruptions sur :
- 0 : un front montant.
- 1 : un niveau
SNGL : (SiNGLe)
- 1 : un seul 8259 ; pas de programmation de ICW3 à l'initialisation.
- 0 : plusieurs 8259 en cascade ; dans ce cas, l'initialisation prévoit de préciser le mode de mise en cascade avec
le mot ICW3.
4.2. ICW2 : registre vecteur d'interruption
|---------------------------------------|
|
ICW2
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| T7 | T6 | T5 | T4 | T3 | X | X | X |
|----|----|----|----|----|----|----|----|
| 0 | 0 | 0 | 0 | 1 | X | X | X |maître
|----|----|----|----|----|----|----|----|
| 0 | 1 | 1 | 1 | 0 | X | X | X |esclave
ISET Mahdia
Informatique Industrielle 4ème niveau 38
Med Ali KAMMOUN
Programmation du 8259
T7 à T3 : constituent la partie haute du vecteur d'interruption tandis que les trois bits de poids faibles (T2 à T0)
sont ajoutes automatiquement suivant le numéro d'ordre de l'interruption qui a provoque l'interruption.
Pour le maître, les vecteurs d'interruption vont de INT08H à INT0FH (pointent les adresses de 000020H à
00003FH).
Pour l'esclave, les vecteurs d'interruption vont de INT70H à INT77H (pointent les adresses de 0001C0H à
0001DFH).
4.3. ICW3 : registre configuration en cascade
|---------------------------------------|
|
ICW3
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|| S7 | S6 | S5 | S4 | S3 | S2 | S1 | S0 | |
|----|----|----|----|----|----|----|----| -- maître
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
|----|----|----|----|----|----|----|----|| 0 | 0 | 0 | 0 | 0 | ID2| ID1| ID0| |
|----|----|----|----|----|----|----|----| -- esclave
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | |
|----|----|----|----|----|----|----|----|Ce mot est interprété par le 8259 de deux façons différentes suivant qu'il s'agit d'un maître ou d'un esclave. Cette
reconnaissance se fait par la broche SP/EN du boîtier qui est a l'état haut pour le maître et a l'état bas pour
l'esclave (ici le mode sans buffer est utilise, voir bit BUF de ICW4).
S7 à S0 : à 1, chaque bit indique qu'un 8259 est branche sur la broche IRQ correspondante.
ID2 à ID0 : numéro de l'interruption cascade = numéro identificateur de l'esclave. L'esclave sera active lorsqu'il
reconnaîtra ce numéro sur les trois lignes de mise en cascade CAS0 à CAS2 ; il placera alors le vecteur
d'interruption sur le bus de données.
4.4. ICW4 : registre fin d'interruption
|---------------------------------------|
|
ICW4
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| 0 | 0 | 0 |SFNM| BUF| M/S|AEOI| 1 |
|----|----|----|----|----|----|----|----|
| 1 | 0 | X | 1 |
|----|----|----|----|
SFNM : (Special Fully Nested Mode)
- 0 : mode normal d'imbrication des interruptions. Le bit correspondant du registre des interruptions en service
ISR est mis à 1 et reste dans cet état jusqu'a ce qu'une fin d'interruption survienne ou, si la fin d'interruption
automatique est programmée, jusqu'au dernier front montant du signal INTA.
- 1 : ce bit autorise le mode spécial d'imbrication des interruptions ; dans ce mode, un esclave qui a déjà une
interruption en service pourra en faire prendre en compte d'autres par le maître, si elles sont de plus forte priorité
(dans le mode normal, le maître les ignore jusqu'a la commande EOI).
BUF : (BUFfer)
- 0 : sans buffer
ISET Mahdia
Informatique Industrielle 4ème niveau 39
Med Ali KAMMOUN
Programmation du 8259
- 1 : avec buffer ; dans ce cas la broche SP/EN est utilisée en sortie pour commander un buffer bidirectionnel
externe.
M/S : (Master/Slave) en mode buffer, ce bit indique:
- 0 : le circuit esclave
- 1 : le circuit maitre.
AEOI : (Automatique End Of Interrupt)
- 1 : mode automatique de fin d'interruption, le bit concerne d'ISR est remis à 0 des la fin du deuxième INTA.
- 0 : un mot de commande spécifique doit être envoyé avant le retour de la procédure d'interruption.
4.5. OCW1 : registre masque des interruptions (lecture/écriture)
Il contient le masque individuel des interruptions.
|---------------------------------------|
|
OCW1
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 |
|----|----|----|----|----|----|----|----|
Un bit à 1 correspond a inhiber l'interruption portant le même numéro d'ordre ; un 0 correspond a l'autoriser.
4.6. OCW2 : registre priorité des interruptions
Il détermine le niveau de priorité des interruptions présentes dans le registre IRR.
|---------------------------------------|
|
OCW2
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| R | SL | EOI| 0 | 0 | L2 | L1 | L0 |
|----|----|----|----|----|----|----|----|
|
|
|
|----|----|------|-------|
|
|
|
| OCW2
No de l'interruption
|
|
|
|
concernée (0 à 7)
|
|
|
|
|
|
|
|
|
|----------------------|
|
|
|
|
|
|----|----|----|
|
| 0 | 1 | 1 |Fin d'interruption No
|
|
|----|----|----|
|
|
| 1 | 1 | 1 |Rotation a chaque int.No
|-----|
|----|----|----|
|
| 1 | 1 | 0 |La priorité la plus élevée est No|
|----|----|----|
| 0 | 0 | 1 |Fin d'interruption
|----|----|----|
| 1 | 0 | 1 |Rotation des priorités a chaque EOI non spécifique
|----|----|----|
| 1 | 0 | 0 |Rotation des priorités a chaque EOI
|----|----|----|
| 0 | 0 | 0 |Arrêt de rotation automatique
|----|----|----|
| 0 | 1 | 0 |Pas d'opération
|----|----|----|
ISET Mahdia
Informatique Industrielle 4ème niveau 40
Med Ali KAMMOUN
Programmation du 8259
4.7. OCW3 : registre gestion des interruptions
|---------------------------------------|
|
OCW3
|
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| 0 |ESMM| SMM| 0 | 1 | P | RR | RIS|
|----|----|----|----|----|----|----|----|
ESMM : (Enable Special Mask Mode) a 1, ce bit autorise SMM, sinon le bit SMM est ignore.
SMM : (Special Mask Mode)
- 1 : mode spécial sélectionné,
- 0 : mode spécial arrêté.
Le mode spécial de masquage permet de résoudre des problèmes d'occupation abusive du CPU par une routine
d'interruption ; en effet, lorsque l'une d'elle demande un temps d'exécution important, elle bloque toutes celles
qui ont une priorité plus faible.
Il n'est pas toujours possible de placer ces routines longues en faible priorité car il peut être nécessaire d'exécuter
une tache importante au début de la procédure d'interruption.
Par contre, une fois cette tache accomplie, il est possible d'accepter les priorités plus faibles avant la fin de la
procédure.
Pour cela, il faut exécuter la séquence d'opération suivante :
- masquer uniquement le bit correspondant à la routine en cours.
- mettre le 8259 en mode spécial de masquage a l'aide de OCW3.
- autoriser les interruptions : toutes les interruptions sont alors autorisées sans tenir compte de leur priorité plus
faible.
Avant de sortir de la routine, il faut exécuter une séquence inverse :
- bloquer le mode spécial de masquage.
- rétablir un masquage normal.
RR : (Read Register = lecture registre) autorise la lecture des registres IRR ou ISR si ce bit est à 1. Le choix de
ce registre est déterminé par RIS. Lorsque, ensuite, le microprocesseur fait une lecture (A0=0), celui-ci lira le
contenu de ISR ou IRR sur le bus de données.
RIS : (Read In Service = lecture en service)
- 1 : registre ISR
- 0 : registre IRR
P : (Poll command = commande de scrutation)
- 0 : mode normal
- 1 : le signal INT est inhibe ; chaque lecture du microprocesseur est considérée comme une reconnaissance
d'interruption ; durant cette lecture le 8259 met sur le bus le mot suivant :
|--|--|--|--|--|--|--|--|
|b7|b6|b5|b4|b3|b2|b1|b0|
|--|--|--|--|--|--|--|--|
| I| X| X| X| X|W2|W1|W0|
|--|--|--|--|--|--|--|--|
W2 a W0 : est le numéro de la demande d'interruption de plus haute priorité.
I : est à 1 lorsqu'une interruption a été demandée.
4.8. IRR : (Interrupt Request Register = registre demande
d'interruption)
Ce registre 8 bits mémorise les demandes suivant leur numéro d'interruption IRQ ; chaque bit est actif (demande
d'interruption) à l'état 1.
ISET Mahdia
Informatique Industrielle 4ème niveau 41
Med Ali KAMMOUN
Programmation du 8259
4.9. ISR : (In Service Register = registre interruption en service)
Registre de 8 bits. Le bit d'IRR de plus haute priorité est inscrit dans ISR tandis qu'il est remis à 0 dans IRR.
Dans le mode automatique, le bit de ISR est remis à zéro des que le vecteur d'interruption a été lu (voir bit AEOI
de ICW4) : la demande d'interruption est considérée comme servie ; dans le cas contraire, un mot de commande
est nécessaire pour effacer le bit concerne.
5. Signaux des entrées sorties du 8259
|-----| |------|
CS*|1
|-|
28|VCC
WR*|2
8259
27|A0
RD*|3
26|INTA*
D7|4
25|IRQ7
D6|5
24|IRQ6
D5|6
23|IRQ5
D4|7
22|IRQ4
D3|8
21|IRQ3
D2|9
20|IRQ2
D1|10
19|IRQ1
D0|11
18|IRQ0
CAS0|12
17|INT
CAS1|13
16|SP*/EN*
GND|14
15|CAS2
|--------------|
Brochage du 8259
D0 a D7 : Bus de données bidirectionnel 8 bits.
RD* : Entrée commande de lecture.
WR* : Entrée commande d'écriture.
A0 : Entrée sélection adresse interne.
CS* : Entrée sélection du circuit (décodage d'adresse).
CAS0 à CAS2 : Lignes de mise en cascade des 8259 pour arbitrage.
SP*/EN* : (Slave Program/Enable) entrée activation de l'esclave ou sortie de contrôle du buffer bus de données.
IRQ0 à IRQ7 : Entrées des signaux de demande d'interruption.
INT : Sortie du signal de demande d'interruption vers le microprocesseur ou un 8259 maître.
INTA* : Entrée du signal d'acquittement générée par le microprocesseur.
6. Manipulation
Le système MTS-86C possède un seul contrôleur d’interruptions 8259. Le bouton SW11 est connecté au 8259
via son entrée IRQ0 et le TIMER 8253 est connecté au contrôleur via l’IRQ1. Cette configuration est expliquée
par les schémas électroniques en annexe.
ISET Mahdia
Informatique Industrielle 4ème niveau 42
Med Ali KAMMOUN
Programmation du 8259
6.1. Exemple de programmation
CSR
PORT
CODE
EQU
EQU
0FFC8H
0FFCAH
SEGMENT
ASSUME CS:CODE,DS:CODE
START:
CLI
MOV
MOV
MOV
SP,4000H
AX,CS
DS,AX
MOV
MOV
MOV
MOV
MOV
AX,0
ES,AX
BX,2*4
ES:WORD PTR[BX],OFFSET NMI
ES:2[BX],CS
MOV
MOV
MOV
BX,40H*4
ES:WORD PTR[BX],OFFSET INTR0
ES:2[BX],CS
MOV
MOV
OUT
DX,CSR
;A0=0
AL,00010011B ;ICW1
DX,AL
MOV
MOV
OUT
DX,PORT
AL,40H
DX,AL
MOV
OUT
AL,00000101B ;ICW4
DX,AL
MOV
OUT
AL,11111110B
DX,AL
;A0=1
;ICW2
;================================================
MOV
MOV
INT
DX,OFFSET MSG1
AH,9
21H
STI
HERE:
JMP
$
NMI:
MOV
MOV
INT
IRET
DX,OFFSET MSG2
AH,9
21H
INTR0:
MOV
MOV
INT
MOV
MOV
OUT
IRET
DX,OFFSET MSG
AH,8
21H
DX,CSR
AL,20H
DX,AL
ISET Mahdia
Informatique Industrielle 4ème niveau 43
Med Ali KAMMOUN
MSG
MSG1
MSG2
DB
DB
DB
CODE
END
Programmation du 8259
0DH,0AH,9,9,'MTS-86C INTERRUPT0 TEST !!$'
0DH,0AH,9,9,'INTERRUPT TEST PROGRAM...',0DH,0AH,'$'
0DH,0AH,9,9,'MTS-86C NMI TEST !!....$'
ENDS
START
 Compiler le programme ci-dessus et transférez-le vers la carte MTS-86C.
 Que fait ce programme ? Vérifier vos résultats en l’exécutant.
 Commentez la routine principale START en précisant les rôles des instructions suivantes :
“MOV ES:WORD PTR[BX],OFFSET NMI
MOVES:2[BX],CS“
ET
“MOV ES:WORD PTR[BX],OFFSET INTR0
MOV ES:2[BX],CS“
6.2. Programmation du 8259
 On veut développer un programme en assembleur qui nous permet d’allumer successivement la diode
L1 puis L2 puis L3,...., jusqu’à L8 en appuyant seulement sur le bouton SW11 qui correspond à
l’interruption 0.
ISET Mahdia
Informatique Industrielle 4ème niveau 44
Programmation du 8253
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les principes de la
programmation du Timer 8253/54. Dans une première étape, exposera l’architecture et les
registres du 8253. Dans une deuxième étape, on présentera les différents modes de
fonctionnement du 8253 et le principe de programmation. L’expérimentation portera sur
l’utilisation du 8253 implémenté sur le Kit associé au contrôleur d’interruptions 8259 et de
l’interface parallèle 8255.
Matériels utilisés :
-
Le Kit MTS-86C.
-
Un PC ou compatible doté d’un port de communication série.
Logiciels :
-
Microsoft Windows
-
Hyper Terminal
Durée :
3H00mn
Med Ali KAMMOUN
Programmation du 8253
Manipulation 6 : Programmation du 8253
1. But du TP
Cette manipulation est une initiation à la programmation d’un compteur programmable type 8253-54.
L’Intel 8253 est compteur/timer programmable désigné pour être utilisé avec un microprocesseur Intel x86.
Le 8253 comporte 3 compteurs indépendants 16-bits, chacun de ces compteurs peut fonctionner à une fréquence
de 2.6 Mhz. Tous les modes de fonctionnement sont programmables.
2. Le 8253
Structure interne du 8253
ISET Mahdia
Informatique Industrielle 4ème niveau 46
Med Ali KAMMOUN
Programmation du 8253
Data Bus Buffer:
Le bus 3 états, bidirectionnel, 8-bits buffer est utilisé pour interfacer le 8253. Les données sont transmises via ce
bus entre le 8253 et le CPU. Ce bloc a 3 fonctionnalités principales :
- Programmer les modes du 8253.
- Charger le registre compteur.
- Lire la valeur du compteur.
Read/Write logic :
Ce bloc accepte les signaux depuis le système et génère les signaux pour le contrôle des opérations du 8253.
__
RD :
Un niveau bas sur ce pin permet au CPU la lecture des valeurs des compteurs.
__
WR :
Un niveau bas sur ce pin permet au CPU d’envoyer les modes ou les valeurs initiales des compteurs.
A0, A1 :
Ces broches sont connectées au bus d’adresse et elles servent à sélectionner le compteur et le mode voulu.
__
CS :
Ce pin à l’état bas active le fonctionnement du 8253.
Control Word Register :
Le Control Word Register est sélectionné quand A0 et A1 sont à ‘1’. Les informations stockées dans ce registre
contrôlent les opérations de mode de chaque compteur ainsi que le type de comptage et le chargement des
registres compteurs.
Counter #0, Counter #1 et Counter #2:
Ces blocs ont des fonctionnalités similaires donc on va s’intéresser à la description d’un seul bloc.
ISET Mahdia
Informatique Industrielle 4ème niveau 47
Med Ali KAMMOUN
Programmation du 8253
En effet, chaque compteur est un compteur 16-bits à pré chargement. Le compteur peut fonctionner en mode
BCD ou binaire et ses Entrées (Gates et Output) sont configurées par la sélection des modes enregistrés dans le
Control Word Register.
3. Programmation du 8253
Tous les modes pour chaque compteur sont programmés par le mot de contrôle stocké dans le Control Word
Register.
3.1. Format du mot de contrôle
3.1.1. Définitions des bits
3.1.1.1. Les bits SC
3.1.1.2. Les bits RL
ISET Mahdia
Informatique Industrielle 4ème niveau 48
Med Ali KAMMOUN
Programmation du 8253
3.1.1.3. Les bits M
3.1.1.4. Le bit BCD
3.1.2. Les modes
3.1.2.1. Mode 0 : Envoi d’une demande d’interruption en fin de décomptage
GATE = 1: valide le comptage (décomptage)
GATE = 0 : le suspend mais n’a aucun effet sur la sortie OUT.
Après chargement de la valeur à décompter et temporisation d’une impulsion d’horloge, le décomptage
commence. La sortie est au niveau bas. Lorsque le décomptage atteint 0, la sortie passe au niveau 1. Ce qui se
traduit par l’émission d’une demande d’interruption. Elle reste à 1 jusqu’au changement d’un nouveau mode ou
d’une nouvelle valeur. Le décomptage se poursuit.
3.1.2.2. Mode 1 : Re-déclenchement par une impulsion extérieure
En position d’attente, la sortie est au niveau haut. Un front montant sur la gâchette GATE déclenche le décompte
au top d’horloge qui suit. Alors la sortie passe à 0 et s’y maintient jusqu’à ce que le décompte arrive à 0.
Chaque front montant sur GATE relance le processus à partir du compte initial (si celui-ci n’a pas été modifié).
En mode 1 le 8254 fonctionne en monostable.
3.1.2.3. Mode 2 : Timer d’intervalle périodique
Après le chargement de CR par N, à la prochaine impulsion d’horloge s’effectue le transfert de CR à CE et le
décomptage commence. Mais au contraire du mode 1 la sortie reste au niveau haut. Lorsque le compte arrive à 1
ISET Mahdia
Informatique Industrielle 4ème niveau 49
Med Ali KAMMOUN
Programmation du 8253
elle passe à zéro et y reste pendant une période et retourne à 1. Le décompteur repart alors à partir du compte
initial pour un autre cycle identique. On génère ainsi des tops à intervalles réguliers.
Le décompte est suspendu par le passage de GATE à 0 et reprend, depuis e compte initial, par son passage à 1.
3.1.2.4. Mode 3 : Générateur d’ondes carrées
Ce mode est similaire au mode 2 sauf que OUT passe au niveau bas lorsque la moitié du compte initial est
atteinte, soit N/2, et reste dans cet état jusqu’à ce que le compte arrive à 0 et le cycle recommence. Comme pour
le mode 2, un niveau 1 sur GATE valide le décompte et un niveau 0 l’inhibe alors qu’un front montant le
réinitialise. De ce fait, une valeur impaire amène (N+l)/2 avec sorties au niveau haut et (N-1)/2 au niveau bas.
On utilise ce mode pour la génération de Bauds.
3.1.2.5. Mode 4 : Strobe déclenché par logiciel
Ce mode est similaire au mode 0 sauf que OUT est au niveau haut pendant le décomptage et produit une seule
impulsion négative lorsque le compte devient nul.
3.1.2.6. Mode 5 : Strobe déclenché par matériel (hardware)
Après le chargement de CR, un front montant sur GATE fait transférer CR dans CE à la prochaine impulsion
d’horloge. Comme dans le mode 4, OUT reste à 1 pendant le décomptage puis passe à 0 pendant une période
d’horloge lorsque le compte est nul. GATE peut réinitialiser le décomptage à tout moment.
Sommaire sur les fonctionnalités de la broche Gate
ISET Mahdia
Informatique Industrielle 4ème niveau 50
Med Ali KAMMOUN
Programmation du 8253
Les modes du 8253
3.2. Procédures de lecture/écriture
3.2.1. Procédure d’écriture
Pour la procédure d’écriture, il faut se rappeler de deux conventions :
•
•
Pour chaque compteur, il faut écrire dans l’ordre : le mot de contrôle puis le compte initial.
Le compte initial doit se conformer au format binaire ou BCD indiqué par le mot de contrôle.
ISET Mahdia
Informatique Industrielle 4ème niveau 51
Med Ali KAMMOUN
Programmation du 8253
3.2.2. Procédure de lecture
On distingue deux types de commande :
* La commande Counter Latch (CL) :
A pour effet de verrouiller, dans le registre OL correspondant, le contenu de l’élément compteur (CE) spécifié
par les 2 MSB (bits plus significatifs) du mot de commande suivant
SC1
SC2
0
0
X
X
X
X
* La commande Read Back :
Elle permet la lecture soit du compte soit du status (validés par 0) du compteur dont le bit est validé par 1 dans
le mot de commande suivant
1
1
Count\
Status\
CNT2
CNT1
CNT0
0
Cette commande permet de préparer le mot de status dont le format recopie les 6 bits de faibles poids du mot de
contrôle :
Out
RW1
RW0
M2
M1
M0
BCD
CR Æ CE
0 : chargé
1 : non chargé
Etat du pin out
4. Manipulation
4.1. Exemple
 Depuis les schémas électroniques de l’annexe, identifier les circuits 8253, 8259 et le 8255-3. Quelle
broche du 8255 est-elle reliée à la broche Gate1 de notre 8253 et quelle broche du 8253 est-elle reliée à
l’interruption IR0 du 8259.
 Editer le programme ci-dessous :
CSR
PORT
EQU
EQU
0FFC8H
0FFCAH
COUNT1
CNT_CSR
EQU
EQU
0FFDAH
0FFDEH
CNT3
CPORT3
EQU
EQU
3FD6H
3FD4H
CODE
SEGMENT
ASSUME CS:CODE,DS:CODE
ORG
0
MOV
MOV
MOV
AX,CS
DS,AX
SP,0F000H
START: CLI
ISET Mahdia
Informatique Industrielle 4ème niveau 52
Med Ali KAMMOUN
I8253: MOV
Programmation du 8253
MOV
MOV
AX,0
ES,AX
MOV
MOV
MOV
BX,41H*4
ES:WORD PTR[BX],OFFSET COUNT
ES:2[BX],CS
MOV
MOV
OUT
DX,CSR
AL,00010011B
DX,AL
MOV
MOV
OUT
DX,PORT
AL,40H
DX,AL
MOV
OUT
AL,00000101B
DX,AL
MOV
OUT
AL,11111101B
DX,AL
MOV
MOV
OUT
MOV
MOV
OUT
AL,80H
DX,CNT3
DX,AL
AL,0FFH
DX,CPORT3
DX,AL
DX,CNT_CSR
MOV AL,01110110B
OUT
DX,AL
MOV DX,COUNT1
MOV AX,0FFFFH
OUT
DX,AL
MOV AL,AH
OUT
DX,AL
MOV
MOV
INT
DX,OFFSET MSG
AH,9
21H
MOV
MOV
INT
AX,0
DH,4
10H
STI
COUNT:
ISET Mahdia
JMP
$
PUSH
MOV
MOV
INT
POP
AX
DX,OFFSET BACK
AH,9
21H
AX
INC
MOV
INT
AX
DH,4
10H
Informatique Industrielle 4ème niveau 53
Med Ali KAMMOUN
PUSH
MOV
MOV
OUT
POP
Programmation du 8253
AX
DX,CSR
AL,20H
DX,AL
AX
IRET
MSG
BACK
DB
DB
CODE
END
0DH,0AH,9,9,'MTS-86C INTERRUPT COUNTER : $'
8,8,8,8,'$'
ENDS
START
 Identifier la partie d’initialisation du 8259. Quels sont les mots d’initialisation utilisés. Donner les
valeurs de chaque mot.
 Identifier le mot de contrôle du 8255 ? Quel port a-t-on utilisé ?
 Identifier le mot de contrôle envoyé vers le 8253. Donner sa valeur en hexadécimal.
 Déduire le numéro du compteur sélectionné.
 Déduire le mode utilisé.
 Déduire le type de comptage (binaire ou BCD).
 Le chargement et la lecture se fait en premier par MSB ou LSB ?
 Quelle est la valeur du compte initiale.
 Que fait alors ce programme ?
4.2. Travail demandé
On va s’intéresser dans cette partie du compteur N°0 du 8253. On veut générer un signal carré de fréquence
0.3072 MHz.
Â
Â
Â
Â
Quel est le mode à utiliser pour générer ce type de signal ?
Sachant que la fréquence de l’horloge est de 1.2288 MHz, déterminer alors le compte initiale.
Donner alors la valeur du mot de contrôle à envoyer vers le 8253.
Ecrire le programme en assembleur 8086 correspondant à la génération du signal considéré
ISET Mahdia
Informatique Industrielle 4ème niveau 54
Programmation du port série
sous Visual Basic
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les possibilités de Visual Basic à
manipuler le port série en utilisant le contrôle MSComm.
Matériels utilisés :
-
Un PC ou compatible doté d’un port de communication série.
-
Un câble null-modem.
Logiciels :
-
Microsoft Windows.
-
Microsoft Visual Basic.
Durée :
3H00mn
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
Manipulation 7 : Programmation du port série
sous Visual Basic
1. Présentation du TP
A l’heure de l’Internet haut débit, le port série, avec son débit maximum de quelques dizaines de kilo-octets
par seconde, peut sembler inintéressant. Pourtant, il a encore de nombreuses applications : le pilotage de
machines industrielles et de mécanismes automatiques se fait encore largement au moyen du port série. Enfin,
n’oublions pas que même les routeurs ont un connecteur série qui permet de se connecter à la machine pour la
piloter.
Ce TP a donc pour objet de montrer comment communiquer via le port série en Visual Basic.
2. Le Microsoft Comm Control 6.0
Pour gérer le port série, la meilleure façon est d’utiliser le Microsoft Comm Control distribué avec n’importe
quelle édition de Visual Basic. Il suffit simplement de le rajouter dans la liste des contrôles de la barre d’outils.
ISET Mahdia
Informatique Industrielle 4ème niveau 56
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
Une fois le contrôle rajouté, son icône apparaît dans la barre des contrôles :
Il suffit d’en placer une instance sur la feuille pour pouvoir l’utiliser. Par défaut, ce contrôle s’appellera
MSComm1, et on retiendra ce nom pour la suite de l’application :
3. Les propriétés de base du Microsoft Comm Control
Une fois le contrôle de communication rajouté, il nous faut le paramétrer. Cela se fait avec les propriétés
suivantes :
– CommPort : Cette méthode fixe ou retourne le port COM utilisé par le contrôle. La plupart des ordinateurs
n’ayant qu’un ou deux ports COM, cette propriété vaudra donc le plus souvent 1 (port COM1: ) ou 2 (port
COM2: ).
MsComm1.CommPort=1 ‘on utilise le port COM1
– Settings : Cette méthode fixe les caractéristiques de la connexion, à savoir la vitesse de communication,
l’utilisation ou non du bit de parité, le nombre de bits de données et le nombre de bits d’arrêt. Cette information
est le plus souvent fournie par le constructeur de l’équipement avec lequel vous souhaitez communiquer. Elle est
construite de la manière suivante : "vitesse, parité(Y ou N), bits de données, bits de stop"
MSComm1.Settings = "9600,N,8,1"
ISET Mahdia
Informatique Industrielle 4ème niveau 57
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
Cela signifie que la vitesse de connexion est de 9600 bauds/s, pas de contrôle de parité (Non), il y a 8 bits de
données par octet de données (rappelez-vous que les Américains n’en utilisent souvent que 7, parce qu’ils n’ont
pas les caractères accentués à gérer), et 1 bit de stop.
– PortOpen : cette méthode permet d’ouvrir le port si on la positionne à True et le fermer si on le positionne à
False :
MSComm1.PortOpen=True 'j’ouvre le port série
MSComm1.PortOpen=False 'je ferme le port série
Il est important de ne pas oublier de fermer le port série ! Pour être sûr, rajoutez le code suivant dans votre
formulaire :
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Comm1.PortOpen=False 'fermeture du port
End Sub
– OutPut : cette méthode permet d’envoyer des données au port. Bien entendu, il faut au préalable configurer
et ouvrir le port. La chaîne envoyée doit être terminée par un retour chariot ( Chr$(13)) ou par un retour chariot +
retour ligne (vbCrLf) en fonction de la connexion. Souvent, le seul moyen de savoir lequel choisir consiste à
essayer les deux à prendre celui qui marche.
MSComm1.OutPut="ATDT 0123456789"
On dit ici au modem de composer le numéro 0123456789.
– Input : cette méthode permet de recevoir des données sur le port COM. Ici, une explication s’impose : le
port série stocke les données arrivant au système dans une mémoire tampon interne qui vaut par défaut 1024
octets. Si la mémoire tampon est saturée et que de nouvelles données arrivent, celles-ci sont perdues. Il est donc
impératif de recopier les données dans une chaîne de caractères, par exemple :
Dim tampon$
Tampon$ = Tampon$ & MSComm1.Input
Bien sûr, cela doit être fait de façon répétitive tant que des données arrivent sur le port. En général, les données
se terminent par un caractère de terminaison (si-si!), qui nous fera savoir que la transmission est terminée.
Par exemple, on attend ici des données terminées par "OK" suivi de retour à la ligne :
Do
DoEvents 'indispensable sinon ça marche pas!!!
Tampon$ = Tampon$ & MSComm1.Input
Loop Until InStr(Tampon$, "OK" & vbCrLf)
– InBufferSize : cette méthode fixe ou retourne la taille de la mémoire tampon entrée (donc celle qui contient
les données arrivant sur le système), elle vaut par défaut 1024 octets :
MSComm1.InBufferSize=2048
Taille_du_tampon=MSComm1.InBufferSize
– OutBufferSize : cette méthode fixe ou retourne la taille de la mémoire tampon sortie (donc contenant les
données envoyées par le système), elle vaut par défaut 512 octets:
MSComm1.OutBufferSize=1024
Taille_du_tampon_entree=MSComm1.OutBufferSize
– HandShaking : Cette propriété permet de fixer le mode de « poignée de mains », c’est-à-dire la façon dont la
communication est établie au niveau matériel. Elle peut prendre les valeurs suivantes :
Numéro
Constante chaîne
Utilisation
0
comNone
Pas de handshaking matériel. Parfois utilisé, mais globalement rare.
1
comXOnXOff
Handshaking par contrôle de flux. Sert surtout dans les terminaux
2
comRTS
Utilisé le plus souvent sur le réseau téléphonique.
3
comRTSXonXoff
Combinaison des deux précédentes
ISET Mahdia
Informatique Industrielle 4ème niveau 58
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
La plupart du temps, la nature du hand-shaking est imposée par le matériel, il faut donc fouiller le manuel de
l’équipement ou faire des tests, il n’y a pas de règle universelle…
La communication par événements
Le contrôle de communication serait bien rudimentaire et compliqué d’utilisation s’il n’incluait pas une
propriété fondamentale, à savoir la communication événementielle.
Le contrôle Comm dispose en effet d’un événement appelé OnComm, qui se déclenche lorsque des données
arrivent sur le port série. Donc, plutôt que de se prendre la tête avec le "Do…Loop" comme tout à l’heure, on
place notre code dans l’événement OnComm et on laisse faire le système.
L’événement OnComm sert en fait à plusieurs choses :
–
–
–
–
A recevoir les données
A repérer les erreurs
A gérer les événements de signalisation arrivant sur la ligne
A repérer la fin de la transmission
La programmation typique d’un événement OnComm se passe donc de la manière suivante :
Private Sub MSComm1_OnComm()
Dim tampon as String
Select Case MSComm1.CommEvent
'liste des erreurs possibles
Case comEventBreak ' On a reçu un signal d’interruption (Break)
Case comEventCDTO
' Timeout de la porteuse
Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
Case comEventDSRTO ' Timeout du signal de réception
Case comEventFrame ' Erreur de trame
Case comEventOverrun ' Des données ont été perdues
Case comEventRxOver ' Tampon de réception saturé
Case comEventRxParity ' Erreur de parité
Case comEventTxFull ' Tampon d’envoi saturé
Case comEventDCB
' Erreur de réception DCB (jamais vu)
' liste des événements possibles qui sont, eux, normaux
Case comEvCD
Case comEvCTS
Case comEvDSR
Case comEvRing
' Changement dans la broche CD (porteuse)
' Changement dans broche CTS
' Changement dans broche DSR (réception)
' Changement dans broche RING (sonnerie)
Case comEvReceive
' Si on reçoit des données
tampon=MSComm1.Input
Call Traitement(tampon) ' Routine de traitement
ISET Mahdia
Informatique Industrielle 4ème niveau 59
Med Ali KAMMOUN
Case comEvSend
Case comEvEOF
Programmation du port série sous Visual Basic
' Il y a des caractères à envoyer
' On a reçu le caractère EOF
End Select
End Sub
' Cette procedure sert à traiter l’information reçue dans le tampon
Sub Traitement(tampon As String)
' Ici, on affiche le résultat dans un champ de texte
Text1.Text=Text1.text & tampon
End Sub
Oui, ça fait beaucoup de cas d’événements à traiter, et la plupart ne servent quasiment jamais, mais
peuvent servir un jour…
4. Manipulation : communiquer avec un autre PC via le
port COM
On se propose de développer deux applications pour la liaison PC-PC : la première application sera implémenté
sur le PC maître et sera utilisée pour envoyer les données vers le deuxième PC esclave. Les deux machine sera
connectée via un câble série Null-modem (voir annexe).
On vous donne le code de la première application responsable de l’émission :
Â
Â
Â
Â
Placez un CommControl sur le formulaire
Placez une zone de texte et mettez la propriété MultiLine à True.
Placez un bouton de commande
Mettez le code suivant:
Private Sub Form_Load()
Form1.Caption = "App1"
With MSCOMM1 'configuration du port
.CommPort=1 'On utilise le port COM1:
.Handshaking = 2 'RTS
.RThreshold = 1
.RTSEnable = True 'mieux pour le port COM:
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True 'ouverture du port
End With
Command1.Caption = "&Send"
Text1.Text = "Ces données ont été envoyés via le port COM"
End Sub
Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'on ferme le port à la fermeture de l'appli
End Sub
ISET Mahdia
Informatique Industrielle 4ème niveau 60
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
 Exécuter alors le code de l’application. La fenêtre suivante doit apparaître sur l’écran :
Â
Â
Â
Â
Â
Créer alors la deuxième application responsable de la réception.
Placez un CommControl sur le formulaire.
Placez une zone de texte et mettez la propriété MultiLine à True.
Redimensionner-le pour qu'il soit assez grand pour afficher plusieurs lignes de texte.
Insérer le code.
L’exécution de la deuxième application doit apparaître une fenêtre comme la montre la figure suivante :
 Ensuite, exécutez les deux appli (vous aurez besoin de deux instances de VB si vous les exécutez sur le
même PC).
 Puis, dans App1, cliquez sur Send. Vous verrez alors s'afficher le texte "Ces données ont été envoyés
via le port COM" dans la boîte texte de App2. Vous pouvez aussi changer le texte dans App1, puis
cliquer sur "Send" et le texte sera envoyé dans App2.
ISET Mahdia
Informatique Industrielle 4ème niveau 61
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
5. Annexe
ISET Mahdia
Informatique Industrielle 4ème niveau 62
Med Ali KAMMOUN
Programmation du port série sous Visual Basic
Câble Null-modem
ISET Mahdia
Informatique Industrielle 4ème niveau 63
Programmation de l’interface parallèle sous
Visual Basic
Objectifs :
L’objectif de cette manipulation est de présenter à l’étudiant les possibilités de Visual Basic à
manipuler les ports en utilisant une bibliothèque « Inpout32 ». L’expérimentation portera sur
l’utilisation de cette bibliothèque pour commander des diodes via le port parallèle.
Matériels utilisés :
-
Un PC ou compatible doté d’un port parallèle.
-
Une plaque d’essais et 4 diodes.
-
Un connecteur DB25.
Logiciels :
-
Microsoft Windows.
-
Microsoft Visual Basic.
-
La bibliothèque « Inpout32 ».
Durée :
3H00mn
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
Manipulation 8 : Programmation de l’interface
parallèle sous Visual Basic
1. Introduction
Le port parallèle est un outil simple et peu coûteux pour la construction de projets et des dispositifs contrôlés
par ordinateur. La simplicité de sa programmation fait du port parallèle le plus populaire dans le monde des
amateurs d'électronique. Le port parallèle est souvent utilisé pour le contrôle des robots, la programmation des
Atmel/PIC, la domotique, etc...
On se propose alors dans ce TP de présenter des exemples d’interfaçage simple sur port parallèle.
On connaît tous le port parallèle, où il peut être trouvé et pour qu’elle raison il est employé. L'utilisation
primaire du port parallèle est de connecter des imprimantes à l'ordinateur et il est conçu pour cette raison. Il est
souvent appelé comme le Port Imprimante ou aussi le Port Centronics (ce nom est venu d'une imprimante
populaire de la société industrielle « Centronics » qui a inventé quelques standards pour le port parallèle). Vous
pouvez identifier le connecteur du port parallèle sur la façade arrière de votre PC. C'est le connecteur à 25
broches femelle (DB25) (auquel l'imprimante est connectée). Sur presque tous les PC seulement un port parallèle
est présent, mais vous pouvez en ajouter plus en insérant et des cartes d’extension ISA/PCI.
2. Les modes du port parallèle
Le standard IEEE 1284 publié en 1994 définie 5 modes pour le transfert des données sur le port parallèle :
- Mode compatible
- Mode Nibble
- Mode Octet
- EPP
- ECP
Tous les informations concernant ces 5 modes de fonctionnement sont disponibles à cette adresse :
http://www.fapo.com/ieee1284.htm
3. Hardware
Les pins du DB25 sont schématisés sur la figure suivante :
Les lignes sur le DB25 sont en effet divisées en 3 sous groupes :
-
Les lignes de données (data bus)
Les lignes de contrôle
Les lignes d’état
ISET Mahdia
Informatique Industrielle 4ème niveau 65
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
Comme l’indique les noms des lignes, les données sont transférées via les lignes des données, les lignes de
contrôle sont utilisées pour contrôler le fonctionnement du périphérique connecté, et bien sûr le périphérique
émet son état vers l’ordinateur via les lignes d’état. Les signaux du port parallèle sont montrés dans le tableau
suivant :
Pin No
(DB25)
Signal
name
Direction
Register bit
1
nStrobe
Out
Control-0
2
Data0
In/Out
Data-0
3
Data1
In/Out
Data-1
4
Data2
In/Out
Data-2
5
Data3
In/Out
Data-3
6
Data4
In/Out
Data-4
7
Data5
In/Out
Data-5
8
Data6
In/Out
Data-6
9
Data7
In/Out
Data-7
10
nAck
In
Status-6
11
Busy
In
Status-7
12
Paper-Out
In
Status-5
13
Select
In
Status-4
14
Linefeed
Out
Control-1
15
nError
In
Status-3
16
nInitialize
Out
Control-2
17
nSelectPrinter
Out
Control-3
18-25
Ground
-
-
Comme vous le saviez les lignes de données, de contrôle et d’état sont connectées à leurs registres respectifs à
l’intérieur de l’ordinateur. Ainsi, par la manipulation de ces registres on peut facilement écrire et lire sur le port
parallèle avec des langages de programmation comme le « C » ou le « BASIC ». Les registres qu’on peut les
trouver sur un port parallèle standard sont :
-
Le registre de données
Le registre de contrôle
Le registre d’état
Comme indiqués par leurs noms le registre de données est connecté avec les lignes de données, le registre
d’état avec les lignes d’état et le registre de contrôle avec les lignes de contrôle (le mot ‘connecté’ n’indique pas
obligatoirement une connexion physique entre les lignes et les registres. En faite la connexion est virtuelle).
Ainsi, si on écrit des données sur ces registres alors celle-ci, c'est-à-dire les données, apparaissent sur les lignes
sous forme de voltage. Et inversement, les données envoyées vers le port parallèle peuvent être lues depuis les
registres indiqués. Par exemple, si on écrit ‘1’ sur le registre de données ça va se traduire en +5V sur la ligne
Data0.
Sur les PC compatibles, ces registres sont implémentés sur des adresses uniques. On doit identifier ces
adresses pour programmer le port parallèle. Avec une configuration typique, l’adresse de base de LPT1 est
0x378 et pour le LPT2 l’adresse est fixée à 0x278. Le registre des données réside à cette adresse de base, le
registre d’état est affecté à l’adresse de base +1 et le registre de contrôle à +2. Le tableau suivant illustre les
adresses de chaque registre pour le LPT1 et LPT2 :
Register
LPT1
data register(baseaddress + 0)
0x378 0x278
LPT2
status register (baseaddress + 1) 0x379 0x279
control register (baseaddress + 2) 0x37A 0x27A
ISET Mahdia
Informatique Industrielle 4ème niveau 66
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
4. Programmation
Presque tous les langages de programmation permettent aux programmeurs d'avoir accès au port parallèle en
employant quelques fonctions des bibliothèques standard. Par exemple, Borland C fournissent les fonctions
"Inportb" et "Outportb" pour lire ou écrire sur des périphériques d’Entrées/Sorties. Cependant, Visuel Basic n'a
pas de fonctions ou de méthodes pour avoir accès au port parallèle directement, mais il est possible d'ajouter de
telles capacités en écrivant un dll dans VC + et en appelant ses fonctions exportées vers VB. Toutefois, VC++
fournit deux fonctions pour avoir accès aux périphériques, la fonction '_inp ' pour la lecture et '_outp ' pour
l'écriture. Ces fonctions sont déclarées dans "conio.h".
5. La théorie « Inpout32.dll »
Programmer le port parallèle était assez facile avec le vieux DOS et c’était le même avec Win95/98/Me. Nous
pourrions employer les fonctions Inporb et outportb ou _inp () et _Outp dans notre programme sans aucun
problème si nous exécutons le programme sous DOS ou WIN95/98. Mais avec l’entrée à la nouvelle ère des
systèmes d'exploitation NT comme la WIN NT4, WIN2000, WINXP, nous perdons toute cette simplicité. Quand
nous essayons d’exécuter un programme employant les fonctions conventionnelles comme Inporb, outportb,
_inp () ou _Outp sur un WINNT ou le système WIN2000, il montrera un message d'erreur comme le montre la
figure suivante :
Étant un système d'exploitation robuste, le Windows NT assigne quelques privilèges et restrictions aux
différents de programmes courants. Il classifie tous les programmes en deux catégories, le mode utilisateur (User
Mode) et le mode noyau (Kernel Mode) c'est-à-dire exécution en ring3 mode et en ring0 mode. Les programmes
du mode utilisateur s’exécutent en mode ring3 et les programmes du mode noyau s’exécutent en mode ring0. Les
programmes que vous écrivez généralement retombent dans la catégorie du mode utilisateur. Les programmes du
mode utilisateur sont limités à l'utilisation de certaines instructions comme IN, OUT etc.. Chaque fois que le
système d'exploitation constate qu'un programme du mode utilisateur essaye d'exécuter telles instructions,
l'exécution s’arrête et le système d'exploitation montrera un message d'erreur. Finalement notre programme
d’interfaçage s’arrête là où ils exécutent les instructions IN et OUT pour lire ou écrire des données sur le port
parallèle. Mais dans le même temps les programmes de mode noyau ne sont pas limités en exécutant de telles
instructions. Cependant, les pilotes de périphériques sont capables de s’appliquer en mode noyau. Donc la
solution le susdit problème consiste à écrire un pilote de mode noyau capable de lire et écrire des données sur le
port parallèle et permettre aux programmes du mode utilisateur de communiquer avec le LPT. La programmation
d’un pilote n'est pas un travail facile même pour des programmeurs expérimentés. Néanmoins, un pilote pour la
communication avec le port parallèle est une tâche simple quand des pilotes pour USB, la carte du son etc.. sont
concernés.
La particularité de Inpout32.dll est qu’elle peut travailler avec toutes les versions de Windows sans n'importe
quelle modification dans le code de l’utilisateur ou dans le DLL lui-même. Cette partie de TP décrit comment
elle est réalisée, quelles méthodes de programmation sont employées, qu’elles sont les API utilisées, etc... La
Dll vérifie la version de système d'exploitation quand les fonctions sont appelées. Si le système d'exploitation est
WIN9X, la DLL utilise alors les fonctions _inp () et _outp pour la lecture / écriture sur le port parallèle.
Inversement, si le système d'exploitation est le WIN NT, 2000 ou XP, elle installe un pilote de mode noyau et
communique au port parallèle via ce pilote. Le code de l'utilisateur ne sera pas conscient de la version de l’OS
sur laquelle il s’exécute. Ce DLL peut être employé dans la version WIN NT comme si c'était WIN9X.
L'organigramme ci-dessous montre le fonctionnement de cette bibliothèque :
ISET Mahdia
Informatique Industrielle 4ème niveau 67
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
Les deux blocs constituant la bibliothèque sont :
-
Le pilote du mode noyau embarqué dans la Dll.
La Dll elle-même.
Les deux fonctions à utilisées depuis la Inpout32.dll sont :
-
« Inp32 », pour lire les données depuis le registre spécifié.
« Out32 », pour écrire des données dans le registre spécifié.
6. Manipulation
6.1. Exemple de programmation
Â
Â
Â
Â
Â
Sous VB créez une nouvelle application.
Enregistrer votre projet dans un nouveau répertoire nommé « II4 ».
Copier les fichiers « Inpout32.dll » et « hwinterface.ocx » dans ce même répertoire.
Ajouter un nouveau module dans votre projet.
Dans ce module tapez le code suivant :
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value
As Integer)
ISET Mahdia
Informatique Industrielle 4ème niveau 68
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
 Sur la feuille ajoutez deux boutons et deux champs de texte comme le montre la figure suivante:
 En code tapez alors les lignes suivantes :
Private Sub Command1_Click() ‘ Pour le bouton IN
Text2.Text = Str(Inp(Val("&H" + Text1.Text))) ‘Les données lues seront affichées dans la zone
End Sub
‘ de texte à droite
Private Sub Command2_Click() ‘ Pour le bouton OUT
Out Val("&H" + Text1.Text), Val(Text2.Text) ‘Les données saisies dans la zone de texte data
End Sub ‘seront envoyées vers l’adresse indiquée
Â
Â
Â
Â
Â
Exécutez le code.
Identifier l’adresse du port parallèle de votre PC.
Tapez cette adresse dans le champ « Address » et cliquez sur le bouton ‘IN’. Notez alors le résultat.
Tapez maintenant une valeur dans le champ « Data » et cliquez sur ‘OUT’.
Cliquez maintenant sur ‘IN’ et vérifiez le résultat.
6.2. Programmation
On vous propose le schéma électronique suivant :
P1
13
25
12
24
11
23
10
22
9
21
8
20
7
19
6
18
5
17
4
16
3
15
2
14
1
D1
D2
D3
D4
DIODE
DIODE
DIODE
DIODE
R1
R
R2
R
R3
R
R4
R
CONNECTOR DB25
ISET Mahdia
Informatique Industrielle 4ème niveau 69
Med Ali KAMMOUN
Programmation de l’interface parallèle sous Visual Basic
 Réalisez sur la plaque d’essais le montage électronique figurant dans le schéma
 Créez un nouveau projet sous VB qui vous permet d’allumer toutes les diodes.
 Modifiez le code de votre application pour permettre une commande sélective des diodes (on peut
allumer D1 toute seule, D4 et D3 seulement etc…). Vous devez concevoir une interface logicielle
convenable pour l’application.
 Améliorer votre application…
ISET Mahdia
Informatique Industrielle 4ème niveau 70
Téléchargement