Interruption sur RB0 [langage C]
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:
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