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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include <p18F2680.h>
#pragma config PBADEN = OFF
//ROUTINE D'INTERRUPTION PRINCIPALE - A PLACER EN COMMENTAIRE AU MOMENT DES TESTS
void interrupt delai_sur_pulse(void)
{
if (INTCONbits.INT0IF) // Test sur le flag d'interruption RB0
{
PORTBbits.RB1=0; // Mise à zéro du bit de Test
TMR2=0x00; // Initialisation du Timer 2
PR2=155; // Valeur (aléatoire) de référence pour le débordement du Timer
T2CON=0b01111111; // Valeur (aléatoire) des Pré/Post-Diviseurs et Lancement du Timer
INTCONbits.INT0IF=0; // Efface le flag d'interruption
}
if (PIR1bits.TMR2IF) // Test sur le flag d'interruption Timer2
{
T2CON=0b00000000; // Réinitialisation du registre - Arrêt du Timer 2
PORTBbits.RB1=1; // Mise à 1 du bit de Test
PIR1bits.TMR2IF=0; // Efface le flag d'interruption
}
}
//ROUTINE D'INTERRUPTION TEST1 - SUR L'INTERRUPTION RB0
//Objectif recherché : A chaque impulsion envoyée sur RB0 la valeur du bit de test devra s'alterner entre 0 et 1
/*void interrupt delai_sur_pulse(void)
{
if (INTCONbits.INT0IF)
{
PORTBbits.RB1=!(PORTBbits.RB1);
INTCONbits.INT0IF=0;
}
}*/
//ROUTINE D'INTERRUPTION TEST2
//Objectif recherché : Après l'écoulement du même délai (aléatoire) - la valeur du bit de test devra s'alterner entre 0 et 1
/*void interrupt delai_sur_pulse(void)
{
if (PIR1bits.TMR2IF)
{
TMR2=0x10;
PR2=155;
T2CON=0b01111111;
PORTBbits.RB1=!(PORTBbits.RB1);
PIR1bits.TMR2IF=0;
}
}*/
//PROGRAMME PRINCIPAL
void main (void)
{
PORTB=0b00000000; // Initialisation PORTB
TRISB=0b00000001; // Direction PORTB
T2CON=0b00000000; // Configuration initiale Timer 2
PIR1bits.TMR2IF=0; // Mise à zéro du flag pour IT Timer 2
PIE1bits.TMR2IE=1; // Interruption Timer 2 activée
IPR1bits.TMR2IP=1; // Interruption Timer 2 en haute prioritée
INTCON2bits.RBPU=0; // Activation des Pull-Up sur les pins du PORTB
INTCON2bits.INTEDG0=1; // Interruption INT0 sur flanc montant
INTCONbits.INT0IE=1; // Interruption RB0 activée
RCONbits.IPEN=1; // Activation des interruptions hiérarchisées (Ce programme ne contient pas d'IT basse priorité)
INTCONbits.GIEH=1; // Activation des interruptions haute priorité
INTCONbits.GIEL=1; // Activation des interruptions basse priorité
while(1); // Boucle infinie - Sera placé en commentaire pour le Test 2
//PARTIE DU PROGRAMME UNIQUEMENT UTILISEE POUR LE TEST 2
/* TMR2=0x00; // Initialisation du Timer 2
PR2=155; // Valeur de débordement du Timer (aléatoire)
T2CON=0b01111111; // Valeurs (aléatoires)des pré/post-diviseurs et lancement du Timer
while(1); // Boucle infinie*/
} |
Partager