Problème d'interruption sur un pic16F877
Fidchell456
Messages postés
9
Statut
Membre
-
Fidchell456 Messages postés 9 Statut Membre -
Fidchell456 Messages postés 9 Statut Membre -
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 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 :
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é :
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 :
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 :D
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 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 :
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é :
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 :
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 :D
A voir également:
- Problème d'interruption sur un pic16F877
- Zone telechargement - Interruption à 655Mo - Forum Réseaux sociaux
- Bonjour, « d interruption : comment entrer dans le bios l ✓ - Forum Windows
- Interruption hachée du son des enceintes bluetooth - Forum Enceintes / HiFi
- PC lent et qui saccade en jeu, causé par "Interruption Système" ✓ - Forum Windows 10
2 réponses
BONJOUR,
bon tout d'abord je ne sais pas si vous nous avez donner votre code complet,
si ce le cas je ne vois l'initialisation de RS232:des trucs de genre:
#INT_RDA : réception de donnée sur l'RS232
#use rs232 (baud = 9600, xmit = PIN_C6, rcv = PIN_C7)
pour des fonctions ou instruction pour RS232 il y'a:
getc() putc() getch() gets() puts() printf() kbhit() set_uart_speed() getchar() putchar()
Syntaxe : set_uart_speed(Vitesse) ; // Vitesse : 100 - 115200
vous pouvez trouver plus des détails dans le help de votre logiciel.
good luck pour votre projet :)
bon tout d'abord je ne sais pas si vous nous avez donner votre code complet,
si ce le cas je ne vois l'initialisation de RS232:des trucs de genre:
#INT_RDA : réception de donnée sur l'RS232
#use rs232 (baud = 9600, xmit = PIN_C6, rcv = PIN_C7)
pour des fonctions ou instruction pour RS232 il y'a:
getc() putc() getch() gets() puts() printf() kbhit() set_uart_speed() getchar() putchar()
Syntaxe : set_uart_speed(Vitesse) ; // Vitesse : 100 - 115200
vous pouvez trouver plus des détails dans le help de votre logiciel.
good luck pour votre projet :)
dans ce que j'ai posté il n'y a pas tout le code mais mon problème viens vraiment que lors du démarrage une fois que j'ai effectué une fois un RESET tout mon programme marche a merveille et bien sur le but de mon projet c'est qu'on a juste a l'alimenter pour qu'il fonctionne sans avoir a effectuer de RESETs ^^ donc en ce qui concerne les envois et les réceptions RS232 et le fait qu'il compte bien marche parfaitement après les fameux RESETs
je ne sais pas si j'ai réussi a bien m'exprimer pour vous parler de mon problème si il y a des questions pour que je vous explique plus en détails n'hésitez pas a me les poser. :d
je ne sais pas si j'ai réussi a bien m'exprimer pour vous parler de mon problème si il y a des questions pour que je vous explique plus en détails n'hésitez pas a me les poser. :d