Notes pour le TP
Répertoire des exemples : G:\ISAIP.DOC\tregouet\Irt PESO
Timer
Incrémentation d’un compteur par interruption + mise
à jour de l’horloge système grâce à l’ancien
gestionnaire d’interruption d’horloge
Timer2
Incrémentation d’un compteur par interruption
Sans mise à jour de l’horloge système (l’ancien
gestionnaire d’interruption d’horloge n’est pas appelé)
Win_scrt
Gestion de communication sur liaison série en mode
scrutation
Serie2
Communication sur liaison série en mode interruption
Comment compiler ?
Créer un dossier d:\temp\rs232
Taper les commandes suivantes :
C :
Cd d:\temp\rs232
X:tc (échap pour passer la page d’information)
Ouvrir le fichier Timer.c
Changer de répertoire actif (File/changedir : d:\temp\rs232)
Compiler
Exécuter dans une fenêtre de commande : d:\temp\rs232\timer.exe
TP / Programmation des Entrées / sorties sur PC
(voir notes à la fin du document)
Objectif 1 :
Modifier timer.c pour vérifier que le compteur est incrémenté 18,5 fois par
seconde
Modifier timer.c pour que la fonction activée par l’interruption d’horloge ne
fasse plus appel à l’ancien gestionnaire de l’événement d’horloge
(fonctionnement identique à Timer2.exe)
Modifier timer.c pour que la fonction activée par l’interruption d’horloge
n’indique plus au contrôleur d’interruption 8259 la fin du traitement de
l’évènement (résultat ?)
Objectif 2 :
1- Comme chaque demande d'interruption peut provenir de plusieurs
interfaces, quel est l'élément qui gère ces demandes et les transmet au
processeur ?
2- Dessiner un schéma représentant cet élément, le processeur et l'interface
8250, avec leurs principales connexions.
3- Comment peut-on interdire la prise en compte de nouvelles interruptions
pendant l'exécution d'un gestionnaire d'interruption ?
4- Que se passe-t-il si une demande d'interruption est faite alors que le
processeur a masqué les interruptions ?
5- Comment le PIC connaît-il le numéro de l'interruption reçue ? Comment ce
numéro est-il transmis au processeur ?
Modifier timer .c pour afficher l’adresse de l’ancien gestionnaire d’interruption
d’horloge : utiliser le format printf ("\t%8.8lx") et vérifier que l’adresse de ce
gestionnaire affichée par x:mft.exe est identique (Mft : afficher FirstMeg +
Interrupt + F3 pour trier par N° INT)
En utilisant MFT, répondre aux questions suivantes :
Combien y a-t-il de vecteurs d’interruptions ?
Combien sont utilisés pour les IRQ
(interruptions matérielles gérées par un 8259)
Un PC AT dispose de 2 circuits 8259 « liés » par un numéro
d’interruption : Compléter le tableau suivant
Premier
8259
INT
Périphérique
connecté
Deuxième
8259
IRQ0
IRQ8
IRQ1
IRQ7
IRQ15
Processeur
Objectif 3 : Notion d’interruption logicielle
Une interruption logicielle est une fonction du système que l’on peut appeler en connaissant
non pas son nom mais son adresse mémorisée dans un vecteur d’interruption. int86x permet
en langage C d’appeler une fonction dont on connaît le vecteur d’interruption associé.
Int86x sert normalement à appeler une fonction du bios ou du DOS par exemple pour écrire
sur l’écran (0x10) ou lire au clavier (0x16) etc… mais on peut aussi grâce à int86x faire
exécuter une fonction associée à un événement matériel comme dans l’exemple suivant avec
« division par zéro », ce qui revient à simuler l’événement matériel.
Quelle est l’interruption qui traite l’événement division par zéro ?
En utilisant et modifiant le programme interr2.c
o Provoquer l’affichage du message « divide by zero » en appelant explicitement
la fonction associée au vecteur 0x00 (simulation de l’événement, méthode de
l’interruption logicielle)
o Provoquer l’affichage du message « divide by zero » en appelant indirectement
la fonction associée au vecteur 0x00 : programmer une division par zéro
(méthode de l’interruption matérielle)
Changer le message « divide by zero » par le message « Erreur : division par zéro ».
o Quelle méthode utiliser ?
o Le mettre en œuvre et comparer avec la solution de interrup.c
Objectif 4 : Créer un programme de gestion de l’interruption clavier
En s’inspirant de timer.c, créer un programme qui permet de compter les caractères
tapés au clavier
Comment pourrait-on faire pour que la nouvelle fonction de gestion du clavier
convertisse systématiquement les caractères en majuscules ?
Notes complémentaires :
1- Créer un dossier c:\temp\rs232
2- Recopier les fichiers *. de G:\ISAIP.DOC\etudiant\RS232 sur c:\temp\rs232
3- Ouvrir une fenêtre de commande DOS
4- Et taper les commandes suivantes pour lancer Turbo C
X:tc (échap pour passer la page d’information)
Ouvrir le fichier Timer.c sur c:\temp\rs232
Changer de répertoire actif (File/changedir : c:\temp\rs232)
Compiler
Exécuter dans une fenêtre de commande : c:\temp\rs232\timer.exe
1 / 3 100%