Bonjour,

je vais exposer mon problème je travaille sur un projet qui me permet de compter via des interruptions et on envoie des consignes a partir du PC via la RS232 j'utilise comme microcontroleur un PIC16F877. Le programme est simple a chaque fois que mon timer fait un overflow l'interruption incrémente une variable etc. mais mon problème n'est pas la, c'est que lorsque j'alimente ma carte, pour la faire fonctionner je dois procéder a plusieurs RESET sur la pin MCLR.

Y a t-il une instruction particulière pour activer au démarrage les interruptions? (surtout pour la RS232)

voici mon code d'interruption et des instructions présente dans ma boucle principale permettant l'initialisation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void interrupt()
{
if ((Usart_Data_Ready()) && (PIR1.RCIF==1))
{
CONSIGNES = Usart_Read();
PIR1.RCIF = 0;
}
 
if (PIR1.TMR2IF)
{
compteur_ms++ ;
PIR1.TMR2IF = 0;
}
}
et dans ma boucle main j'ai ajouté :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
INTCON = 0xC0; // interruptions USART
PIE1.RCIE = 1;
PIR1.RCIF = 0;
 
T2CON = 0x4C; // Configurations du Timer2
PR2 = 247;
TMR2 = 0; // Initialisation du registre Timer2
puis dernières lignes qui concerne les lancements du timer2 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
PIE1.TMR2IE = 1; // interruptions TIMER2 activées
 
// une partie de code qui va faire des comparaisons
 
PIE1.TMR2IE = 0; // interruptions TIMER2 désactivées.
Petite précision une fois que les resets sont effectués la totalité du programme que j'ai créé fonctionne parfaitement mais le but principal de mon projet c'est qu'il fonctionne sans qu'on aie a faire des resets.

merci d'avance pour vos futures réponses