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 ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Faut t'il l'éffacer à chaque fois le flash d'interruption usart
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2758
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » sam. 23 nov. 2024 15:14

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) :shock:

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+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Faut t'il l'éffacer à chaque fois le flash d'interruption usart
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2879
Âge : 74
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » sam. 23 nov. 2024 16:15

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
Aide toi, le ciel ou FantasPic t'aidera

Faut t'il l'éffacer à chaque fois le flash d'interruption usart
satinas
Expert
Expert
Messages : 1272
Enregistré en : novembre 2015

#3 Message par satinas » sam. 23 nov. 2024 16:36

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.

Faut t'il l'éffacer à chaque fois le flash d'interruption usart
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2758
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » sam. 23 nov. 2024 22:34

Bonsoir paulfjujo, satinas, et tout le forum,

paulfjujo a écrit :Source du message il n'y a pas besoin de RAZER ce flag ,de plus c'est impossible

:roll: 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é, :sifflotte: ç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


:eek: 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.... :-D


Merci ! paulfjujo et satinas pour votre intervention

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités