Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Faut t'il l'éffacer à chaque fois le flash d'interruption usart
Bonjour tout le forum,
Une petite question, qui me tourmente, faut-t-il effacer le flash d’interruption sur l'usart, même si on n'a pas activer les interruptions ?
J'ai trouvé ça dans la datsheet :
bit 5 = RC1IF: EUSART1 Receive Interrupt Flag bit
1 = The EUSART1 receive buffer, RCREG1, is full (cleared when RCREG1 is read)
0 = The EUSART1 receive buffer is empty
Il ne parle pas d'effacer le flash d'interruption, il faut juste lire le registre RCREG1, (j'ai bien précisé que les interruptions son couper)
Est ce que ça suffit d'après vous ?
Car dans la pratique, pour savoir si un caractère est reçu on fait comme ceci, (test du flash d'interruption)
Hors RC1IF fait parti du flash d'interruption qu'il faut effacer quand ont sort de l'interruption (c'est pas mon cas)
A+
Une petite question, qui me tourmente, faut-t-il effacer le flash d’interruption sur l'usart, même si on n'a pas activer les interruptions ?
J'ai trouvé ça dans la datsheet :
bit 5 = RC1IF: EUSART1 Receive Interrupt Flag bit
1 = The EUSART1 receive buffer, RCREG1, is full (cleared when RCREG1 is read)
0 = The EUSART1 receive buffer is empty
Il ne parle pas d'effacer le flash d'interruption, il faut juste lire le registre RCREG1, (j'ai bien précisé que les interruptions son couper)
Est ce que ça suffit d'après vous ?
Car dans la pratique, pour savoir si un caractère est reçu on fait comme ceci, (test du flash d'interruption)
Code : Tout sélectionner
btfss PIR1,RC1IF ; caractère reçu ?
bra re_usart_1 ; non
; oui
Hors RC1IF fait parti du flash d'interruption qu'il faut effacer quand ont sort de l'interruption (c'est pas mon cas)
Code : Tout sélectionner
btfsc PIR1,RC1IF
bcf PIR1,RC1IF ; effacer le flag d'interruption
A+
Faut t'il l'éffacer à chaque fois le flash d'interruption usart
- paulfjujo
Expert- Messages : 2900
- Âge : 74
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Temps-x a écrit :
Une petite question, qui me tourmente, faut-t-il effacer le flash d’interruption sur l'usart, même si on n'a pas activer les interruptions ?Code : Tout sélectionner
btfss PIR1,RC1IF ; caractère reçu ?
bra re_usart_1 ; non
; oui
Hors RC1IF fait parti du FLAG d'interruption qu'il faut effacer quand ont sort de l'interruption (c'est pas mon cas)
NON,
la simple lecture du registre reception RCReg , RAZ ce flag RC1IF
il n'y a pas besoin de RAZER ce flag ,de plus c'est impossible .
The RCxIF interrupt flag bit of the PIR1/PIR3 register is
set whenever the EUSART receiver is enabled and
there is an unread character in the receive FIFO. The
RCxIF interrupt flag bit is read-only, it cannot be set or cleared by software.
donc avec RCIE à 0, on entre jamais dans l'interrupt traitement reception UART
Faut t'il l'éffacer à chaque fois le flash d'interruption usart
Bonjour,
Le bit RCIF est baptisé flag d'interruption alors qu'il n'a rien à voir avec le fait que le pic peut interrompre le programme principal et lancer une routine d'interruption.
Tous les flags IF sont là pour indiquer que quelque chose s'est passé dans le pic ou sur une de ces entrées.
Le bit TIF passe à 1 quand le timer a débordé, et c'est au programmeur de le remettre à 0.
Le bit RCIF passe à 1 quand le pic reçoit un octet sur l'uart, là la remise à 0 se fait de façon indirecte quand le programme lit le registre RCREG.
Si un bit IF reste à 1 car non remis à 0 par le programme, ce n'est pas grave, le pic continue à tourner.
Tous ces mécanismes sont actifs en permanence, et on a toujours pas parlé d'interruption
Alors allons-y. Si on met RCIE à 1, le pic démarre une routine d'interruption dès que RCIF est à 1.
A la sortie de cette routine, si elle n'a pas remis le flag RCIF à 0, elle redémarrera indéfiniment et le pic sera bloqué. C'est donc à la routine d'interruption de remettre le flag RCIF à 0 en lisant RCREG, pour éviter la boucle infernale.
Les routines d'interruption dépendent des flags IE et IF.
Les flags IF ne dépendent de personne, il y a juste obligation pour le programmeur de les remettre à 0 si IE est à 1.
Le bit RCIF est baptisé flag d'interruption alors qu'il n'a rien à voir avec le fait que le pic peut interrompre le programme principal et lancer une routine d'interruption.
Tous les flags IF sont là pour indiquer que quelque chose s'est passé dans le pic ou sur une de ces entrées.
Le bit TIF passe à 1 quand le timer a débordé, et c'est au programmeur de le remettre à 0.
Le bit RCIF passe à 1 quand le pic reçoit un octet sur l'uart, là la remise à 0 se fait de façon indirecte quand le programme lit le registre RCREG.
Si un bit IF reste à 1 car non remis à 0 par le programme, ce n'est pas grave, le pic continue à tourner.
Tous ces mécanismes sont actifs en permanence, et on a toujours pas parlé d'interruption
Alors allons-y. Si on met RCIE à 1, le pic démarre une routine d'interruption dès que RCIF est à 1.
A la sortie de cette routine, si elle n'a pas remis le flag RCIF à 0, elle redémarrera indéfiniment et le pic sera bloqué. C'est donc à la routine d'interruption de remettre le flag RCIF à 0 en lisant RCREG, pour éviter la boucle infernale.
Les routines d'interruption dépendent des flags IE et IF.
Les flags IF ne dépendent de personne, il y a juste obligation pour le programmeur de les remettre à 0 si IE est à 1.
Faut t'il l'éffacer à chaque fois le flash d'interruption usart
Bonsoir paulfjujo, satinas, et tout le forum,
effectivement tu as tout à fait raison, j'ai bien lu les cours de bigonoff qui explique cela, mais je voulais en être sûr car je ne comprends pas toujours ce qu'il explique, même si c'est très bien expliqué, ça doit venir de moi...
D'accord je comprends mieux avec ton explication satinas, c'est très bien expliqué .... je vais pouvoir dormir cette nuit .
Même si mon programme tourne correctement, j'aime bien lever le doute....
paulfjujo et satinas pour votre intervention
A+
paulfjujo a écrit :Source du message il n'y a pas besoin de RAZER ce flag ,de plus c'est impossible
effectivement tu as tout à fait raison, j'ai bien lu les cours de bigonoff qui explique cela, mais je voulais en être sûr car je ne comprends pas toujours ce qu'il explique, même si c'est très bien expliqué, ça doit venir de moi...
satinas a écrit :Source du message Le bit RCIF est baptisé flash d’interruption alors qu'il n'a rien à voir avec le fait que le pic peut interrompre le programme principal et lancer une routine d'interruption
D'accord je comprends mieux avec ton explication satinas, c'est très bien expliqué .... je vais pouvoir dormir cette nuit .
Même si mon programme tourne correctement, j'aime bien lever le doute....
paulfjujo et satinas pour votre intervention
A+
Retourner vers « Généralités sur les PICs »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités