Bonjour à tous,
je cherche à me familiariser avec les interruptions sur PIC18F,
j'ai fait un bout de code qui ne fonctionne pas correctement en simulation sur MPLAB, je n'arrive plus à ressortir de l'interruption.
une petite explication du fonctionnement supposé, à la mise sous tension les LEDS 1 et 2 s'allument, dés qu'il y a une interruption sur RB5 par exemple les LEDS 1 et 2 s'éteignent et les LEDS 3 et 4 s'allument.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include <p18f458.h> #define led1 PORTAbits.RA0 #define led2 PORTAbits.RA1 #define led3 PORTAbits.RA2 #define led4 PORTAbits.RA3 #define inter1 PORTBbits.RB5 void InterruptHandlerHigh (void); //---------------------------------interruption------------------------ #pragma code InterruptVectorHigh = 0x08 void InterruptVectorHigh (void) { _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm } //------------------------------------------------------------------------ // High priority interrupt routine #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh () { if (INTCONbits.RBIF) { INTCONbits.RBIF = 0; // mise à 0 du flag c'est ici le pb ! led3=1; led4=1; led1=0; led2=0; } } //------------programme_principal------------------------------------------ void main (void) { TRISB=0xFF*; // PORTB en entrée ADCON1=0x07; // PORTA en digital TRISA=0x00; // PORTDA en sortie PORTA=0x00; INTCON=0b10001000; // autorisation des interruptions sur RB4 à RB7 while(1) { led3=0; led4=0; led1=1; led2=1; } }
mon problème est que cette action INTCONbits.RBIF = 0; ne s'effectue pas, j'arrive pas à remettre RBIF à 0 donc je peux pas ressortir de mon interruption.
avez vous une idée ?
merci.
Partager