bonjour TempsX et à tous,
je n'ai pas une vue d'ensemble de ton code pour bien comprendre , mais
pourquoi manipuler GIE bit dans cette routine ?
avec GIE bit=1 avant d'entrer dans la subroutine
si INTCON.RBIF passe à 1 , il y a un saut au vecteur interruption
si il n'y a pas de traitement lié à INTCON.RBIF , celle ci ne pourra pas se desamorcer
puisqu'on ne remet pas INTCON.RBIF à zero
et on ne peut plus revenir au main programme => blocage
soit on traite INTCON.RBIF en mode pooling ( GIE_bit toujours à 0)
soit via interruption et le traitement se fait dans l'interruption (si sa duree n'est pas critique)
ou via un flag dans le main si duree de traitement longue.
mais un mixte des deux , me parait tres aléatoire
Code : Tout sélectionner
spi
btfss INTCON,RBIF <----- si GIE est déja à 1 et si le bit RBIF est à 1 , on a déja saute au vecteur interrupt
<----- et blocage
bcf INTCON,GIE
movwf envoyer
bcf cs ; marche
movlw D'8' ; envoie de 8 bits
movwf bits
ev1_ssd1306
btfss envoyer,7 ; lecture sur le bit 7
bra ev2_ssd1306
bsf mosi ; envoie 1
bsf sck ;
bcf sck ;
bra ev3_ssd1306
ev2_ssd1306
bcf mosi ; envoie 0
bsf sck ;
bcf sck ;
ev3_ssd1306
rlncf envoyer,F ; rotation des bits à gauche sans carry
decfsz bits,F
bra ev1_ssd1306
bsf cs
btfss INTCON,RBIF
bsf INTCON,GIE
return