Bonjour,

je ouvre une nouvelle discussion, car le titre de ma dernière n'attire pas trop l'attention..
Je suis débutant en C, et je souhaite réaliser un petit programme tout simple(je pensais) qui me permettrai comprendre un peu plus le fonctionnement des interruptions, pour cela je veux réaliser un ptit prog qui après un appui sur un BP branché sur RB0, cela allume une LED sur RB3 et suite a un autre appui sur le bouton poussoir, elle séteint et ainsi de suite...
J'ai écris le programme suivant mais il ne fonctionne pas...savez vous d'ou cela peut il venir??
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//fichier de declaration des registres internes du microcontroleur
#include <p18f4682.h>
#include <portb.h>    /* for the RB0/INT0 interrupt */
 
//Déclaration des PORTXbits.RXX utilisés
#define LED_ON PORTBbits.RB3
 
//Configuration Bits
#pragma config OSC = HS			//Config du type de l'oscillateur
 
 
int ledstatut=0;
 
 
//Sous programmes
void init_uc(void);
void ChargeurON (void);
 
 
 
/* fonction interruption */
void ChargeurON(void);
 
// on déclare que lors d'une interruption
#pragma code highVector=0x008
void atInterrupthigh(void)
{
// on doit éxecuter le code de la fonction MyHighInterrupt
_asm GOTO ChargeurON _endasm		
}
#pragma code // retour à la zone de code
 
// ************************
// ****  Interruptions ****
// ************************
#pragma interrupt ChargeurON 
void ChargeurON(void)
{
if(ledstatut==0)
{
LED_ON=1;
}
 
if(ledstatut==1)
{
LED_ON=0;
}
 
ledstatut=LED_ON;
 
INTCONbits.RBIF = 0; // Clear PORTB Interrupt Flag. 
}
 
 
/***************************************************************************
*********************Programme Principal************************************
***************************************************************************/
void main (void)
{
init_uc();				//Appel SP Initialisation du microcontroleur
 
while(1)
{
OpenRB0INT (PORTB_CHANGE_INT_ON & /* enable the RB0/INT0 interrupt */
              PORTB_PULLUPS_ON &    /* configure the RB0 pin for input */
              FALLING_EDGE_INT);    /* trigger interrupt upon S3 button
                                       depression */
 
PORTBbits.RB2=1;
 
 
}
}//Fin Programme Principal
 
 
 
 
 
/***************************************************************************
Nom   : void init_uc(void)
Role  : Configuration et initialisation des Ports E/S
----------------------------------------------------------------------------
Contraintes           : Aucune
Donnees en entree     : Aucune
Donnees en sortie     : Aucune
Donnees glob. modif.  : Aucune
*****************************************************************************/
void init_uc(void)
{
 TRISA=0x00;					// PORTA en sortie
 TRISB=0x03;					// RB7-RB2 en sortie RB1-RB0 en entrée
 TRISC=0x1F;					// RC7-RC5 en sortie RC4-RC0 en entrée
 TRISD=0x4F;					// PORTD en sortie sauf RD7 RD5 RD4
 TRISE=0x00;					// PORTE en sortie
 
 PORTA=0x00;
 PORTB=0x00;
 PORTC=0x00;
 PORTD=0x00; 
 PORTE=0x00;
 
 ADCON1=0b00001111;				//Configuration du portA en numérique
}
Je vous remercie d'avance pour votre aide...
Nicolas