J'ai créé deux interruptions avec deux priorités différents.
L'interruption à haute priorité marche toujours, mais le programme ne rentre jamais dans celle de basse priorité.
Voilà mon code :
Code : Tout sélectionner
#include <XC.h>
#include <stdio.h>
#include <stdlib.h>
#pragma config OSC = INTIO67
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config BOREN = OFF
#pragma config MCLRE = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config STVREN = OFF
#define _XTAL_FREQ 4000000
#define BP_A PORTBbits.RB4 // RB4 et RB5 = boutons poussoires
#define BP_B PORTBbits.RB5
#define LED PORTCbits.RC5
void __interrupt(high_priority) Interrupt_Routine_H (void)
{
if(INTCONbits.TMR0IF) // Si overflow Timer0
{
TMR0H = 243 ; // Timer = 0.1s (si prescal=1:32)
TMR0L = 203 ; // Timer = 0.1s (si prescal=1:32)
INTCONbits.TMR0IF = 0 ; // Clear overflow flag Timer0
}
}
void __interrupt(low_priority) Interrupt_Routine_L (void)
{
if(INTCONbits.RBIF) // Si overflow changement sur Prot B
{
if(BP_A==0) { LED = 0 ; while(BP_A==0){} }
if(BP_B==0) { LED = 1 ; while(BP_B==0){} }
INTCONbits.RBIF = 0 ; // Clear overflow flag PORTB
}
}
int main(int argc, char** argv)
{
TRISA = 0b00000001 ;
TRISB = 0b00111100 ;
TRISC = 0b00000000 ;
PORTA = 0b00000000 ;
PORTB = 0b00000000 ;
PORTC = 0b00000000 ;
INTCON = 0b10101000 ;
INTCON2 = 0b00000100 ;
T0CON = 0b10000100 ;
TMR0H = 243 ; // Timer = 0.1s (si prescal=1:32)
TMR0L = 203 ; // Timer = 0.1s (si prescal=1:32)
OSCCON = 0b01100010 ; //4MHz
while(1)
{
__delay_ms(1000) ;
}
return (EXIT_SUCCESS);
}
Si je place ceci :
Code : Tout sélectionner
if(INTCONbits.RBIF) // Si overflow changement sur Prot B
{
if(BP_A==0) { LED = 0 ; while(BP_A==0){} }
if(BP_B==0) { LED = 1 ; while(BP_B==0){} }
INTCONbits.RBIF = 0 ; // Clear overflow flag PORTB
}dans celle de haute priorité, et que je mets RBIP à 1, alors le programme s'exécute et j'arrive dans l'exemple à allumer ou éteindre la LED.
PS: J'aurais dû utiliser les pins pour faire des external interrupt pour choisir front descendant, mais vu que j'ai déjà mon PCB c'est trop tard maintenant.
Merci d'avance.

