1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define IRQ_11 0x73 //----N° de l'I.T. IRQ_11
int CptInterrupt=0,FinBoucleInfini=0,AncMaskItMaitre=0,
AncMaskItEsclave=0;
void interrupt ( *AncVectIt)();
void interrupt Irq11()
{
CptInterrupt++;
//AncVectIt();
outport(0xA0,0x20); //---Marque la fin de l'interruption Esclave
outport(0x20,0x20); //---Marque la fin de l'interruption Maitre
}
main()
{
AncVectIt = getvect(IRQ_11); //--Valeur de l'ancien vecteur d'I.T
printf("la valeur de l'ancien vecteur est %d\n",AncVectIt);
AncMaskItEsclave = inport(0xA1);
disable(); //----Inhibe tous les IRQ
outport(0xA1,247); //---Permet de générer un masque sur l'esclave activant seulement l'Irq 11 (on met un 0 sur le bit correspondant)
setvect(IRQ_11,Irq11);
enable();
while (CptInterrupt < 20 && FinBoucleInfini<6000) //---Attente d'un signal d'I.T.
{printf("Le nombre d'I.T. Irq 11 est : %d\n",CptInterrupt); FinBoucleInfini++;}
//--------------Initialisation du vecteur d'I.T. a son ancienne valeur----------//
disable(); //----Inhibe tous les IRQ
setvect(IRQ_11,AncVectIt);
enable();
//------------------------------------------------------------------------------//
outport(0xA1,AncMaskItEsclave);
printf("la valeur de l'ancien masque esclave est %d\n",AncMaskItEsclave);
NvVectIt = getvect(IRQ_11); //--Valeur du nouveau vecteur d'I.T
printf("la valeur du nouveau vecteur est %d\n",NvVectIt);
return 0;
} |
Partager