Bonjour,
Je galère depuis plusieurs jours sur le même problème.
PRESENTATION :
J'ai relié 2 PIC via deux 75176 (bus de transmission différentiel) en utilisant les deux usart.
Un pic 16F628 est en émetteur, l'autre en récepteur.
La pattes MCLR est reliée à 5V : en intRC I/O in, il n'y a pas de quartz.
Le signal série start, 8bits, stop arrive bien à la patte RX du PIC récepteur. L'interruption est bien reconnue comme interruption de usart.
PROBLEME :
Le programme principal tourne en boucle. (Led allumée)
Envoi d'un signal serie
Le programme passe dans le programme d'interruption MAIS ne revient pas au programme principal. (Led éteinte)
Un second signal série regénère une interruption avec une erreur OERR. Même en corrigeant cette erreur le programme ne revient pas au programme principal. (Led éteinte)
PROGRAMME
Je mets le programme du recepteur simplifié (la config est la même pour usart pour le générateur) et le programme d'interruption est au plus simple.
Merci par avance pour votre aide.
ORG 0x0000
goto pPrincipal
ORG 0x0004
goto pInter
;**** PROGRAMME PRINCIPAL
pPrincipal call iPort
call iUsart
bcf PORTB,0 ; Met en mode reception sur le 75176
bcf STATUS,RP0
bsf PIE1,RCIE
bsf INTCON,PEIE
bsf INTCON,GIE
boucle
bsf PORTB,6 ; Led allumée
call tempo
goto boucle
;**** PROGRAMME D'INTERRUPTION
pInter
movwf W_TEMP ; sauvegarde les registres
swapf STATUS, W
movwf STATUS_TEMP
bcf PORTB,6 ; Led éteinte
swapf STATUS_TEMP, W
movwf STATUS
swapf W_TEMP, f
swapf W_TEMP, W
retfie
;**** INIT PORTS
iPort bcf STATUS,RP0
movlw 0x07
movwf CMCON ; désactive le mode comparateur
bsf STATUS,RP0
movlw B'11111111'
movwf TRISA
movlw B'00000010'
movwf TRISB
bcf STATUS,RP0
return
;**** INIT USART
; Vitesse = 9600bps, Pas de Parity, 1 Stop Bit
iUsart bsf STATUS,RP0
movlw 0x19 ; 0x19=9600
movwf SPBRG
movlw b'00100100' ; brgh = 1
movwf TXSTA ; valide Async Transm, brgh=1
bcf STATUS,RP0
movlw b'10010000' ; valide Async Reception
movwf RCSTA
call tempo return
;**** TEMPO
tempo ;non détaillée - Durée 1ms
return
;+++++
END
-----