Bonjour à tous,

Mon PIC16F887 communique avec un capteur de température TMP100 via I2C.

Lors de la lecture de la température, le PIC "plante" à un endroit étrange : au moment où lui-même envoie un ACK.

Code de l'envoie du ACK :
Code:
I2C_ack
	bank1				  ; passer banque 1
	bcf		SSPCON2,ACKDT ; le bit qui sera envoyé vaudra « 0 »
	bsf		SSPCON2,ACKEN ; lancer l’acknowledge (= ACKDT = 0 = ACK)
I2C_ack2
	btfsc	SSPCON2,ACKEN ; tester si ACK terminé
	goto	I2C_ack2	  ; non, attendre
	bank0				 ; repasser banque 0
	return
Il plante dans la boucle de vérification de l'ack terminé.
Je trouve ça vraiment étrange, car si j'ai bien tout compris, lorsque le PIC envoie un ACK, il ne fait strictement aucunne vérification ... il envoie son ACK, point final, non ?

Pourquoi le programme planterait à cet dans cette boucle ???

Voici le code pour lire la température :
Code:
LM73_Read_Tc
	movlw	LM73_ADDR
	movwf	SLAVE
	movlw	LM73_Tc_REGISTER
	movwf	OCTET
	call	I2C_start
	call	I2C_adress_write
	call	I2C_check
	call	I2C_send		; on envoie l'adresse du registre de température
	call	I2C_check
	call	I2C_start		; Repeat Start
	call	I2C_adress_read
	call	I2C_check
	call	I2C_read		; On lit les bits 15 -> 8
	movf	SSPBUF, 0;
	movwf	Tc
	call	I2C_ack			; on envoit un ACK
	call	clear_afficheur
	call	I2C_read		; on lit les bits 7 -> 0
	movf	SSPBUF, 0;
	movwf	Tc+1
	call	I2C_noack
	call	I2C_stop
	return
Et ça plante lors du "call I2C_ack" ... incompréhensable !