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 :
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
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; } }
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
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
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.
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.
merci d'avance pour vos futures réponses![]()
Partager